Files
nanobot-runtime/scripts/plot_ollama_weekly_usage.py
2026-09-17 18:43:03 +02:00

48 lines
1.5 KiB
Python

#!/usr/bin/env python3
"""Plot weekly Ollama Cloud usage: x = days since start of weekly window."""
import sqlite3
from datetime import datetime, timedelta, timezone
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
DB = "db/ollama_usage.sqlite"
OUT = "results/ollama_weekly_usage.png"
def parse(ts: str) -> datetime:
return datetime.fromisoformat(ts)
def window_start(d: datetime) -> datetime:
"""Monday 00:00 UTC of the week containing d."""
monday = d - timedelta(days=d.weekday())
return monday.replace(hour=0, minute=0, second=0, microsecond=0)
con = sqlite3.connect(DB)
rows = con.execute(
"SELECT ts, weekly_usage FROM samples ORDER BY ts"
).fetchall()
con.close()
samples = [(parse(r[0]), r[1] * 100) for r in rows]
start = window_start(samples[0][0])
x = [(t - start).total_seconds() / 86400 for t, _ in samples]
y = [u for _, u in samples]
fig, ax = plt.subplots(figsize=(14, 6), layout="constrained")
ax.plot(x, y, color="#2563eb", lw=1.5, marker=".", ms=3)
ax.fill_between(x, y, alpha=0.15, color="#2563eb")
ax.set_title("Ollama Cloud — spotřeba týdenního limitu")
ax.set_xlabel(f"dny od začátku okna (den 0 = {start.strftime('%d.%m.')} 00:00 UTC)")
ax.set_ylabel("využití týdenního limitu (%)")
ax.set_xticks(range(int(min(x)) + 1, int(max(x)) + 1))
ax.set_xlim(min(x) - 0.1, max(x) + 0.1)
ax.grid(True, alpha=0.3)
fig.savefig(OUT, dpi=150)
print(f"saved {OUT}, {len(samples)} samples, window start {start.isoformat()}")