From fc4a72288ced1aae8e30987cbfae3ebe23bb0c8c Mon Sep 17 00:00:00 2001 From: lelo Date: Tue, 1 Apr 2025 21:10:18 +0000 Subject: [PATCH] add filetype selection --- analytics.py | 48 +++++++++++++++++++++++----------------- templates/dashboard.html | 39 +++++++++++++++++++++++++++----- 2 files changed, 62 insertions(+), 25 deletions(-) diff --git a/analytics.py b/analytics.py index c4f46ef..152d066 100644 --- a/analytics.py +++ b/analytics.py @@ -1,5 +1,5 @@ import sqlite3 -from flask import render_template, request +from flask import render_template, request, session from datetime import datetime, timedelta import geoip2.database from auth import require_secret @@ -94,8 +94,13 @@ def connections(): @require_secret def dashboard(): - filetype_arg = request.args.get('filetype', 'audio') - timeframe = request.args.get('timeframe', 'last24hours') + if 'filetype' not in session: + session['filetype'] = 'audio' + if 'timeframe' not in session: + session['timeframe'] = 'last24hours' + session['filetype'] = request.args.get('filetype', session['filetype']) + session['timeframe'] = request.args.get('timeframe', session['timeframe']) + now = datetime.now() # Determine which file type we're filtering by. @@ -106,21 +111,21 @@ def dashboard(): image_list = ['jpg', 'jpeg', 'image', 'photo'] video_list = ['mp4', 'mov', 'wmv', 'avi'] - if filetype_arg.lower() in audio_list: + if session['filetype'].lower() in audio_list: filetype = 'audio/' - elif filetype_arg.lower() in image_list: + elif session['filetype'].lower() in image_list: filetype = 'image/' - elif filetype_arg.lower() in video_list: + elif session['filetype'].lower() in video_list: filetype = 'video/' - # Determine start time based on timeframe - if timeframe == 'last24hours': + # Determine start time based on session['timeframe'] + if session['timeframe'] == 'last24hours': start_dt = now - timedelta(hours=24) - elif timeframe == '7days': + elif session['timeframe'] == '7days': start_dt = now - timedelta(days=7) - elif timeframe == '30days': + elif session['timeframe'] == '30days': start_dt = now - timedelta(days=30) - elif timeframe == '365days': + elif session['timeframe'] == '365days': start_dt = now - timedelta(days=365) else: start_dt = now - timedelta(hours=24) @@ -157,7 +162,7 @@ def dashboard(): # 2. Distinct device trend # We'll group by hour if "today", by day if "7days"/"30days", by month if "365days" - if timeframe == 'last24hours': + if session['timeframe'] == 'last24hours': # Group by hour: substr(timestamp, 12, 2) -> HH query = f''' SELECT substr(timestamp, 12, 2) AS bucket, COUNT(DISTINCT device_id) AS count @@ -166,7 +171,7 @@ def dashboard(): GROUP BY bucket ORDER BY bucket ''' - elif timeframe in ('7days', '30days'): + elif session['timeframe'] in ('7days', '30days'): # Group by day: substr(timestamp, 1, 10) -> YYYY-MM-DD query = f''' SELECT substr(timestamp, 1, 10) AS bucket, COUNT(DISTINCT device_id) AS count @@ -175,7 +180,7 @@ def dashboard(): GROUP BY bucket ORDER BY bucket ''' - elif timeframe == '365days': + elif session['timeframe'] == '365days': # Group by month: substr(timestamp, 1, 7) -> YYYY-MM query = f''' SELECT substr(timestamp, 1, 7) AS bucket, COUNT(DISTINCT device_id) AS count @@ -200,9 +205,9 @@ def dashboard(): dict(bucket=r[0], count=r[1]) for r in distinct_device_data_rows ] - # 3. Timeframe-based aggregation + # 3. session['timeframe']-based aggregation # We'll group by hour if "today", by day if "7days"/"30days", by month if "365days". - if timeframe == 'last24hours': + if session['timeframe'] == 'last24hours': # Hour: substr(timestamp, 12, 2) -> HH query = f''' SELECT substr(timestamp, 12, 2) AS bucket, COUNT(*) AS count @@ -211,7 +216,7 @@ def dashboard(): GROUP BY bucket ORDER BY bucket ''' - elif timeframe in ('7days', '30days'): + elif session['timeframe'] in ('7days', '30days'): # Day: substr(timestamp, 1, 10) -> YYYY-MM-DD query = f''' SELECT substr(timestamp, 1, 10) AS bucket, COUNT(*) AS count @@ -220,7 +225,7 @@ def dashboard(): GROUP BY bucket ORDER BY bucket ''' - elif timeframe == '365days': + elif session['timeframe'] == '365days': # Month: substr(timestamp, 1, 7) -> YYYY-MM query = f''' SELECT substr(timestamp, 1, 7) AS bucket, COUNT(*) AS count @@ -337,6 +342,9 @@ def dashboard(): with log_db: cursor = log_db.execute(query, params_for_filter) cached_percentage = cursor.fetchone()[0] + + if cached_percentage is not None: + cached_percentage = f"{cached_percentage:.2f}" # 8. Process location data with GeoIP2 reader = geoip2.database.Reader('GeoLite2-City.mmdb') @@ -359,7 +367,7 @@ def dashboard(): return render_template( "dashboard.html", - timeframe=timeframe, + timeframe=session['timeframe'], rows=rows, distinct_device_data=distinct_device_data, user_agent_data=user_agent_data, @@ -368,6 +376,6 @@ def dashboard(): total_accesses=total_accesses, unique_files=unique_files, unique_user=unique_user, - cached_percentage=f"{cached_percentage:.2f}", + cached_percentage=cached_percentage, timeframe_data=timeframe_data ) diff --git a/templates/dashboard.html b/templates/dashboard.html index 2eac753..965e512 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -30,12 +30,41 @@ Auswertung
- Last 24 Hours - Last 7 Days - Last 30 Days - Last 365 Days + + Last 24 Hours + + + Last 7 Days + + + Last 30 Days + + + Last 365 Days + +
+
+ + Audio + + + Video + + + Photo + + + Other +
-