eroha-agentapi / metrics_core.py
Yermek68's picture
Update metrics_core.py
c546430 verified
raw
history blame
2.16 kB
# core/metrics_core.py
import json
import os
from datetime import datetime
from core.alerters import ConsoleAlerter, FileAlerter
from core.alert_manager import AlertManager
from core.failsafe_core import failsafe
# Настройка алертов — FailSafe будет сообщать о сбоях
alert_manager = AlertManager([
ConsoleAlerter(),
FileAlerter("failsafe_errors.log")
])
METRICS_FILE = "metrics_log.json"
@failsafe(alert_manager)
def save_metrics(metrics: dict):
"""
Сохраняет метрики в локальный JSON-файл.
Если произойдет ошибка, она будет автоматически залогирована, и функция не упадёт.
"""
metrics["timestamp"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
if not os.path.exists(METRICS_FILE):
with open(METRICS_FILE, "w", encoding="utf-8") as f:
json.dump([], f, ensure_ascii=False, indent=2)
with open(METRICS_FILE, "r", encoding="utf-8") as f:
data = json.load(f)
data.append(metrics)
with open(METRICS_FILE, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
@failsafe(alert_manager)
def read_metrics():
"""
Возвращает все сохранённые метрики. Ошибки логируются и не ломают систему.
"""
if not os.path.exists(METRICS_FILE):
return []
with open(METRICS_FILE, "r", encoding="utf-8") as f:
return json.load(f)
@failsafe(alert_manager)
def read_metrics():
if not os.path.exists(METRICS_FILE):
return []
with open(METRICS_FILE, "r", encoding="utf-8") as f:
return json.load(f)
# === 👇 Это тестовый блок — вставляй в самый конец файла ===
if __name__ == "__main__":
# Пример корректного вызова
save_metrics({"user": "test", "latency": 123})
# Пример сбоя (некорректный формат)
save_metrics("ошибка") # Это вызовет ошибку, но не сломает систему