#!/usr/bin/env python3 """0asis.net pub status API""" import subprocess, json from flask import Flask, jsonify app = Flask(__name__) @app.route("/api/status/ssb") def ssb_status(): try: out = subprocess.run(["ss", "-tlnp"], capture_output=True, text=True, timeout=3) ssb_up = ":8008" in out.stdout peers = None feeds = None if ssb_up: try: st = subprocess.run( ["ssb-server", "status"], capture_output=True, text=True, timeout=5 ) lines = st.stderr + st.stdout # strip sodium warning lines clean = "\n".join(l for l in lines.splitlines() if not l.startswith("error loading") and not l.startswith("Require") and not l.startswith("falling") and not l.startswith("-")) d = json.loads(clean) since = d.get("sync", {}).get("since", -1) gossip = d.get("gossip", {}) peers = len([v for v in gossip.values() if isinstance(v, dict) and v.get("connected")]) feeds = since if since >= 0 else "syncing" except Exception: pass return jsonify(status="online" if ssb_up else "offline", peers=peers, feeds=feeds) except Exception: pass return jsonify(status="offline", peers=None, feeds=None) @app.route("/api/status/ecoind") def ecoind_status(): try: out = subprocess.run(["ecoind", "getinfo"], capture_output=True, text=True, timeout=5) if out.returncode == 0: d = json.loads(out.stdout) return jsonify(status="online", blocks=d.get("blocks"), connections=d.get("connections")) except Exception: pass return jsonify(status="offline", blocks="---", connections="---") if __name__ == "__main__": app.run(host="127.0.0.1", port=3001)