abuse: классификатор ловит панели/github/hn и мульти-теги, реальный total из индекса, кап API поднят до 3000
Some checks failed
ci / test (3.10) (push) Has been cancelled
ci / test (3.11) (push) Has been cancelled
ci / test (3.12) (push) Has been cancelled

This commit is contained in:
Vlad Gothbreach
2026-10-27 01:28:28 +03:00
parent 61f15f88f2
commit 8de421b6af
13 changed files with 3082 additions and 93 deletions

45
tools/probe_api.py Normal file
View File

@@ -0,0 +1,45 @@
"""Замер API панели: код, время, ключи ответа. Без секретов, только метрики."""
import json
import time
import urllib.parse
import urllib.request
BASE = "http://127.0.0.1:8078"
PATHS = [
"/api/health",
"/api/stats",
"/api/timeline?days=30",
"/api/items?limit=5",
"/api/abuse?limit=3",
"/api/tg/status",
"/api/keys",
"/api/watch",
"/api/digest?days=1",
"/api/suggest?q=cve",
]
def main():
for p in PATHS:
t0 = time.time()
try:
raw = urllib.request.urlopen(BASE + p, timeout=90).read().decode("utf-8", "ignore")
d = json.loads(raw)
keys = list(d.keys()) if isinstance(d, dict) else type(d).__name__
extra = ""
if isinstance(d, dict):
if "items" in d and isinstance(d["items"], list):
extra = " n=%d" % len(d["items"])
if d["items"]:
extra += " keys=%s" % ",".join(list(d["items"][0].keys())[:14])
if "me" in d:
extra = " " + json.dumps(d, ensure_ascii=False)[:200]
if "md" in d:
extra = " md=%d chars" % len(d["md"])
print("%-34s %6.2fs %s%s" % (p, time.time() - t0, keys, extra))
except Exception as e:
print("%-34s %6.2fs ERR %s" % (p, time.time() - t0, e))
if __name__ == "__main__":
main()