69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
|
|
# 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}")
|