#!/usr/bin/env python3
"""Cek status global situs klien dari luar: check-host.net (raw JSON) + microlink (raw)."""
import json, sys, time, urllib.parse, urllib.request

UA = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124 Safari/537.36",
      "Accept": "application/json"}


def get(url, timeout=90):
    req = urllib.request.Request(url, headers=UA)
    with urllib.request.urlopen(req, timeout=timeout) as r:
        return json.loads(r.read().decode("utf-8", "replace"))


def check_host(url, nodes=4, wait=30):
    q = "https://check-host.net/check-http?host=%s&max_nodes=%d" % (urllib.parse.quote(url, safe=""), nodes)
    d = get(q)
    rid = d.get("request_id")
    if not rid:
        return "NO-ID %s" % json.dumps(d)[:200]
    time.sleep(wait)
    res = get("https://check-host.net/check-result/%s" % rid)
    lines = []
    for node, v in res.items():
        if not v:
            lines.append("%s pending" % node.split(".")[0])
            continue
        item = v[0] if isinstance(v, list) else v
        if isinstance(item, dict):
            lines.append("%s %s %ss" % (node.split(".")[0], item.get("status_code") or item.get("error") or "?", item.get("time", "")))
        else:
            lines.append("%s %s" % (node.split(".")[0], item))
    return " | ".join(lines)


def microlink(url):
    q = "https://api.microlink.io/?url=%s&meta=false" % urllib.parse.quote(url, safe="")
    try:
        d = get(q, timeout=120)
    except Exception as e:
        return "ERR %s" % str(e)[:90]
    return json.dumps(d)[:220]


if __name__ == "__main__":
    urls = sys.argv[1:]
    for u in urls:
        print("==", u)
        print("  microlink:", microlink(u))
        print("  check-host:", check_host(u))
