Files
ordinaceprojekt/Euni/euni_report.py
T
2026-06-17 11:53:54 +02:00

76 lines
2.4 KiB
Python

#!/usr/bin/env python3
"""
euni_report.py — přehled stavu stahování z databáze EUNI.
python euni_report.py # souhrnný přehled
python euni_report.py --chyby # vypíše materiály ve stavu chyba
python euni_report.py --soukroma # vypíše přeskočená (soukromá) videa
"""
import argparse
import sys
for _s in (sys.stdout, sys.stderr):
try:
_s.reconfigure(errors="backslashreplace")
except Exception:
pass
import euni_db as edb
CARA = "" * 56
def lidsky(n):
for j, u in [(1e9, "GB"), (1e6, "MB"), (1e3, "kB")]:
if n >= j:
return f"{n/j:.1f} {u}"
return f"{n} B"
def main():
p = argparse.ArgumentParser()
p.add_argument("--chyby", action="store_true", help="vypiš materiály ve stavu chyba")
p.add_argument("--soukroma", action="store_true", help="vypiš přeskočená videa")
a = p.parse_args()
db = edb.get_db()
print(CARA)
print(f" EUNI — přehled ({edb.MONGO_URI})")
print(CARA)
print(f" Kurzů: {db.kurzy.count_documents({})}")
kr = db.kurzy.aggregate([{"$group": {"_id": None, "k": {"$sum": "$kredity"}}}])
kr = next(kr, {}).get("k") or 0
print(f" Kreditů celkem (akreditované kurzy): {kr}")
print(CARA)
for druh in ("video", "dokument"):
print(f" {druh.upper()}:")
pipe = [{"$match": {"druh": druh}},
{"$group": {"_id": "$stav", "n": {"$sum": 1},
"b": {"$sum": {"$ifNull": ["$velikost_b", 0]}}}}]
celkem = 0
for row in sorted(db.materialy.aggregate(pipe), key=lambda r: r["_id"]):
vel = f" ({lidsky(row['b'])})" if row["b"] else ""
print(f" {row['_id']:<11} {row['n']:>5}{vel}")
celkem += row["n"]
print(f" {'celkem':<11} {celkem:>5}")
print(CARA)
if a.chyby:
print(" CHYBY:")
for m in db.materialy.find({"stav": edb.CHYBA}):
print(f" - [{m['druh']}] {m.get('kurz_nazev','')[:40]} | "
f"{m.get('posledni_chyba','')[:60]}")
print(f" {m['zdroj_url']}")
if a.soukroma:
print(" PŘESKOČENÁ VIDEA (soukromá/nedostupná):")
for m in db.materialy.find({"stav": edb.PRESKOCENO}):
print(f" - {m.get('kurz_nazev','')[:45]} | {m.get('duvod','')}")
print(f" {m.get('watch_url') or m['zdroj_url']}")
if __name__ == "__main__":
main()