From 1eb4f54f5c249ebb53829f31b7453a4ac1cb567b Mon Sep 17 00:00:00 2001 From: Lorenzo Venerandi Date: Tue, 10 Mar 2026 11:00:22 +0100 Subject: [PATCH 01/10] feat: implement in-memory caching for dashboard data and background warmup task --- src/dashboard_cache.py | 32 +++++++++++++++++ src/routes/api.py | 9 ++++- src/routes/dashboard.py | 19 +++++----- src/routes/htmx.py | 38 +++++++++++++------- src/tasks/dashboard_warmup.py | 68 +++++++++++++++++++++++++++++++++++ 5 files changed, 145 insertions(+), 21 deletions(-) create mode 100644 src/dashboard_cache.py create mode 100644 src/tasks/dashboard_warmup.py diff --git a/src/dashboard_cache.py b/src/dashboard_cache.py new file mode 100644 index 0000000..c0dcd7f --- /dev/null +++ b/src/dashboard_cache.py @@ -0,0 +1,32 @@ +""" +In-memory cache for dashboard Overview data. + +A background task periodically refreshes this cache so the dashboard +serves pre-computed data instantly instead of hitting SQLite cold. + +Memory footprint is fixed — each key is overwritten on every refresh. +""" + +import threading +from typing import Any, Dict, Optional + +_lock = threading.Lock() +_cache: Dict[str, Any] = {} + + +def get_cached(key: str) -> Optional[Any]: + """Get a value from the dashboard cache.""" + with _lock: + return _cache.get(key) + + +def set_cached(key: str, value: Any) -> None: + """Set a value in the dashboard cache.""" + with _lock: + _cache[key] = value + + +def is_warm() -> bool: + """Check if the cache has been populated at least once.""" + with _lock: + return "stats" in _cache diff --git a/src/routes/api.py b/src/routes/api.py index 11ee8ce..64e05b7 100644 --- a/src/routes/api.py +++ b/src/routes/api.py @@ -18,6 +18,7 @@ from pydantic import BaseModel from dependencies import get_db, get_client_ip from logger import get_app_logger +from dashboard_cache import get_cached, is_warm # Server-side session token store (valid tokens for authenticated sessions) _auth_tokens: set = set() @@ -249,10 +250,16 @@ async def all_ips( sort_by: str = Query("total_requests"), sort_order: str = Query("desc"), ): - db = get_db() page = max(1, page) page_size = min(max(1, page_size), 10000) + # Serve from cache on default map request (top 100 IPs) + if page == 1 and page_size == 100 and sort_by == "total_requests" and sort_order == "desc" and is_warm(): + cached = get_cached("map_ips") + if cached: + return JSONResponse(content=cached, headers=_no_cache_headers()) + + db = get_db() try: result = db.get_all_ips_paginated( page=page, page_size=page_size, sort_by=sort_by, sort_order=sort_order diff --git a/src/routes/dashboard.py b/src/routes/dashboard.py index 081336c..37f9d51 100644 --- a/src/routes/dashboard.py +++ b/src/routes/dashboard.py @@ -10,6 +10,7 @@ from fastapi.responses import JSONResponse from logger import get_app_logger from dependencies import get_db, get_templates +from dashboard_cache import get_cached, is_warm router = APIRouter() @@ -17,17 +18,19 @@ router = APIRouter() @router.get("") @router.get("/") async def dashboard_page(request: Request): - db = get_db() config = request.app.state.config dashboard_path = "/" + config.dashboard_secret_path.lstrip("/") - # Get initial data for server-rendered sections - stats = db.get_dashboard_counts() - suspicious = db.get_recent_suspicious(limit=10) - - # Get credential count for the stats card - cred_result = db.get_credentials_paginated(page=1, page_size=1) - stats["credential_count"] = cred_result["pagination"]["total"] + # Serve from pre-computed cache when available, fall back to live queries + if is_warm(): + stats = get_cached("stats") + suspicious = get_cached("suspicious") + else: + db = get_db() + stats = db.get_dashboard_counts() + suspicious = db.get_recent_suspicious(limit=10) + cred_result = db.get_credentials_paginated(page=1, page_size=1) + stats["credential_count"] = cred_result["pagination"]["total"] templates = get_templates() return templates.TemplateResponse( diff --git a/src/routes/htmx.py b/src/routes/htmx.py index 98373e7..2d7e20d 100644 --- a/src/routes/htmx.py +++ b/src/routes/htmx.py @@ -10,6 +10,7 @@ from fastapi.responses import HTMLResponse from dependencies import get_db, get_templates from routes.api import verify_auth +from dashboard_cache import get_cached, is_warm router = APIRouter() @@ -58,10 +59,15 @@ async def htmx_top_ips( sort_by: str = Query("count"), sort_order: str = Query("desc"), ): - db = get_db() - result = db.get_top_ips_paginated( - page=max(1, page), page_size=8, sort_by=sort_by, sort_order=sort_order - ) + # Serve from cache on default first-page request + cached = get_cached("top_ips") if (page == 1 and sort_by == "count" and sort_order == "desc" and is_warm()) else None + if cached: + result = cached + else: + db = get_db() + result = db.get_top_ips_paginated( + page=max(1, page), page_size=8, sort_by=sort_by, sort_order=sort_order + ) templates = get_templates() return templates.TemplateResponse( @@ -87,10 +93,14 @@ async def htmx_top_paths( sort_by: str = Query("count"), sort_order: str = Query("desc"), ): - db = get_db() - result = db.get_top_paths_paginated( - page=max(1, page), page_size=5, sort_by=sort_by, sort_order=sort_order - ) + cached = get_cached("top_paths") if (page == 1 and sort_by == "count" and sort_order == "desc" and is_warm()) else None + if cached: + result = cached + else: + db = get_db() + result = db.get_top_paths_paginated( + page=max(1, page), page_size=5, sort_by=sort_by, sort_order=sort_order + ) templates = get_templates() return templates.TemplateResponse( @@ -116,10 +126,14 @@ async def htmx_top_ua( sort_by: str = Query("count"), sort_order: str = Query("desc"), ): - db = get_db() - result = db.get_top_user_agents_paginated( - page=max(1, page), page_size=5, sort_by=sort_by, sort_order=sort_order - ) + cached = get_cached("top_ua") if (page == 1 and sort_by == "count" and sort_order == "desc" and is_warm()) else None + if cached: + result = cached + else: + db = get_db() + result = db.get_top_user_agents_paginated( + page=max(1, page), page_size=5, sort_by=sort_by, sort_order=sort_order + ) templates = get_templates() return templates.TemplateResponse( diff --git a/src/tasks/dashboard_warmup.py b/src/tasks/dashboard_warmup.py new file mode 100644 index 0000000..3734864 --- /dev/null +++ b/src/tasks/dashboard_warmup.py @@ -0,0 +1,68 @@ +# tasks/dashboard_warmup.py + +""" +Pre-computes all Overview tab data and stores it in the in-memory cache. +This keeps SQLite page buffers warm and lets the dashboard respond instantly. +""" + +from logger import get_app_logger +from database import get_database +from dashboard_cache import set_cached + +app_logger = get_app_logger() + +# ---------------------- +# TASK CONFIG +# ---------------------- +TASK_CONFIG = { + "name": "dashboard-warmup", + "cron": "*/1 * * * *", + "enabled": True, + "run_when_loaded": True, +} + + +# ---------------------- +# TASK LOGIC +# ---------------------- +def main(): + """ + Refresh the in-memory dashboard cache with current Overview data. + TasksMaster will call this function based on the cron schedule. + """ + task_name = TASK_CONFIG.get("name") + app_logger.info(f"[Background Task] {task_name} starting...") + + try: + db = get_database() + + # --- Server-rendered data (stats cards + suspicious table) --- + stats = db.get_dashboard_counts() + + cred_result = db.get_credentials_paginated(page=1, page_size=1) + stats["credential_count"] = cred_result["pagination"]["total"] + + suspicious = db.get_recent_suspicious(limit=10) + + # --- HTMX Overview tables (first page, default sort) --- + top_ips = db.get_top_ips_paginated(page=1, page_size=8) + top_ua = db.get_top_user_agents_paginated(page=1, page_size=5) + top_paths = db.get_top_paths_paginated(page=1, page_size=5) + + # --- Map data (default: top 100 IPs by total_requests) --- + map_ips = db.get_all_ips_paginated( + page=1, page_size=100, sort_by="total_requests", sort_order="desc" + ) + + # Store everything in the cache (overwrites previous values) + set_cached("stats", stats) + set_cached("suspicious", suspicious) + set_cached("top_ips", top_ips) + set_cached("top_ua", top_ua) + set_cached("top_paths", top_paths) + set_cached("map_ips", map_ips) + + app_logger.info(f"[Background Task] {task_name} cache refreshed successfully.") + + except Exception as e: + app_logger.error(f"[Background Task] {task_name} failed: {e}") From 9fde3f49bebb174747d94e53628e936665ef339d Mon Sep 17 00:00:00 2001 From: Lorenzo Venerandi Date: Tue, 10 Mar 2026 11:00:32 +0100 Subject: [PATCH 02/10] chore: remove unused dashboard and database images --- img/dashboard-1.png | Bin 136202 -> 0 bytes img/dashboard-2.png | Bin 77787 -> 0 bytes img/dashboard-3.png | Bin 210421 -> 0 bytes img/database.png | Bin 73797 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/dashboard-1.png delete mode 100644 img/dashboard-2.png delete mode 100644 img/dashboard-3.png delete mode 100644 img/database.png diff --git a/img/dashboard-1.png b/img/dashboard-1.png deleted file mode 100644 index 4479914823a5b58fae54cd74e1185f8d788b104a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136202 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 z 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