215 lines
5.8 KiB
Python
215 lines
5.8 KiB
Python
"""
|
|
Interface for data storage and retrieval.
|
|
"""
|
|
|
|
from abc import ABC, abstractmethod
|
|
from datetime import datetime
|
|
from typing import List, Dict, Optional, Any
|
|
from ..models.core import OrderBookSnapshot, TradeEvent, HeatmapData, SystemMetrics
|
|
|
|
|
|
class StorageManager(ABC):
|
|
"""Manages data persistence and retrieval"""
|
|
|
|
@abstractmethod
|
|
async def store_orderbook(self, data: OrderBookSnapshot) -> bool:
|
|
"""
|
|
Store order book snapshot to database.
|
|
|
|
Args:
|
|
data: Order book snapshot to store
|
|
|
|
Returns:
|
|
bool: True if stored successfully, False otherwise
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def store_trade(self, data: TradeEvent) -> bool:
|
|
"""
|
|
Store trade event to database.
|
|
|
|
Args:
|
|
data: Trade event to store
|
|
|
|
Returns:
|
|
bool: True if stored successfully, False otherwise
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def store_heatmap(self, data: HeatmapData) -> bool:
|
|
"""
|
|
Store heatmap data to database.
|
|
|
|
Args:
|
|
data: Heatmap data to store
|
|
|
|
Returns:
|
|
bool: True if stored successfully, False otherwise
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def store_metrics(self, data: SystemMetrics) -> bool:
|
|
"""
|
|
Store system metrics to database.
|
|
|
|
Args:
|
|
data: System metrics to store
|
|
|
|
Returns:
|
|
bool: True if stored successfully, False otherwise
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def get_historical_orderbooks(self, symbol: str, exchange: str,
|
|
start: datetime, end: datetime,
|
|
limit: Optional[int] = None) -> List[OrderBookSnapshot]:
|
|
"""
|
|
Retrieve historical order book data.
|
|
|
|
Args:
|
|
symbol: Trading symbol
|
|
exchange: Exchange name
|
|
start: Start timestamp
|
|
end: End timestamp
|
|
limit: Maximum number of records to return
|
|
|
|
Returns:
|
|
List[OrderBookSnapshot]: Historical order book data
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def get_historical_trades(self, symbol: str, exchange: str,
|
|
start: datetime, end: datetime,
|
|
limit: Optional[int] = None) -> List[TradeEvent]:
|
|
"""
|
|
Retrieve historical trade data.
|
|
|
|
Args:
|
|
symbol: Trading symbol
|
|
exchange: Exchange name
|
|
start: Start timestamp
|
|
end: End timestamp
|
|
limit: Maximum number of records to return
|
|
|
|
Returns:
|
|
List[TradeEvent]: Historical trade data
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def get_latest_orderbook(self, symbol: str, exchange: str) -> Optional[OrderBookSnapshot]:
|
|
"""
|
|
Get latest order book snapshot.
|
|
|
|
Args:
|
|
symbol: Trading symbol
|
|
exchange: Exchange name
|
|
|
|
Returns:
|
|
OrderBookSnapshot: Latest order book or None if not found
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def get_latest_heatmap(self, symbol: str, bucket_size: float) -> Optional[HeatmapData]:
|
|
"""
|
|
Get latest heatmap data.
|
|
|
|
Args:
|
|
symbol: Trading symbol
|
|
bucket_size: Price bucket size
|
|
|
|
Returns:
|
|
HeatmapData: Latest heatmap or None if not found
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def get_ohlcv_data(self, symbol: str, exchange: str, timeframe: str,
|
|
start: datetime, end: datetime) -> List[Dict[str, Any]]:
|
|
"""
|
|
Get OHLCV candlestick data.
|
|
|
|
Args:
|
|
symbol: Trading symbol
|
|
exchange: Exchange name
|
|
timeframe: Timeframe (e.g., '1m', '5m', '1h')
|
|
start: Start timestamp
|
|
end: End timestamp
|
|
|
|
Returns:
|
|
List[Dict]: OHLCV data
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def batch_store_orderbooks(self, data: List[OrderBookSnapshot]) -> int:
|
|
"""
|
|
Store multiple order book snapshots in batch.
|
|
|
|
Args:
|
|
data: List of order book snapshots
|
|
|
|
Returns:
|
|
int: Number of records stored successfully
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def batch_store_trades(self, data: List[TradeEvent]) -> int:
|
|
"""
|
|
Store multiple trade events in batch.
|
|
|
|
Args:
|
|
data: List of trade events
|
|
|
|
Returns:
|
|
int: Number of records stored successfully
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def setup_database_schema(self) -> None:
|
|
"""
|
|
Set up database schema and tables.
|
|
Should be idempotent - safe to call multiple times.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def cleanup_old_data(self, retention_days: int) -> int:
|
|
"""
|
|
Clean up old data based on retention policy.
|
|
|
|
Args:
|
|
retention_days: Number of days to retain data
|
|
|
|
Returns:
|
|
int: Number of records deleted
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def get_storage_stats(self) -> Dict[str, Any]:
|
|
"""
|
|
Get storage statistics.
|
|
|
|
Returns:
|
|
Dict: Storage statistics (table sizes, record counts, etc.)
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def health_check(self) -> bool:
|
|
"""
|
|
Check storage system health.
|
|
|
|
Returns:
|
|
bool: True if healthy, False otherwise
|
|
"""
|
|
pass |