omni: абузы (31 живой источник + классификатор), авто-добавление фидов, Telegram-бот, вкладка абузов; 589 источников

This commit is contained in:
reform
2026-10-26 12:25:24 +03:00
parent 81f3e556c4
commit ec61ec21f0
12 changed files with 1362 additions and 35 deletions

View File

@@ -190,6 +190,42 @@ class Handler(BaseHTTPRequestHandler):
"categories": cats,
})
if path == "/api/runs":
try:
limit = max(1, min(500, int((q.get("limit") or ["80"])[0])))
except ValueError:
limit = 80
import time as _t
con = store._con() if hasattr(store, "_con") else None
rows = []
try:
import sqlite3 as _s3
from .config import DB as _DB
db = _s3.connect(str(_DB), timeout=30)
db.row_factory = _s3.Row
for r in db.execute("SELECT id, ts, provider, source, query, got, kept, status, bytes "
"FROM runs ORDER BY id DESC LIMIT ?", (limit,)):
d = dict(r)
ts = d.get("ts") or 0
d["when"] = _t.strftime("%Y-%m-%d %H:%M", _t.localtime(ts)) if ts else ""
rows.append(d)
total = db.execute("SELECT count(*) FROM runs").fetchone()[0]
db.close()
except Exception as e:
return self._json({"error": "runs: %s" % e})
return self._json({"items": rows, "total": total, "shown": len(rows)})
if path == "/api/abuse":
from . import abuse as _ab
tag = (q.get("tag") or [""])[0].strip() or None
if tag in ("all", "все"):
tag = None
try:
lim = max(1, min(200, int((q.get("limit") or ["40"])[0])))
except ValueError:
lim = 40
return self._json(_ab.scan(limit=lim, tag=tag))
if path == "/api/sources":
cat = (q.get("category") or [None])[0]
query = (q.get("q") or [""])[0].strip().lower()
@@ -259,6 +295,15 @@ class Handler(BaseHTTPRequestHandler):
except Exception:
body = {}
if u.path == "/api/discover":
from . import discover as _d
q = urllib.parse.parse_qs(u.query)
hosts = max(5, min(120, int((q.get("hosts") or ["40"])[0])))
add = max(1, min(60, int((q.get("add") or ["25"])[0])))
dry = (q.get("dry") or ["0"])[0] not in ("0", "false", "")
res = _d.discover(limit_hosts=hosts, workers=8, max_add=add, dry=dry)
return self._json(res)
if u.path == "/api/feed":
jid = _jid("feed")
_job(jid, state="running")