Spaces:
Sleeping
Sleeping
| # 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" | |
| 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) | |
| 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) | |
| 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("ошибка") # Это вызовет ошибку, но не сломает систему | |