Преглед на файлове

varundus 2026-10-11 07:00

ardo преди 2 седмици
родител
ревизия
eb62939994
променени са 1 файла, в които са добавени 43 реда и са изтрити 2 реда
  1. 43 2
      dev/config/alert-relay/alert_relay.py

+ 43 - 2
dev/config/alert-relay/alert_relay.py

@@ -15,6 +15,8 @@ from __future__ import annotations
 
 import json
 import os
+import re
+from datetime import datetime, timezone
 import urllib.parse
 import urllib.request
 from http.server import BaseHTTPRequestHandler, HTTPServer
@@ -26,6 +28,45 @@ PORT = int(os.environ.get("PORT", "9099"))
 MAX_LEN = 4000
 
 
+try:
+    from zoneinfo import ZoneInfo
+    TZ = ZoneInfo("Europe/Tallinn")
+except Exception:  # noqa: BLE001
+    TZ = None
+
+_TR_UTC = re.compile(r"Time Range \(UTC\): \[(.+?) - (.+?)\)")
+
+
+def _parse_utc(s):
+    s = s.strip()
+    for fmt in ("%b %d %I:%M:%S %p", "%b %d %H:%M:%S", "%Y-%m-%d %H:%M:%S"):
+        try:
+            dt = datetime.strptime(s, fmt)
+        except ValueError:
+            continue
+        # HyperDX jätab aasta ära -> strptime annab 1900; kasuta jooksvat aastat,
+        # muidu tuleb Tallinna ajalooline LMT-siire (+1:39) ja kellaaeg on vale.
+        if dt.year == 1900:
+            dt = dt.replace(year=datetime.now(timezone.utc).year)
+        return dt.replace(tzinfo=timezone.utc)
+    return None
+
+
+def _fmt_local(s):
+    dt = _parse_utc(s)
+    if dt is None:
+        return s
+    loc = dt.astimezone(TZ) if TZ else dt
+    return loc.strftime("%b %d %H:%M:%S")
+
+
+def localize_times(text: str) -> str:
+    """HyperDX esitab aja UTC-na -> näita Tallinna ajas (nagu teised teenused)."""
+    def repl(m):
+        return "Aeg (Tallinn): [%s - %s)" % (_fmt_local(m.group(1)), _fmt_local(m.group(2)))
+    return _TR_UTC.sub(repl, text)
+
+
 def send(text: str) -> None:
     if not TOKEN:
         print("[relay] TELEGRAM_BOT_TOKEN puudub", flush=True)
@@ -45,7 +86,7 @@ def format_msg(data: dict) -> str:
     # 1) HyperDX generic webhook -> {"text": "..."} — saada otse.
     text = data.get("text")
     if isinstance(text, str) and text.strip():
-        return text.strip()
+        return localize_times(text.strip())
 
     # 2) Muud payload'id: proovi tuntud välju.
     def pick(*keys):
@@ -69,7 +110,7 @@ def format_msg(data: dict) -> str:
         lines.append(str(msg)[:1500])
     if not lines:
         lines.append(json.dumps(data, ensure_ascii=False)[:1200])
-    return "\n".join(lines)
+    return localize_times("\n".join(lines))
 
 
 class H(BaseHTTPRequestHandler):