fix(api): initialize redis for operator summary cache
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user