You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
import time
|
|
from helpers.db import db_get_videos
|
|
|
|
# ───────── CACHE BUILDER ───────── #
|
|
def build_cache(start=None, end=None):
|
|
"""
|
|
Build storage usage cache over an optional date range.
|
|
start/end are date or datetime; end is inclusive by calendar day.
|
|
"""
|
|
videos = db_get_videos(start=start, end=end)
|
|
grouped = {}
|
|
|
|
for v in videos:
|
|
key = (v["username"], v["platform"])
|
|
grouped.setdefault(key, []).append(v)
|
|
|
|
storage_usage, avg_sizes, video_map = {}, {}, {}
|
|
|
|
for (username, platform), vids in grouped.items():
|
|
key = f"{username}::{platform}"
|
|
|
|
total_gb = 0.0
|
|
last_online = None
|
|
for v in vids:
|
|
try:
|
|
total_gb += float(v.get("size", 0) or 0) / 1024.0
|
|
except (ValueError, TypeError):
|
|
pass
|
|
# track latest created_at
|
|
ca = v.get("created_at")
|
|
if ca and (last_online is None or ca > last_online):
|
|
last_online = ca
|
|
|
|
storage_usage[key] = {
|
|
"total_size": total_gb,
|
|
"video_count": len(vids),
|
|
"last_online": last_online, # <— new
|
|
}
|
|
avg_sizes[key] = (total_gb / len(vids)) if vids else 0.0
|
|
video_map[key] = vids
|
|
|
|
return {
|
|
"timestamp": time.time(),
|
|
"videos": video_map,
|
|
"storage_usage": storage_usage,
|
|
"avg_sizes": avg_sizes
|
|
}
|