from __future__ import annotations import logging from app.clients.base import BaseHTTPClient from app.config import Settings from app.models.sources import ImmichSnapshot logger = logging.getLogger(__name__) class ImmichClient(BaseHTTPClient): def __init__(self, settings: Settings) -> None: super().__init__(settings, "immich", settings.immich_base_url) async def fetch_stats(self) -> ImmichSnapshot: snapshot = ImmichSnapshot() if not self.base_url or not self.settings.immich_api_key: logger.info("immich skipped: base URL or API key missing") return snapshot headers = {"x-api-key": self.settings.immich_api_key} try: data = await self._request_json("GET", "/api/server/statistics", headers=headers) except Exception as exc: logger.warning("immich fetch_stats failed: %s", exc) return snapshot if not isinstance(data, dict): logger.warning("immich unexpected response type: %s", type(data)) return snapshot photos = int(data.get("photos", 0)) videos = int(data.get("videos", 0)) usage_bytes = int(data.get("usage", 0)) usage_gb = round(usage_bytes / (1024 ** 3), 1) return ImmichSnapshot( source_status="online", photos=photos, videos=videos, storage_gb=usage_gb, )