fix(dashboard): 快取比價決策總覽
All checks were successful
CD Pipeline / deploy (push) Successful in 2m28s

This commit is contained in:
OoO
2026-05-01 14:32:51 +08:00
parent ea15aa6437
commit 77b085f813
4 changed files with 17 additions and 4 deletions

View File

@@ -2,7 +2,7 @@
> 本文件定義專案開發的核心準則與不可違反的規範
> **建立日期**: 2026-01-12
> **當前版本**: V10.54 (Vendor management query service extraction)
> **當前版本**: V10.55 (Cache dashboard competitor decision overview)
> **最後更新**: 2026-05-01
---

4
app.py
View File

@@ -95,8 +95,8 @@ except Exception as e:
sys_log.error(f"無法檢測磁碟空間: {e}")
# 🚩 系統版本定義 (備份與顯示用)
# 🚩 2026-05-01 V10.54: Vendor management query service extraction
SYSTEM_VERSION = "V10.54"
# 🚩 2026-05-01 V10.55: Cache dashboard competitor decision overview
SYSTEM_VERSION = "V10.55"
# ==========================================
# 🔒 SQL Injection 防護函數

View File

@@ -254,7 +254,7 @@ YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY', '')
# ==========================================
# 系統版本與路徑
# ==========================================
SYSTEM_VERSION = "V10.54"
SYSTEM_VERSION = "V10.55"
LOG_FILE_PATH = os.path.join(BASE_DIR, 'logs/system.log')
public_url = PUBLIC_URL # 用於模板顯示

View File

@@ -172,6 +172,15 @@ def _dashboard_decision_row(row, tone):
def _load_competitor_decision_overview(session):
"""讀取商品看板第一屏使用的 PChome 比價決策摘要。全部來自正式 DB。"""
cache_key = 'competitor_decision_overview'
cache_ts_key = 'competitor_decision_overview_timestamp'
cached = _DASHBOARD_DATA_CACHE.get(cache_key)
cached_ts = _DASHBOARD_DATA_CACHE.get(cache_ts_key)
if cached and cached_ts:
age = time.time() - cached_ts
if age < min(_DASHBOARD_CACHE_TTL, 300):
return cached
default = {
'total_active': 0,
'matched_count': 0,
@@ -369,6 +378,8 @@ def _load_competitor_decision_overview(session):
}
for row in session.execute(pending_sql).mappings().all()
]
_DASHBOARD_DATA_CACHE[cache_key] = overview
_DASHBOARD_DATA_CACHE[cache_ts_key] = time.time()
return overview
except Exception as exc:
sys_log.warning(f"[Dashboard] PChome 比價決策摘要讀取略過: {exc}")
@@ -376,6 +387,8 @@ def _load_competitor_decision_overview(session):
session.rollback()
except Exception:
pass
_DASHBOARD_DATA_CACHE[cache_key] = default
_DASHBOARD_DATA_CACHE[cache_ts_key] = time.time()
return default