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.
89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
"""
|
|
Base Analytics Handler
|
|
|
|
Abstract base class for platform-specific analytics handlers.
|
|
"""
|
|
|
|
from abc import ABC, abstractmethod
|
|
from typing import Dict, Any, Optional
|
|
from datetime import datetime
|
|
|
|
from ..models.analytics_data import AnalyticsData
|
|
from ..models.platform_types import PlatformType
|
|
|
|
|
|
class BaseAnalyticsHandler(ABC):
|
|
"""Abstract base class for platform analytics handlers"""
|
|
|
|
def __init__(self, platform_type: PlatformType):
|
|
self.platform_type = platform_type
|
|
self.platform_name = platform_type.value
|
|
|
|
@abstractmethod
|
|
async def get_analytics(self, user_id: str) -> AnalyticsData:
|
|
"""
|
|
Get analytics data for the platform
|
|
|
|
Args:
|
|
user_id: User ID to get analytics for
|
|
|
|
Returns:
|
|
AnalyticsData object with platform metrics
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_connection_status(self, user_id: str) -> Dict[str, Any]:
|
|
"""
|
|
Get connection status for the platform
|
|
|
|
Args:
|
|
user_id: User ID to check connection for
|
|
|
|
Returns:
|
|
Dictionary with connection status information
|
|
"""
|
|
pass
|
|
|
|
def create_error_response(self, error_message: str) -> AnalyticsData:
|
|
"""Create a standardized error response"""
|
|
return AnalyticsData(
|
|
platform=self.platform_name,
|
|
metrics={},
|
|
date_range={'start': '', 'end': ''},
|
|
last_updated=datetime.now().isoformat(),
|
|
status='error',
|
|
error_message=error_message
|
|
)
|
|
|
|
def create_partial_response(self, metrics: Dict[str, Any], error_message: str = None) -> AnalyticsData:
|
|
"""Create a standardized partial response"""
|
|
return AnalyticsData(
|
|
platform=self.platform_name,
|
|
metrics=metrics,
|
|
date_range={'start': '', 'end': ''},
|
|
last_updated=datetime.now().isoformat(),
|
|
status='partial',
|
|
error_message=error_message
|
|
)
|
|
|
|
def create_success_response(self, metrics: Dict[str, Any], date_range: Dict[str, str] = None) -> AnalyticsData:
|
|
"""Create a standardized success response"""
|
|
return AnalyticsData(
|
|
platform=self.platform_name,
|
|
metrics=metrics,
|
|
date_range=date_range or {'start': '', 'end': ''},
|
|
last_updated=datetime.now().isoformat(),
|
|
status='success'
|
|
)
|
|
|
|
def log_analytics_request(self, user_id: str, operation: str):
|
|
"""Log analytics request for monitoring"""
|
|
from loguru import logger
|
|
logger.info(f"{self.platform_name} analytics: {operation} for user {user_id}")
|
|
|
|
def log_analytics_error(self, user_id: str, operation: str, error: Exception):
|
|
"""Log analytics error for monitoring"""
|
|
from loguru import logger
|
|
logger.error(f"{self.platform_name} analytics: {operation} failed for user {user_id}: {error}")
|