From 44b89599a44f0f0a9605aa53429aae89773fb9d3 Mon Sep 17 00:00:00 2001 From: egg Date: Mon, 9 Feb 2026 14:42:29 +0800 Subject: [PATCH] fix(resource-cache): resolve DataFrame TTL eviction causing empty resource status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _records_from_index() returned [] when process-level DataFrame cache (30s TTL) expired but derived index remained ready=true. Now reloads from Redis via _get_cached_data() instead of returning empty. Also rename /resource page from "機台狀態" to "設備即時概況" in page_status.json. Co-Authored-By: Claude Opus 4.6 --- data/page_status.json | 2 +- src/mes_dashboard/services/resource_cache.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/data/page_status.json b/data/page_status.json index b64227b..646a03b 100644 --- a/data/page_status.json +++ b/data/page_status.json @@ -45,7 +45,7 @@ }, { "route": "/resource", - "name": "機台狀態", + "name": "設備即時概況", "status": "released", "drawer_id": "reports", "order": 2 diff --git a/src/mes_dashboard/services/resource_cache.py b/src/mes_dashboard/services/resource_cache.py index af498d9..116c363 100644 --- a/src/mes_dashboard/services/resource_cache.py +++ b/src/mes_dashboard/services/resource_cache.py @@ -419,7 +419,11 @@ def _records_from_index(index: ResourceIndex, positions: list[RowPosition] | Non return list(legacy_records) selected = [legacy_records[int(pos)] for pos in positions if 0 <= int(pos) < len(legacy_records)] return selected - return [] + # DataFrame evicted from process cache (TTL expired) and no legacy + # records stored in index. Reload from Redis before giving up. + df = _get_cached_data() + if df is None: + return [] selected_positions = positions if positions is not None else index.get("all_positions", []) if not selected_positions: selected_positions = list(range(len(df)))