All checks were successful
CD Pipeline / deploy (push) Successful in 2m35s
新頁 /observability/rag_queries:補完 RAG 觀測深度 之前只看 caller 級命中率,現在能看每筆查詢的真實內容。 O-1: route + template - 篩選:時段(1/6/24/72/168h)/ caller / saved_only flag - 整體 KPI 4 卡:總查詢 / 命中率 / saved_call 率 / 反饋平均分 - by caller 表:每個 caller 的查詢/命中/saved/反饋細節 - 最近 50 筆查詢詳情表 - 「查 hits」按鈕 → 彈 modal 載入 ai_insights JOIN 內容預覽 (新 endpoint /observability/rag_queries/<id>/hits 回傳 JSON) O-2: 入口 - sidebar AI 觀測 group 加「RAG 召回詳情」(11b) - /observability/overview 入口卡升級為 9 項 O-3: overview 三主機 24h sparkline - 每張主機卡片下方加 60px 高 chart.js sparkline - 折線:每小時 uptime % bucket(0-100% Y 軸隱藏,純視覺) - routes/admin_observability_routes.py::observability_overview 新加 host_sparkline 查詢(GROUP BY host_label, hour) - 三主機卡片視覺化升級:原本只有「100%」字,現在加趨勢線 Phase 38→51 累計 16 commits / 10 觀測頁。 觀測台戰役從「raw stats」到「視覺方格 UI 完整體」。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
156 lines
9.1 KiB
HTML
156 lines
9.1 KiB
HTML
{#
|
||
EwoooC Frontend V2 shell.
|
||
|
||
使用方式:
|
||
{% include 'components/_ewoooc_shell.html' %}
|
||
|
||
呼叫頁需提供 active_page;未提供時會以空字串處理。
|
||
#}
|
||
|
||
{% set _active_page = active_page|default('') %}
|
||
{% set _scheduler = scheduler_stats|default({}) %}
|
||
{% set _momo_runs = _scheduler.get('momo_task', []) if _scheduler is mapping else [] %}
|
||
{% set _latest_run = _momo_runs[0] if _momo_runs else {} %}
|
||
{% set _has_scheduler_data = _latest_run is mapping and _latest_run %}
|
||
{% set _last_run = _latest_run.get('last_run', '--') if _has_scheduler_data else '--' %}
|
||
{% set _scanned = _latest_run.get('scanned_count', _latest_run.get('total_products', '--')) if _latest_run is mapping else '--' %}
|
||
{% set _added = _latest_run.get('new_records', _latest_run.get('added', '--')) if _latest_run is mapping else '--' %}
|
||
{% set _run_status = _latest_run.get('status', '') if _has_scheduler_data else '' %}
|
||
{% set _status_label = '尚無紀錄' if not _has_scheduler_data else ('最近成功' if _run_status in ['Success', 'success', 'SUCCESS'] else (_run_status or '已有紀錄')) %}
|
||
{% set _next_run = next_run|default(None) %}
|
||
{% set _session_username = session.get('username') if session is defined else None %}
|
||
{% set _session_role = session.get('role') if session is defined else None %}
|
||
{% set _is_logged_in = session.get('logged_in') if session is defined else false %}
|
||
|
||
<aside class="momo-sidebar" aria-label="主選單">
|
||
<a class="momo-sidebar-logo" href="/">
|
||
<span class="momo-logo-mark" aria-hidden="true">
|
||
<span></span><span></span><span></span>
|
||
<span></span><span></span><span></span>
|
||
<span></span><span></span><span></span>
|
||
</span>
|
||
<span class="momo-brand-word">
|
||
<span class="momo-brand-name momo-display">EwoooC</span>
|
||
<span class="momo-brand-subtitle momo-label">價格監控 V2</span>
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="momo-nav momo-scroll">
|
||
<div class="momo-nav-group">
|
||
<div class="momo-nav-group-title momo-label">監控</div>
|
||
<a class="momo-nav-link {% if _active_page == 'dashboard' %}is-active{% endif %}" href="/">
|
||
<span class="momo-nav-icon"><i class="fas fa-border-all"></i></span>
|
||
<span class="momo-nav-label">商品看板</span>
|
||
<span class="momo-nav-code momo-mono">01</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page in ['edm', 'campaigns'] %}is-active{% endif %}" href="/edm">
|
||
<span class="momo-nav-icon"><i class="fas fa-bullhorn"></i></span>
|
||
<span class="momo-nav-label">活動看板</span>
|
||
<span class="momo-nav-code momo-mono">02</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page in ['sales', 'daily_sales', 'monthly', 'growth'] %}is-active{% endif %}" href="/sales_analysis">
|
||
<span class="momo-nav-icon"><i class="fas fa-chart-line"></i></span>
|
||
<span class="momo-nav-label">分析報表</span>
|
||
<span class="momo-nav-code momo-mono">03</span>
|
||
</a>
|
||
</div>
|
||
|
||
<div class="momo-nav-group">
|
||
<div class="momo-nav-group-title momo-label">營運</div>
|
||
<a class="momo-nav-link {% if _active_page == 'vendor_stockout' %}is-active{% endif %}" href="/vendor-stockout">
|
||
<span class="momo-nav-icon"><i class="fas fa-box-open"></i></span>
|
||
<span class="momo-nav-label">廠商缺貨</span>
|
||
<span class="momo-nav-code momo-mono">04</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page in ['ai_recommend', 'ai_history', 'ai_intelligence'] %}is-active{% endif %}" href="/ai_recommend">
|
||
<span class="momo-nav-icon"><i class="fas fa-wand-magic-sparkles"></i></span>
|
||
<span class="momo-nav-label">AI 助手</span>
|
||
<span class="momo-nav-code momo-mono">05</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'auto_import' %}is-active{% endif %}" href="/auto_import">
|
||
<span class="momo-nav-icon"><i class="fas fa-download"></i></span>
|
||
<span class="momo-nav-label">雲端匯入</span>
|
||
<span class="momo-nav-code momo-mono">06</span>
|
||
</a>
|
||
</div>
|
||
|
||
<div class="momo-nav-group">
|
||
<div class="momo-nav-group-title momo-label">AI 觀測</div>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_overview' %}is-active{% endif %}" href="/observability/overview">
|
||
<span class="momo-nav-icon"><i class="fas fa-satellite-dish"></i></span>
|
||
<span class="momo-nav-label">觀測台總覽</span>
|
||
<span class="momo-nav-code momo-mono">07</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_agent_orchestration' %}is-active{% endif %}" href="/observability/agent_orchestration">
|
||
<span class="momo-nav-icon"><i class="fas fa-network-wired"></i></span>
|
||
<span class="momo-nav-label">Agent 編排矩陣</span>
|
||
<span class="momo-nav-code momo-mono">07b</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_business_intel' %}is-active{% endif %}" href="/observability/business_intel">
|
||
<span class="momo-nav-icon"><i class="fas fa-briefcase"></i></span>
|
||
<span class="momo-nav-label">商業面 × AI</span>
|
||
<span class="momo-nav-code momo-mono">07c</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_host_health' %}is-active{% endif %}" href="/observability/host_health">
|
||
<span class="momo-nav-icon"><i class="fas fa-heartbeat"></i></span>
|
||
<span class="momo-nav-label">主機健康</span>
|
||
<span class="momo-nav-code momo-mono">08</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_ai_calls' %}is-active{% endif %}" href="/observability/ai_calls">
|
||
<span class="momo-nav-icon"><i class="fas fa-chart-bar"></i></span>
|
||
<span class="momo-nav-label">AI 呼叫</span>
|
||
<span class="momo-nav-code momo-mono">09</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_budget' %}is-active{% endif %}" href="/observability/budget">
|
||
<span class="momo-nav-icon"><i class="fas fa-wallet"></i></span>
|
||
<span class="momo-nav-label">預算控管</span>
|
||
<span class="momo-nav-code momo-mono">10</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_promotion_review' %}is-active{% endif %}" href="/observability/promotion_review">
|
||
<span class="momo-nav-icon"><i class="fas fa-brain"></i></span>
|
||
<span class="momo-nav-label">RAG 晉升審核</span>
|
||
<span class="momo-nav-code momo-mono">11</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_rag_queries' %}is-active{% endif %}" href="/observability/rag_queries">
|
||
<span class="momo-nav-icon"><i class="fas fa-magnifying-glass-chart"></i></span>
|
||
<span class="momo-nav-label">RAG 召回詳情</span>
|
||
<span class="momo-nav-code momo-mono">11b</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_quality_trend' %}is-active{% endif %}" href="/observability/quality_trend">
|
||
<span class="momo-nav-icon"><i class="fas fa-comments"></i></span>
|
||
<span class="momo-nav-label">反饋趨勢</span>
|
||
<span class="momo-nav-code momo-mono">12</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_ppt_audit' %}is-active{% endif %}" href="/observability/ppt_audit_history">
|
||
<span class="momo-nav-icon"><i class="fas fa-search"></i></span>
|
||
<span class="momo-nav-label">PPT 視覺審核</span>
|
||
<span class="momo-nav-code momo-mono">13</span>
|
||
</a>
|
||
</div>
|
||
|
||
<div class="momo-nav-group">
|
||
<div class="momo-nav-group-title momo-label">系統</div>
|
||
<a class="momo-nav-link {% if _active_page in ['settings', 'system_settings', 'logs', 'crawler', 'user_management', 'ai_automation_smoke'] %}is-active{% endif %}" href="/settings">
|
||
<span class="momo-nav-icon"><i class="fas fa-gear"></i></span>
|
||
<span class="momo-nav-label">系統管理</span>
|
||
<span class="momo-nav-code momo-mono">14</span>
|
||
</a>
|
||
</div>
|
||
</nav>
|
||
|
||
<div class="momo-status-card">
|
||
<div class="momo-status-title momo-label">爬蟲狀態</div>
|
||
<div class="momo-status-active momo-mono">
|
||
<span class="momo-live-dot"></span>
|
||
<span>{{ _status_label }}</span>
|
||
</div>
|
||
<div class="momo-status-meta momo-mono">
|
||
上次執行 {{ _last_run }}<br>
|
||
掃描筆數 {{ _scanned }}<br>
|
||
新增筆數 {% if _added == '--' %}--{% else %}+{{ _added }}{% endif %}
|
||
</div>
|
||
</div>
|
||
</aside>
|
||
|
||
<div class="momo-shell-backdrop" data-momo-sidebar-close></div>
|