|
|
@@ -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):
|