fix(awooop): align console with flywheel execution metrics
This commit is contained in:
@@ -3137,3 +3137,91 @@ bash scripts/reboot-recovery/full-stack-cold-start-check.sh --send-alert-test
|
||||
- 110 actions runner units 仍按策略最後放行:guardrail 已套用,`CPUQuota=200%`、`MemoryMax=2G`、`WatchdogUSec=0`;需在 load/core 穩定後逐步開啟。
|
||||
- `Bad message` / `Structure needs cleaning` 是 host filesystem 層訊號;線上 clean-clone 已恢復服務,但完整歷史資料追溯需安排離線 `fsck` 或備份驗證。
|
||||
- `drift-scanner-29633040-qrf8w` 為單次 CronJob Error,不阻斷主服務;後續可清理或調查。
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-05(台北)— GCP Ollama 告警路徑止血與內網化決策
|
||||
|
||||
**觸發**:告警卡仍顯示 `Router: Gemini`,且 GCP-A / GCP-B Ollama 先前在告警 JSON prompt 上連續 504,導致 Gemini 備援產生費用。
|
||||
|
||||
### 已執行
|
||||
|
||||
| 範圍 | 結果 |
|
||||
|------|------|
|
||||
| 告警模型 | 將告警專用 Ollama 模型固定為 `gemma3:4b`,避免 `qwen3:14b` / `qwen2.5-coder:32b` 冷啟動拖入 Gemini |
|
||||
| Production image | `awoooi-api` / `awoooi-worker` 已手動切到 `192.168.0.110:5000/awoooi/api:787acd3bda918f53b977f37133e0b5c73558033e` |
|
||||
| Production env | 已明確設定 `ALERT_AI_ENFORCE_OLLAMA_FIRST=true`、`ALERT_AI_ALLOW_CLOUD_FALLBACK=true`、`ALERT_OLLAMA_MODEL=gemma3:4b` |
|
||||
| GCP Ollama 保溫 | GCP-A / GCP-B 已卸載 14B / 32B 重模型,並以 `keep_alive=8h` 保溫 `gemma3:4b` |
|
||||
| Meta W-6 降噪 | Trust Drift 未達 20% 時不再升級為 Meta System;現場 Redis 已加 6h dedup 防止重複通知 |
|
||||
|
||||
### 現場驗證
|
||||
|
||||
```bash
|
||||
kubectl -n awoooi-prod get deploy awoooi-api awoooi-worker -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{range .spec.template.spec.containers[*]}{.name}={.image}{" "}{end}{"\n"}{end}'
|
||||
# awoooi-api api=192.168.0.110:5000/awoooi/api:787acd3bda918f53b977f37133e0b5c73558033e
|
||||
# awoooi-worker worker=192.168.0.110:5000/awoooi/api:787acd3bda918f53b977f37133e0b5c73558033e
|
||||
|
||||
kubectl -n awoooi-prod exec deploy/awoooi-api -- printenv | grep -E 'ALERT_OLLAMA_MODEL|ALERT_AI_|OLLAMA_.*URL'
|
||||
# ALERT_OLLAMA_MODEL=gemma3:4b
|
||||
# ALERT_AI_ALLOW_CLOUD_FALLBACK=true
|
||||
# ALERT_AI_ENFORCE_OLLAMA_FIRST=true
|
||||
# OLLAMA_URL=http://192.168.0.110:11435
|
||||
# OLLAMA_SECONDARY_URL=http://192.168.0.110:11436
|
||||
# OLLAMA_FALLBACK_URL=http://192.168.0.111:11434
|
||||
```
|
||||
|
||||
### 架構決策
|
||||
|
||||
- 目前 `192.168.0.110:11435/11436` 是經由 110 nginx 轉發到 GCP 公網 IP,屬於過渡方案,不應作為長期 primary Ollama lane。
|
||||
- 建議建立 WireGuard site-to-site private mesh,讓 K3s / 110 / 111 / GCP-A / GCP-B 以私網 IP 互連,Ollama 僅綁定 mesh interface,並由 AwoooP Inference Gateway 統一路由、熔斷、佇列與模型保溫。
|
||||
- 注意:目前 GCP-A / GCP-B `/api/ps` 顯示 `size_vram: 0`,內網化可解決連線與安全問題,但無法讓 CPU-only GCP 等同 111 的 VRAM/GPU 效能;大模型應留在 111 或改用 GPU 型 GCP 節點。
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-06(台北)— AwoooP Operator Console 與飛輪 KPI 對齊
|
||||
|
||||
**觸發**:00:30 系統報告顯示「全系統正常」,但飛輪狀態為 `修復 0/15 (0%)`,使用者指出 AI 自動化幾乎沒有做;同步要求 AwoooP 工作項目必須與前端頁面、邏輯、操作面對齊。
|
||||
|
||||
### 已修正
|
||||
|
||||
| 範圍 | 結果 |
|
||||
|------|------|
|
||||
| 心跳報告 | `HeartbeatReportService._get_flywheel_stats()` 改讀 `auto_repair_executions`,不再用已失準的 `incidents.outcome` 推估修復率 |
|
||||
| 飛輪 Prometheus KPI | `FlywheelStatsService._playbook_stats()` 優先以 `auto_repair_executions` 計算 24h execution success rate,Redis playbook counter 僅作 fallback |
|
||||
| AI Success | `MetricsDBRepository` 改用 `UPPER(status::text)` 對齊實際 `APPROVED / EXECUTION_SUCCESS / EXECUTION_FAILED` 狀態值 |
|
||||
| Auto-repair metric | `AutoRepairService.execute_auto_repair()` 成功/失敗都呼叫 `record_auto_repair()`,修正 Prometheus 指標零 caller 問題 |
|
||||
| K8s Pod 報告 | Completed/Succeeded CronJob pod 不再顯示為紅色失敗;Telegram 報告會顯示 phase |
|
||||
| AwoooP 前端 | `/zh-TW/awooop` redirect 修正,Console 接入主 `AppLayout` 與 sidebar;新增 `工作鏈路` 頁映射 P0/P1/P2 工作項目、source of truth、gate 與操作面 |
|
||||
| AwoooP API | `GET /api/v1/platform/approvals?run_id=` 支援 M8 詳情頁查單筆 waiting approval |
|
||||
|
||||
### 驗證
|
||||
|
||||
```bash
|
||||
DATABASE_URL='postgresql+asyncpg://test:test@localhost:5432/test' \
|
||||
apps/api/.venv/bin/python -m py_compile \
|
||||
apps/api/src/repositories/metrics_repository.py \
|
||||
apps/api/src/services/heartbeat_report_service.py \
|
||||
apps/api/src/services/auto_repair_service.py \
|
||||
apps/api/src/services/flywheel_stats_service.py \
|
||||
apps/api/src/api/v1/platform/operator_runs.py \
|
||||
apps/api/src/services/platform_operator_service.py
|
||||
|
||||
DATABASE_URL='postgresql+asyncpg://test:test@localhost:5432/test' \
|
||||
apps/api/.venv/bin/python -m ruff check --select E9,F401,F821 \
|
||||
apps/api/src/repositories/metrics_repository.py \
|
||||
apps/api/src/services/heartbeat_report_service.py \
|
||||
apps/api/src/services/auto_repair_service.py \
|
||||
apps/api/src/services/flywheel_stats_service.py \
|
||||
apps/api/src/api/v1/platform/operator_runs.py \
|
||||
apps/api/src/services/platform_operator_service.py
|
||||
# All checks passed!
|
||||
|
||||
pnpm --filter @awoooi/web typecheck
|
||||
# tsc --noEmit passed
|
||||
```
|
||||
|
||||
### 後續
|
||||
|
||||
- 仍需處理 `approval_records.matched_playbook_id = NULL` 問題,否則執行結果無法完整回寫 Playbook trust。
|
||||
- 仍需攔截 AI action hallucination(alertname 被當 deployment/host、namespace 亂填)進入 approval 前的路徑。
|
||||
- AwoooP Console 下一步應接入真實 run step journal / trace view,而不是只列 run state。
|
||||
|
||||
Reference in New Issue
Block a user