diff --git a/apps/dashboard/backend/app/clients/scrutiny_client.py b/apps/dashboard/backend/app/clients/scrutiny_client.py index 2c4464c..bae7f83 100644 --- a/apps/dashboard/backend/app/clients/scrutiny_client.py +++ b/apps/dashboard/backend/app/clients/scrutiny_client.py @@ -26,6 +26,7 @@ class ScrutinyClient(BaseHTTPClient): return snapshot data = await self._request_json("GET", "/api/summary") + if data is None: logger.warning("scrutiny: empty or failed response") return snapshot @@ -51,24 +52,20 @@ class ScrutinyClient(BaseHTTPClient): for device_path, device_data in summary.items(): device_info: dict = device_data.get("device") or {} - - # "smart" may be a list OR a dict keyed by timestamp — handle both - smart_raw = device_data.get("smart") or {} - if isinstance(smart_raw, dict): - smart_values = list(smart_raw.values()) - elif isinstance(smart_raw, list): - smart_values = smart_raw - else: - smart_values = [] - - # Sort by date if values have a date field, otherwise take last entry - if smart_values and isinstance(smart_values[0], dict) and "date" in smart_values[0]: - smart_values = sorted(smart_values, key=lambda x: x.get("date", "")) - latest_smart = smart_values[-1] if smart_values else {} + smart_data = device_data.get("smart") or [] name = device_info.get("device_name") or device_path.split("/")[-1] model = device_info.get("model_name") or "Unknown" + if isinstance(smart_data, dict): + # smart is a dict keyed by timestamp strings; grab the most recent value + latest_smart = smart_data[max(smart_data)] if smart_data else {} + elif isinstance(smart_data, list): + latest_smart = smart_data[-1] if smart_data else {} + else: + latest_smart = {} + if not isinstance(latest_smart, dict): + latest_smart = {} status_code = latest_smart.get("Status", -1) if status_code == 0: status = "passed" @@ -77,15 +74,6 @@ class ScrutinyClient(BaseHTTPClient): else: status = "unknown" - # Temperature: try top-level "temp", then nested attrs - temperature: int | None = None - temp_val = latest_smart.get("temp") or latest_smart.get("temperature") - if temp_val is not None: - try: - temperature = int(temp_val) - except (TypeError, ValueError): - pass - - devices.append(ScrutinyDevice(name=name, model=model, status=status, temperature=temperature)) + devices.append(ScrutinyDevice(name=name, model=model, status=status)) return sorted(devices, key=lambda d: d.name)