Fájl részletek

Ezen az oldalon egy konkrét fájl aktuális állapotát tudod megnézni.

Vissza a fájltérképhez Csak változott Stratégia-labor Monitor főoldal
Fájl útvonala
/opt/bots/saturnus/app/agent_runner.py
Létezik most?
IGEN
Aktuális státusz
UNCHANGED
Méret
2972
Módosítás ideje
1771778551.893296
Korábbi baseline időpont
1771778551.893296
SHA256 rövid

Előnézet (első 120 sor)

#!/usr/bin/env python3
import os, json, time, datetime, traceback
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

STATE_PATH = os.getenv("SATURNUS_STATE_PATH", "/opt/bots/saturnus/state.json")
LOG_PATH   = os.getenv("SATURNUS_AGENT_LOG", "/opt/bots/saturnus/logs/agent.log")

FT_URL     = os.getenv("SATURNUS_FT_URL", "http://127.0.0.1:8089")
FT_USER    = os.getenv("SATURNUS_FT_USER", "saturnus")
FT_PASS    = os.getenv("SATURNUS_FT_PASS", "saturnus")

TICK_SEC   = int(os.getenv("SATURNUS_TICK_INTERVAL", "10"))

def now_iso():
    return datetime.datetime.utcnow().replace(microsecond=0).isoformat() + "Z"

def ensure_dir_for(path: str):
    d = os.path.dirname(path)
    if d:
        os.makedirs(d, exist_ok=True)

def log(line: str):
    ensure_dir_for(LOG_PATH)
    ts = now_iso()
    with open(LOG_PATH, "a", encoding="utf-8") as f:
        f.write(f"{ts} {line}\n")

def read_state():
    if not os.path.exists(STATE_PATH):
        return {"schema_version": 1}
    with open(STATE_PATH, "r", encoding="utf-8") as f:
        return json.load(f)

def write_state(s):
    ensure_dir_for(STATE_PATH)
    tmp = STATE_PATH + ".tmp"
    with open(tmp, "w", encoding="utf-8") as f:
        json.dump(s, f, ensure_ascii=False, indent=2)
        f.write("\n")
    os.replace(tmp, STATE_PATH)

def http_json(url: str):
    req = Request(url, method="GET")
    import base64
    token = base64.b64encode(f"{FT_USER}:{FT_PASS}".encode("utf-8")).decode("ascii")
    req.add_header("Authorization", f"Basic {token}")
    req.add_header("Accept", "application/json")
    with urlopen(req, timeout=5) as resp:
        data = resp.read().decode("utf-8", errors="replace")
        return json.loads(data) if data else {}

def ft_health():
    for path in ("/api/v1/ping", "/ping", "/api/v1/status", "/api/v1/version"):
        try:
            return True, path, http_json(FT_URL + path)
        except Exception:
            pass
    return False, None, None

def main():
    log("agent_runner start")
    while True:
        try:
            s = read_state()
            if not isinstance(s, dict):
                s = {"schema_version": 1}

            ok, ep, payload = ft_health()

            s.setdefault("schema_version", 1)
            s.setdefault("agent", {})
            s["agent"]["updated_at"] = now_iso()
            s["agent"]["tick_sec"] = TICK_SEC
            s["agent"]["ft_url"] = FT_URL
            s["agent"]["ft_ok"] = bool(ok)
            s["agent"]["ft_endpoint"] = ep
            s["agent"]["ft_payload"] = payload if isinstance(payload, dict) else None

            write_state(s)
            log(f"tick ft_ok={s['agent']['ft_ok']} endpoint={s['agent']['ft_endpoint']}")
        except (HTTPError, URLError) as e:
            log(f"ERROR http: {repr(e)}")
        except Exception:
            log("ERROR exception: " + traceback.format_exc())

        time.sleep(TICK_SEC)

if __name__ == "__main__":
    main()

Csak változott diff sorok

Teljes diff

[INFO] Nincs tartalmi eltérés a baseline és az aktuális fájl között.