Files
ALwrity/backend/services/analytics/cache_manager.py
ajaysi 1f087aad4c Bing Analytics and Insights added, background jobs added, database setup updated, environment setup updated, frontend updated, backend updated.
Onboarding Manager and Router Manager refactored, analytics and background jobs added, database setup updated, environment setup updated, frontend updated, backend updated.
Critical onboarding database migration implemented.
2025-10-18 10:28:15 +05:30

111 lines
4.8 KiB
Python

"""
Analytics Cache Manager
Provides a unified interface for caching analytics data with platform-specific configurations.
"""
from typing import Dict, Any, Optional
from loguru import logger
from ..analytics_cache_service import analytics_cache
from .models.platform_types import PlatformType
class AnalyticsCacheManager:
"""Manages caching for analytics data with platform-specific TTL configurations"""
def __init__(self):
# Platform-specific cache TTL configurations (in seconds)
self.cache_ttl = {
PlatformType.GSC: 3600, # 1 hour
PlatformType.BING: 3600, # 1 hour (expensive operation)
PlatformType.WORDPRESS: 1800, # 30 minutes
PlatformType.WIX: 1800, # 30 minutes
'platform_status': 1800, # 30 minutes
'analytics_summary': 900, # 15 minutes
}
def get_cached_analytics(self, platform: PlatformType, user_id: str) -> Optional[Dict[str, Any]]:
"""Get cached analytics data for a platform"""
cache_key = f"{platform.value}_analytics"
cached_data = analytics_cache.get(cache_key, user_id)
if cached_data:
logger.info(f"Cache HIT: {platform.value} analytics for user {user_id}")
return cached_data
logger.info(f"Cache MISS: {platform.value} analytics for user {user_id}")
return None
def set_cached_analytics(self, platform: PlatformType, user_id: str, data: Dict[str, Any], ttl_override: Optional[int] = None):
"""Cache analytics data for a platform"""
cache_key = f"{platform.value}_analytics"
ttl = ttl_override or self.cache_ttl.get(platform, 1800) # Default 30 minutes
analytics_cache.set(cache_key, user_id, data, ttl_override=ttl)
logger.info(f"Cached {platform.value} analytics for user {user_id} (TTL: {ttl}s)")
def get_cached_platform_status(self, user_id: str) -> Optional[Dict[str, Any]]:
"""Get cached platform connection status"""
cached_data = analytics_cache.get('platform_status', user_id)
if cached_data:
logger.info(f"Cache HIT: platform status for user {user_id}")
return cached_data
logger.info(f"Cache MISS: platform status for user {user_id}")
return None
def set_cached_platform_status(self, user_id: str, status_data: Dict[str, Any]):
"""Cache platform connection status"""
ttl = self.cache_ttl['platform_status']
analytics_cache.set('platform_status', user_id, status_data, ttl_override=ttl)
logger.info(f"Cached platform status for user {user_id} (TTL: {ttl}s)")
def get_cached_summary(self, user_id: str) -> Optional[Dict[str, Any]]:
"""Get cached analytics summary"""
cached_data = analytics_cache.get('analytics_summary', user_id)
if cached_data:
logger.info(f"Cache HIT: analytics summary for user {user_id}")
return cached_data
logger.info(f"Cache MISS: analytics summary for user {user_id}")
return None
def set_cached_summary(self, user_id: str, summary_data: Dict[str, Any]):
"""Cache analytics summary"""
ttl = self.cache_ttl['analytics_summary']
analytics_cache.set('analytics_summary', user_id, summary_data, ttl_override=ttl)
logger.info(f"Cached analytics summary for user {user_id} (TTL: {ttl}s)")
def invalidate_platform_cache(self, platform: PlatformType, user_id: str):
"""Invalidate cache for a specific platform"""
cache_key = f"{platform.value}_analytics"
analytics_cache.invalidate(cache_key, user_id)
logger.info(f"Invalidated {platform.value} analytics cache for user {user_id}")
def invalidate_user_cache(self, user_id: str):
"""Invalidate all cache entries for a user"""
analytics_cache.invalidate_user(user_id)
logger.info(f"Invalidated all analytics cache for user {user_id}")
def invalidate_platform_status_cache(self, user_id: str):
"""Invalidate platform status cache for a user"""
analytics_cache.invalidate('platform_status', user_id)
logger.info(f"Invalidated platform status cache for user {user_id}")
def invalidate_summary_cache(self, user_id: str):
"""Invalidate analytics summary cache for a user"""
analytics_cache.invalidate('analytics_summary', user_id)
logger.info(f"Invalidated analytics summary cache for user {user_id}")
def get_cache_stats(self) -> Dict[str, Any]:
"""Get cache statistics"""
return analytics_cache.get_stats()
def clear_all_cache(self):
"""Clear all analytics cache"""
analytics_cache.clear_all()
logger.info("Cleared all analytics cache")