feat: adds Sync statistics.

This commit is contained in:
2026-05-13 07:39:10 -07:00
parent 8dd7ae8c95
commit 275820b502
4 changed files with 248 additions and 26 deletions

35
app.py
View File

@@ -195,12 +195,37 @@ def require_password_reset():
return render_template("require_password_reset.html")
@app.route("/reset-password-submit", methods=["POST"])
@app.route("/sync-stats")
@login_required
def reset_password_submit():
"""Handle password reset form submission"""
uid = session.get("uid")
profile = get_user_profile(uid)
def sync_stats():
"""Display sync statistics as a stacked bar chart"""
from datetime import datetime, timedelta
import pytz
profile = get_user_profile(session['uid'])
if not profile.get("is_admin"):
abort(403, "Access denied. Admin privileges required.")
pacific = pytz.timezone('America/Los_Angeles')
today = datetime.now(pacific)
dates = [(today - timedelta(days=i)).strftime('%Y-%m-%d') for i in range(13, -1, -1)]
stats = []
for date in dates:
doc_id = f"sync_{date}"
doc = db.collection("sync_stats").document(doc_id).get()
if doc.exists:
d = doc.to_dict()
stats.append({
"date": date,
"recent_successes": d.get("recent_successes", 0),
"oldest_successes": d.get("oldest_successes", 0),
"failures": d.get("failures", 0)
})
else:
stats.append({"date": date, "recent_successes": 0, "oldest_successes": 0, "failures": 0})
return render_template("sync_stats.html", stats=stats)
new_password = request.form.get("new_password")
confirm_password = request.form.get("confirm_password")