节点在线、应用在线、配置在线使用令牌查询
|
# APP-1 应用工作å°èµ°æŸ¥ç¼ºé™·
- 状æ€ï¼šå¾…修。本文åªè®°ç¼ºé™·å’Œæ”¹æ³•ï¼Œä¸æ”¹ä»£ç 。
- 日期:2026-11-06
- 环境:本机 Vite `http://localhost:5188`ï¼ŒæŽ¥å£ `http://10.188.32.212:6681`(`Stardust.Web.Vue/.env.development.local` çš„ `VITE_APP_BASE_API`)。本机 6681 是å¦ä¸€ä¸ªå·¥ä½œåŒºï¼Œä¸åœ¨æœ¬æ¬¡èŒƒå›´ã€‚
- æ ·æœ¬ï¼šåº”ç”¨åˆ—è¡¨ 29 æ¡ï¼›å·¥ä½œå°ç”¨æ™ºèƒ½å·¥å•系统 `App.Id = 30`(显示å「智能工å•系统ã€ï¼Œé…ç½®å MindHub.Api)。Playwright åªè¯»ï¼Œæ²¡æœ‰ç‚¹å‘布ã€ä¿å˜ã€è§¦å‘ã€åˆ 除ã€å›žæ»šã€é‡å¯ã€ä¸Šä¼ 。
- 结论:下é¢ä¸¤å¤„éƒ½æ˜¯é¡µé¢æŠŠæŽ¥å£è¯»é”™äº†ã€‚接å£é‡Œçš„记录和数值是对的。
## 1. ä¸ä¿®
这些在走查里è§è¿‡ï¼Œä¸æ˜¯ç¼ºé™·ï¼Œä¸è¦é¡ºæ‰‹æ”¹ï¼š
| 现象 | åŽŸå› |
|---|---|
| è°ƒç”¨é“¾ã€æ—¥å¿—ã€æ³¨å†Œã€ç›‘æŽ§å¤§å±æ˜¯ç©ºæ€ | å½“å¤©æ²¡æœ‰é‡‡æ ·ã€æ²¡æœ‰æ—¥å¿—ã€æ²¡æœ‰æ³¨å†Œå®žä¾‹ã€æ²¡æœ‰æ—¥ç»Ÿè®¡ã€‚页é¢å†™çš„æ˜¯ã€Œæ²¡æœ‰è®°å½•ã€ï¼Œä¸æ˜¯åŠ è½½å¤±è´¥ |
| 部署节点写「未上报版本ã€ï¼Œæ¦‚览写 3 个节点与 `v20261105-121311` ä¸ä¸€è‡´ | éƒ¨ç½²èŠ‚ç‚¹çš„ç‰ˆæœ¬å—æ®µä¸ºç©ºã€‚实例上的 `1.0.2026.1105` æ˜¯è¿›ç¨‹ç‰ˆæœ¬ï¼Œä¸æ˜¯éƒ¨ç½²åŒ…版本 |
| å‘½ä»¤é‡Œæœ‰ä¸€æ¡ `config/publish`「找ä¸åˆ°è¯¥æœåŠ¡ã€ | 历å²å‘½ä»¤çš„ç»“æžœåŽŸæ–‡ï¼Œä¸æ˜¯è¿™æ¬¡é¡µé¢è¯·æ±‚失败 |
## 2. 缺陷
### 2.1 é…置页把已有é…置显示æˆåŠ è½½å¤±è´¥
**现象。** `/app/config/30` 显示「é…ç½®åŠ è½½å¤±è´¥ï¼Œè¯·ç‚¹åˆ·æ–°é‡è¯•ã€ã€‚页é¢é”™è¯¯æ•°ä¸º 0ï¼Œè¿™æ¬¡è¯·æ±‚ä¹Ÿä¸æ˜¯ 4xx。
**接å£ã€‚** `GET /api/Configs/AppConfig?appId=30&PageSize=20` 返回 200ã€`code: 0`,`data` 有一æ¡ï¼š`id` 22,`name` MindHub.Api,`version` 2,`nextVersion` 2,`enable` trueã€‚è¿™æ¡ JSON 里没有 `appId`。
**åŽŸå› ã€‚** åˆ—è¡¨æŽ¥å£æ•…æ„去掉了 `AppId`。`Stardust.WebApi/Areas/Configs/Controllers/AppConfigController.cs` æž„é€ å‡½æ•°é‡Œæœ‰ `ListFields.RemoveField("AppId", ...)`ï¼ŒæŸ¥è¯¢å‚æ•° `appId=30` å·²ç»è¿‡æ»¤è¿‡ã€‚å‰ç«¯ `fetchConfigApp`(`appConfig.logic.ts`)å´åœ¨æ¯ä¸€è¡Œä¸Šæ‰¾ `AppId` / `appId`,找ä¸åˆ°å°± `return null`。`AppConfigTable.vue` çš„ `load()` 把 `null` ä¸€å¾‹å†™æˆ `loadFailed`,于是请求失败和「行上没有 appIdã€å˜æˆåŒä¸€å¥ã€ŒåŠ è½½å¤±è´¥ã€ã€‚
**改法。** åªæ”¹å‰ç«¯ï¼Œä¸æŠŠ `AppId` åŠ å›žåˆ—è¡¨å—æ®µï¼ˆMVC åˆ—è¡¨ä¹Ÿåˆ äº†è¿™ä¸ªå—æ®µï¼‰ã€‚
1. `fetchConfigApp` 在 `listOf(res)` 之åŽï¼š
- 行上有 `appId` 时,ä»åªæ”¶ä¸Žå…¥å‚相åŒçš„那一行,é¿å…把别的应用收进æ¥ã€‚
- æ¯ä¸€è¡Œéƒ½æ²¡æœ‰ `appId`ï¼ˆåˆ—è¡¨å—æ®µè¢«åŽ»æŽ‰ï¼‰ä¸”åˆ—è¡¨éžç©ºæ—¶ï¼Œç”¨ç¬¬ä¸€æ¡ã€‚æŸ¥è¯¢å·²ç»æŒ‰ `appId` 过滤。返回对象里的 `appId` 用æ¥å‚,ä¸è¦å†™æˆ 0。
- 列表为空,或请求抛错,ä»è¿”回 `null`。
2. 䏿”¹ `AppConfigTable.vue` 的失败文案。这次的误报会在 `fetchConfigApp` 能å–到 id 22 ä¹‹åŽæ¶ˆå¤±ã€‚
3. 啿µ‹è¡¥åœ¨ `appConfig.logic.test.ts`:
- è¡Œåªæœ‰ `id` / `name` / `version`,没有 `appId`ï¼Œå…¥å‚ 30,得到 id 22(或夹具里的 id),且 `appId` 为 30。
- 行上的 `appId` 与入å‚ä¸åŒï¼Œä»ç„¶è¿”回 `null`。
- 现有「带 AppId 命ä¸ã€ã€Œéžæ³• id ä¸è¯·æ±‚ã€ã€Œè¯·æ±‚抛错返回 nullã€ä¿æŒé€šè¿‡ã€‚
**åšå®Œæ€Žä¹ˆè®¤ã€‚** 冿‰“å¼€ `/app/config/30`,应看到 MindHub.Api çš„é…ç½®é¡¹ï¼Œè€Œä¸æ˜¯ã€Œé…ç½®åŠ è½½å¤±è´¥ã€ã€‚ä¸è¦ç‚¹å‘布ã€åŒæ¥æˆ–ä¿å˜ã€‚
### 2.2 性能页把 MB æ˜¾ç¤ºæˆ B
**现象。** åŒä¸€æ—¶åˆ»ï¼Œ`/app/instances/30` 三å°å®žä¾‹å†…å˜çº¦ 537 MBã€543 MBã€552 MBï¼›`/app/meter/30` 对应行显示 537 Bï¼Œå †å†…å˜çº¦ 58 B。CPU 0.0% 两边一致。
**接å£ã€‚** `Stardust.Data/Entity/应用性能.cs` 写明 `Memory`ã€`HeapSize` å•使˜¯ M。`应用性能.Biz.cs` 上报时 `Memory = WorkingSet / 1024 / 1024`。所以 537 就是 537 MBï¼Œä¸æ˜¯ 537 å—节。
**åŽŸå› ã€‚** 实例页在 `mergeSnapshots` 里用 `mbToBytes` 把 MB 乘æˆå—节,å†äº¤ç»™ `formatBytes`。性能页 `toMeterRows` åŽŸæ ·ç•™ä¸‹ `memory`ã€`heap`,`AppObserve.vue` 对这两列直接 `formatBytes`。`formatBytes` 把å°äºŽ 1024 çš„æ•°æ˜¾ç¤ºæˆ B,于是 537 MB å˜æˆ 537 B,58 MB å˜æˆ 58 B。
**改法。** `formatBytes` ç»§ç»åªæŽ¥å—å—节,实例页ä¸è¦æ”¹ã€‚
1. 在 `toMeterRows` 里把 `Memory` å’Œ `HeapSize` å½“æˆ MB,转æˆå—节åŽå†æ”¾è¿› `memory`ã€`heap`。直接调用 `appInstances.logic.ts` çš„ `mbToBytes`(`null` æˆ–éžæ•°å—仿Œ‰çŽ°åœ¨çš„ `num()` è½åˆ° 0,å†ä¹˜ï¼‰ã€‚CPUã€çº¿ç¨‹ã€å¥æŸ„ã€è¿žæŽ¥ã€GC 次数ä¸è¦ä¹˜ã€‚
2. 曲线用的是åŒä¸€ä»½ `memory`ã€‚è½¬æ¢æ”¾åœ¨ `toMeterRows`ï¼Œè¡¨æ ¼å’Œæ›²çº¿ä¸€èµ·å¯¹ï¼Œä¸å¿…改 `AppObserve.vue` 的模æ¿ã€‚
3. 夹具现在把 `Memory: 1048576` 当æˆå—节(`AppObserve.story.ts`,CT 期望 `1.0 MB`ï¼‰ã€‚æ”¹å®ŒåŽæ•…事和 CT çš„åŽŸå§‹å—æ®µç”¨ MB:`Memory: 1` ä»åº”显示 `1.0 MB`。`appObserve.logic.test.ts` 里 `Memory: 1024` 的期望从 `memory: 1024` 改为 `1024 * 1024 * 1024`。有 `HeapSize` çš„å¤¹å…·åŒæ ·æ”¹æˆ MB。
**åšå®Œæ€Žä¹ˆè®¤ã€‚** 冿‰“å¼€ `/app/meter/30`,内å˜åº”接近实例页的 537 / 543 / 552 MBï¼Œå †å†…å˜ä¸å†æ˜¯å‡ å B。åªçœ‹åˆ—表,ä¸å‘命令。
## 3. 验è¯
两处都åªåЍ `StardustLayout2` çš„çº¯é€»è¾‘å’Œå·²æœ‰å•æµ‹ã€æ•…事夹具。
```bash
pnpm exec vitest run --config vitest.config.unit.ts src/layouts/StardustLayout2/appConfig.logic.test.ts src/layouts/StardustLayout2/appObserve.logic.test.ts --maxWorkers=2
```
工作目录是 `Stardust.Web.Vue`。故事夹具改了 `Memory` çš„è¯ï¼Œå†è·‘ `AppObserve` çš„ CT。æµè§ˆå™¨å¤çœ‹ä»ç”¨ Playwright,应用 id 30,ä¸è¦å¯¹çº¿ä¸Šç‚¹å†™æ“作。
|