feat: optimize dashboard and workload queries with database indexes and SQL aggregation for improved performance
Add database indexes on ip_addresses.address and traffic_flows columns (node_id/source_ip/destination_ip/destination_port/state with updated_at) to accelerate query performance, implement ensure_runtime_indexes to create indexes on startup with IF NOT EXISTS guards, rewrite dashboard_top_talkers to use SQL aggregation with JOIN on IpAddress/TrafficFlow instead of Python loops over all
This commit is contained in:
+16
-1
@@ -1,5 +1,6 @@
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from sqlalchemy import text
|
||||
|
||||
from app.api.v1.router import api_router
|
||||
from app.core.config import get_settings
|
||||
@@ -7,6 +8,20 @@ from app.db.session import Base, SessionLocal, engine
|
||||
from app.seed.demo import seed_demo_data
|
||||
|
||||
|
||||
def ensure_runtime_indexes() -> None:
|
||||
index_statements = [
|
||||
"CREATE INDEX IF NOT EXISTS ix_ip_addresses_address ON ip_addresses (address)",
|
||||
"CREATE INDEX IF NOT EXISTS ix_traffic_flows_node_updated ON traffic_flows (node_id, updated_at)",
|
||||
"CREATE INDEX IF NOT EXISTS ix_traffic_flows_source_updated ON traffic_flows (source_ip, updated_at)",
|
||||
"CREATE INDEX IF NOT EXISTS ix_traffic_flows_destination_updated ON traffic_flows (destination_ip, updated_at)",
|
||||
"CREATE INDEX IF NOT EXISTS ix_traffic_flows_destination_port_updated ON traffic_flows (destination_port, updated_at)",
|
||||
"CREATE INDEX IF NOT EXISTS ix_traffic_flows_state_updated ON traffic_flows (state, updated_at)",
|
||||
]
|
||||
with engine.begin() as connection:
|
||||
for statement in index_statements:
|
||||
connection.execute(text(statement))
|
||||
|
||||
|
||||
def create_app() -> FastAPI:
|
||||
settings = get_settings()
|
||||
app = FastAPI(
|
||||
@@ -27,6 +42,7 @@ def create_app() -> FastAPI:
|
||||
@app.on_event("startup")
|
||||
def startup() -> None:
|
||||
Base.metadata.create_all(bind=engine)
|
||||
ensure_runtime_indexes()
|
||||
with SessionLocal() as db:
|
||||
seed_demo_data(db)
|
||||
|
||||
@@ -39,4 +55,3 @@ def create_app() -> FastAPI:
|
||||
|
||||
|
||||
app = create_app()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user