Stage 04.2 - journal and event log
This commit is contained in:
73
app/src/trading/journal/service.py
Normal file
73
app/src/trading/journal/service.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from src.storage.repositories.journal import JournalRepository
|
||||
from src.storage.session import check_database_health
|
||||
|
||||
|
||||
class JournalService:
|
||||
def __init__(self) -> None:
|
||||
self.repository = JournalRepository()
|
||||
|
||||
def log_info(
|
||||
self,
|
||||
event_type: str,
|
||||
message: str,
|
||||
payload: dict[str, Any] | None = None,
|
||||
) -> None:
|
||||
self.repository.add_event(
|
||||
level="INFO",
|
||||
event_type=event_type,
|
||||
message=message,
|
||||
payload=payload,
|
||||
)
|
||||
|
||||
def log_warning(
|
||||
self,
|
||||
event_type: str,
|
||||
message: str,
|
||||
payload: dict[str, Any] | None = None,
|
||||
) -> None:
|
||||
self.repository.add_event(
|
||||
level="WARNING",
|
||||
event_type=event_type,
|
||||
message=message,
|
||||
payload=payload,
|
||||
)
|
||||
|
||||
def log_error(
|
||||
self,
|
||||
event_type: str,
|
||||
message: str,
|
||||
payload: dict[str, Any] | None = None,
|
||||
) -> None:
|
||||
self.repository.add_event(
|
||||
level="ERROR",
|
||||
event_type=event_type,
|
||||
message=message,
|
||||
payload=payload,
|
||||
)
|
||||
|
||||
def get_recent(self, limit: int = 10) -> list[dict[str, str]]:
|
||||
return self.repository.list_recent_events(limit=limit)
|
||||
|
||||
def get_journal_health(self) -> tuple[bool, str]:
|
||||
db_ok, db_message = check_database_health()
|
||||
if not db_ok:
|
||||
return False, f"Журнал недоступен: {db_message}"
|
||||
|
||||
try:
|
||||
total = self.repository.count_events()
|
||||
except Exception as exc:
|
||||
return False, f"Ошибка чтения журнала: {exc}"
|
||||
|
||||
return True, f"Журнал работает. Событий: {total}"
|
||||
|
||||
def get_page(self, page: int = 1, page_size: int = 3):
|
||||
offset = (page - 1) * page_size
|
||||
return self.repository.list_recent_with_offset(limit=page_size, offset=offset)
|
||||
|
||||
|
||||
def get_total_count(self) -> int:
|
||||
return self.repository.count_events()
|
||||
Reference in New Issue
Block a user