confluence-agent / loop.py
Noman987654321's picture
Initial cloud deploy: confluence-agent (kronos-live backend, 15m loop)
9c537ec verified
Raw
History Blame Contribute Delete
1.92 kB
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
loop.py — cloud runner for confluence-agent on Hugging Face Spaces (Docker).
- HF ke liye ek chhota health-check HTTP server PORT (7860) pe (warna Space "running"
nahi maana jata).
- Phir har CYCLE_SECONDS (default 900 = 15m) pe agent.main() chalata hai (Telegram alerts).
Har cycle exception-safe; ek cycle fail ho to agla normally chalega.
Telegram creds env se: TG_TOKEN, TG_CHAT_ID (Space secrets).
"""
import os
import time
import threading
import traceback
from datetime import datetime, timezone
from http.server import BaseHTTPRequestHandler, HTTPServer
import agent # agent.py (same dir)
INTERVAL = int(os.getenv("CYCLE_SECONDS", "900")) # 15 min
PORT = int(os.getenv("PORT", "7860"))
_last = {"ts": None, "ok": None}
class Ping(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-Type", "text/plain")
self.end_headers()
msg = f"confluence-agent running\nlast_cycle={_last['ts']} ok={_last['ok']}\n"
self.wfile.write(msg.encode())
def log_message(self, *args):
pass
def start_http():
HTTPServer(("0.0.0.0", PORT), Ping).serve_forever()
def main():
threading.Thread(target=start_http, daemon=True).start()
print(f"[loop] health server on :{PORT}; cycle every {INTERVAL}s", flush=True)
while True:
t0 = time.time()
try:
agent.main()
_last["ok"] = True
except Exception:
_last["ok"] = False
print("[loop] CYCLE ERROR:\n" + traceback.format_exc(), flush=True)
_last["ts"] = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC")
dt = time.time() - t0
sleep_s = max(30, INTERVAL - dt)
print(f"[loop] cycle took {dt:.0f}s; sleeping {sleep_s:.0f}s", flush=True)
time.sleep(sleep_s)
if __name__ == "__main__":
main()