абузы: free-панели new-api на вкладке (роут /api/panels + грид), CSS вынесен из JS, панельный классификатор даёт freeapi-вес, тесты
This commit is contained in:
@@ -13,8 +13,8 @@ import urllib.parse
|
||||
from . import abuse as abuse_mod
|
||||
from . import config, sources, source_state, store, taxonomy
|
||||
|
||||
BUCKET = ("CASE WHEN published GLOB '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*' "
|
||||
"THEN substr(published,1,10) ELSE date(seen,'unixepoch') END")
|
||||
BUCKET = ("CASE WHEN length(published)=10 AND published GLOB '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' "
|
||||
"THEN published ELSE COALESCE(date(published,'localtime'),date(seen,'unixepoch','localtime')) END")
|
||||
|
||||
|
||||
def _clean(v, n=0):
|
||||
@@ -32,7 +32,7 @@ def _clean(v, n=0):
|
||||
|
||||
# ---------- обзор ----------
|
||||
|
||||
BUCKET_SEEN = "date(seen,'unixepoch')"
|
||||
BUCKET_SEEN = "date(seen,'unixepoch','localtime')"
|
||||
|
||||
|
||||
def timeline(days=30, cat=None, mode="pub"):
|
||||
@@ -40,6 +40,8 @@ def timeline(days=30, cat=None, mode="pub"):
|
||||
|
||||
mode="pub" — по дате публикации (или дате попадания в базу, если публикации нет);
|
||||
mode="seen" — строго по времени импорта: «что комбайн принёс за день».
|
||||
|
||||
last24 — скользящие 24 часа по выбранному mode; непарсируемая дата → seen.
|
||||
"""
|
||||
days = 30 if days is None else int(days or 0)
|
||||
days = max(1, min(365, days))
|
||||
@@ -57,6 +59,11 @@ def timeline(days=30, cat=None, mode="pub"):
|
||||
for b, n, cve, sev in c.execute(sql, args):
|
||||
if b:
|
||||
got[b] = (int(n or 0), int(cve or 0), int(sev or 0))
|
||||
clock = "seen" if mode == "seen" else "COALESCE(CAST(strftime('%s',published) AS REAL),seen)"
|
||||
recent_where = where + (" AND " if where else " WHERE ") + clock + " >= ? AND " + clock + " <= ?"
|
||||
now = time.time()
|
||||
last24 = c.execute("SELECT COUNT(*) FROM items" + recent_where,
|
||||
args + [now - 86400, now]).fetchone()[0]
|
||||
today = _dt.date.today()
|
||||
out = []
|
||||
for i in range(days - 1, -1, -1):
|
||||
@@ -65,7 +72,8 @@ def timeline(days=30, cat=None, mode="pub"):
|
||||
out.append({"day": d, "n": n, "cve": cve, "sev": sev})
|
||||
return {"ok": True, "days": days, "mode": mode, "points": out,
|
||||
"total": sum(p["n"] for p in out),
|
||||
"last24": (out[-1] or {}).get("n", 0),
|
||||
"last24": int(last24),
|
||||
"today": out[-1]["n"],
|
||||
"max": max([p["n"] for p in out] or [0])}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user