79 Zeilen
2.6 KiB
Python
79 Zeilen
2.6 KiB
Python
"""
|
|
Analytics repository interface.
|
|
"""
|
|
|
|
from abc import ABC, abstractmethod
|
|
from typing import List, Dict, Optional
|
|
from datetime import datetime
|
|
|
|
from domain.entities.account_creation_event import AccountCreationEvent
|
|
from domain.entities.error_event import ErrorEvent
|
|
from domain.value_objects.error_summary import ErrorSummary
|
|
|
|
|
|
class IAnalyticsRepository(ABC):
|
|
"""Interface for analytics data persistence."""
|
|
|
|
@abstractmethod
|
|
def save_account_event(self, event: AccountCreationEvent) -> None:
|
|
"""Save an account creation event."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def save_error_event(self, event: ErrorEvent) -> None:
|
|
"""Save an error event."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_account_events(self, platform: str = None,
|
|
start_date: datetime = None,
|
|
end_date: datetime = None) -> List[AccountCreationEvent]:
|
|
"""Get account creation events with optional filters."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_error_events(self, platform: str = None,
|
|
error_type: str = None,
|
|
start_date: datetime = None,
|
|
end_date: datetime = None) -> List[ErrorEvent]:
|
|
"""Get error events with optional filters."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_success_rate(self, platform: str = None,
|
|
start_date: datetime = None,
|
|
end_date: datetime = None) -> float:
|
|
"""Calculate success rate for account creation."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_error_summary(self, platform: str = None,
|
|
days: int = 7) -> ErrorSummary:
|
|
"""Get error summary for specified period."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_platform_statistics(self) -> Dict[str, Dict[str, int]]:
|
|
"""Get statistics grouped by platform."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_hourly_distribution(self, platform: str = None,
|
|
days: int = 7) -> Dict[int, int]:
|
|
"""Get hourly distribution of account creation."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_fingerprint_performance(self, fingerprint_id: str) -> Dict[str, any]:
|
|
"""Get performance metrics for a specific fingerprint."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_proxy_performance(self, days: int = 7) -> Dict[str, Dict[str, int]]:
|
|
"""Get proxy performance metrics."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def cleanup_old_events(self, days_to_keep: int = 30) -> int:
|
|
"""Remove events older than specified days. Returns count deleted."""
|
|
pass |