Remove Jinja2 template fallback (1249 lines) — /admin/performance now serves Vue SPA exclusively via send_from_directory. Backend: - Add _SLOW_QUERY_WAITING counter with get_slow_query_waiting_count() - Record slow-path latency in read_sql_df_slow/iter via record_query_latency() - Extend metrics_history schema with slow_query_active, slow_query_waiting, worker_rss_bytes columns + ALTER TABLE migration for existing DBs - Add cleanup_archive_logs() with configurable ARCHIVE_LOG_DIR/KEEP_COUNT - Integrate archive cleanup into MetricsHistoryCollector 50-min cycle Frontend: - Add slow_query_active and slow_query_waiting StatCards to connection pool - Add slow_query_active trend line to pool trend chart - Add Worker memory (RSS MB) trend chart with preprocessing - Update modernization gate check path to frontend style.css Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
1. 後端:Semaphore 排隊計數器 + Slow-path latency
- 1.1 在
src/mes_dashboard/core/database.py新增_SLOW_QUERY_WAITINGcounter 和get_slow_query_waiting_count()函數 - 1.2 修改
read_sql_df_slow()在 semaphore.acquire() 前後遞增/遞減_SLOW_QUERY_WAITING - 1.3 修改
read_sql_df_slow_iter()同上加入 waiting counter 邏輯 - 1.4 修改
get_pool_status()回傳中加入slow_query_waiting欄位 - 1.5 在
read_sql_df_slow()finally block 呼叫record_query_latency(elapsed) - 1.6 在
read_sql_df_slow_iter()finally block 呼叫record_query_latency(elapsed)
2. 後端:metrics_history schema 擴充 + archive cleanup
- 2.1 在
src/mes_dashboard/core/metrics_history.py的 schema 新增slow_query_active INTEGER,slow_query_waiting INTEGER,worker_rss_bytes INTEGER欄位 - 2.2 在
MetricsHistoryStore.initialize()加入 ALTER TABLE ADD COLUMN migration(容錯 duplicate column) - 2.3 更新
COLUMNSlist 加入新欄位 - 2.4 更新
write_snapshot()加入新欄位的讀取和 INSERT - 2.5 更新
_collect_snapshot()收集slow_query_active、slow_query_waiting(從get_pool_status())和worker_rss_bytes(從resource.getrusage()) - 2.6 新增
cleanup_archive_logs(archive_dir, keep_per_type)函數,含ARCHIVE_LOG_DIR和ARCHIVE_LOG_KEEP_COUNTenv var 配置 - 2.7 在
MetricsHistoryCollector._run()的 cleanup cycle 呼叫cleanup_archive_logs()
3. 後端:移除 Jinja fallback
- 3.1 修改
src/mes_dashboard/routes/admin_routes.py的performance()路由,移除 Jinja fallback 邏輯(改為直接send_from_directory) - 3.2 刪除
src/mes_dashboard/templates/admin/performance.html - 3.3 更新
scripts/check_full_modernization_gates.py將/admin/performance的 gate check 從 template 路徑改為frontend/src/admin-performance/style.css
4. 前端:Vue SPA 新增監控面板
- 4.1 在
frontend/src/admin-performance/App.vue連線池 section 新增slow_query_active和slow_query_waitingStatCards - 4.2 在
poolTrendSeries加入slow_query_active趨勢線 - 4.3 新增
memoryTrendSeries定義和 Worker 記憶體 TrendChart 組件 - 4.4 新增
historyData預處理邏輯:將worker_rss_bytes轉為worker_rss_mb
5. Build + 測試驗證
- 5.1 執行
cd frontend && npx vite build確認 build 成功 - 5.2 執行
python -m pytest tests/ -v --tb=short確認既有測試通過 - 5.3 確認
test_performance_page_loads測試通過(SPA 路徑驗證)