fix(api): initialize redis for operator summary cache
All checks were successful
CD Pipeline / tests (push) Successful in 1m19s
Code Review / ai-code-review (push) Successful in 12s
CD Pipeline / build-and-deploy (push) Successful in 3m38s
CD Pipeline / post-deploy-checks (push) Successful in 1m39s

This commit is contained in:
Your Name
2026-06-01 09:56:37 +08:00
parent ece378515f
commit 08260372a9

View File

@@ -14,9 +14,12 @@ from dataclasses import dataclass
from datetime import UTC, datetime, timedelta
from typing import Any
import structlog
_CACHE_SCHEMA_VERSION = "operator_summary_cache_v1"
_CACHE_SOURCE = "api_pod_memory"
logger = structlog.get_logger(__name__)
@dataclass(slots=True)
@@ -90,6 +93,15 @@ def _decode_redis_value(raw: Any) -> dict[str, Any] | None:
return payload if isinstance(payload, dict) else None
async def _get_redis_client() -> Any:
from src.core.redis_client import get_redis, init_redis_pool
try:
return get_redis()
except RuntimeError:
return await init_redis_pool()
def get_cached_operator_summary(
namespace: str,
key_parts: dict[str, Any],
@@ -126,9 +138,7 @@ async def get_cached_operator_summary_async(
"""Return a shared Redis cache hit, falling back to process memory."""
redis_key = _redis_key(namespace, key_parts)
try:
from src.core.redis_client import get_redis
redis_client = get_redis()
redis_client = await _get_redis_client()
payload = _decode_redis_value(await redis_client.get(redis_key))
if payload is not None and isinstance(payload.get("value"), dict):
stored_epoch = float(payload.get("stored_epoch") or 0.0)
@@ -157,8 +167,12 @@ async def get_cached_operator_summary_async(
),
)
await redis_client.delete(redis_key)
except Exception:
pass
except Exception as exc:
logger.debug(
"operator_summary_redis_cache_read_failed",
namespace=namespace,
error=str(exc),
)
return get_cached_operator_summary(
namespace,
@@ -220,16 +234,18 @@ async def store_operator_summary_async(
"ttl_seconds": ttl_value,
}
try:
from src.core.redis_client import get_redis
redis_client = get_redis()
redis_client = await _get_redis_client()
await redis_client.set(
_redis_key(namespace, key_parts),
json.dumps(payload, ensure_ascii=False, default=_json_default),
ex=ttl_value,
)
except Exception:
pass
except Exception as exc:
logger.debug(
"operator_summary_redis_cache_write_failed",
namespace=namespace,
error=str(exc),
)
return response