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

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
}