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:
@@ -452,8 +452,8 @@ export function Workloads() {
|
||||
const [selectedId, setSelectedId] = useState("");
|
||||
const selected = selectedId || workloads.data?.[0]?.id || "";
|
||||
const insight = useQuery({
|
||||
queryKey: ["workload-insight", selected],
|
||||
queryFn: () => api<WorkloadInsight>(`/vms/${selected}/insights`),
|
||||
queryKey: ["workload-insight", selected, "summary"],
|
||||
queryFn: () => api<WorkloadInsight>(`/vms/${selected}/insights?traffic=summary`),
|
||||
enabled: Boolean(selected),
|
||||
});
|
||||
const traffic = useMemo(() => summarizeTraffic(insight.data?.traffic ?? []), [insight.data?.traffic]);
|
||||
@@ -540,8 +540,8 @@ export function Workloads() {
|
||||
export function WorkloadDetail() {
|
||||
const { workloadId } = useParams();
|
||||
const insight = useQuery({
|
||||
queryKey: ["workload-insight", workloadId],
|
||||
queryFn: () => api<WorkloadInsight>(`/vms/${workloadId}/insights`),
|
||||
queryKey: ["workload-insight", workloadId, "summary"],
|
||||
queryFn: () => api<WorkloadInsight>(`/vms/${workloadId}/insights?traffic=summary`),
|
||||
enabled: Boolean(workloadId),
|
||||
});
|
||||
const traffic = useMemo(() => summarizeTraffic(insight.data?.traffic ?? []), [insight.data?.traffic]);
|
||||
@@ -638,8 +638,8 @@ export function WorkloadFlows() {
|
||||
const [port, setPort] = useState("");
|
||||
const [page, setPage] = useState(1);
|
||||
const insight = useQuery({
|
||||
queryKey: ["workload-insight", workloadId],
|
||||
queryFn: () => api<WorkloadInsight>(`/vms/${workloadId}/insights`),
|
||||
queryKey: ["workload-insight", workloadId, "full"],
|
||||
queryFn: () => api<WorkloadInsight>(`/vms/${workloadId}/insights?traffic=full`),
|
||||
enabled: Boolean(workloadId),
|
||||
});
|
||||
const traffic = useMemo(() => summarizeTraffic(insight.data?.traffic ?? []), [insight.data?.traffic]);
|
||||
|
||||
Reference in New Issue
Block a user