Files
hack/tools/scripts/test_all_channels.py
T

45 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""Test all enabled channels concurrently, report pass/fail by provider."""
import sys, json, time
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor, as_completed
sys.path.insert(0, str(Path(__file__).resolve().parent))
import newapi_client as n
chans = json.load(open("/tmp/chans.json"))
enabled = [c for c in chans if c.get("status") == 1]
print(f"testing {len(enabled)} enabled channels (16 workers)...")
results = []
def test(c):
ok, msg, t = n.test_channel(c["id"], timeout=45)
return c["id"], c.get("name", ""), ok, msg, t
done = 0
with ThreadPoolExecutor(max_workers=16) as ex:
futs = [ex.submit(test, c) for c in enabled]
for f in as_completed(futs):
results.append(f.result()); done += 1
if done % 50 == 0:
print(f" {done}/{len(enabled)}")
ok_list = [r for r in results if r[2]]
fail_list = [r for r in results if not r[2]]
import collections, re
def prov(name): return name.rsplit("_",1)[0].split("-")[0] if "_" in name else re.sub(r"[0-9].*","",name)
byprov = collections.defaultdict(lambda: [0,0])
for cid,name,ok,msg,t in results:
p=prov(name); byprov[p][0 if ok else 1]+=1
print(f"\n=== RESULT: {len(ok_list)}/{len(results)} pass, {len(fail_list)} fail ===\n")
print("by provider:")
for p in sorted(byprov):
a,b=byprov[p]; print(f" {p:24} {a:3} ok / {b:3} fail")
print("\nfailures:")
for cid,name,ok,msg,t in sorted(fail_list):
print(f" {cid:4} {name:30} {msg[:75]}")
json.dump([{"id":r[0],"name":r[1],"ok":r[2],"msg":r[3],"time":r[4]} for r in results],
open(Path(__file__).resolve().parent/"llm-key-hunter/results/test_all.json","w"), indent=2)
print("\nfull results -> results/test_all.json")