76 lines
2.4 KiB
Python
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()
|