import axios from 'axios'; const PROMETHEUS_URL = process.env.PROMETHEUS_URL || 'http://prometheus-server.monitoring'; interface PrometheusRangeResult { metric: Record; values: [number, string][]; } interface PrometheusResponse { status: string; data: { resultType: string; result: PrometheusRangeResult[]; }; } export async function queryRange( query: string, start: Date, end: Date, step: string = '5m' ): Promise { const res = await axios.get(`${PROMETHEUS_URL}/api/v1/query_range`, { params: { query, start: start.toISOString(), end: end.toISOString(), step, }, }); return res.data.data.result; } export async function queryInstant(query: string): Promise { const res = await axios.get(`${PROMETHEUS_URL}/api/v1/query`, { params: { query }, }); return res.data.data.result; } export const QUERIES = { cpuUsage: process.env.QUERY_CPU || '100 - (avg by (instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)', memoryUsage: process.env.QUERY_MEMORY || '(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100', diskUsage: process.env.QUERY_DISK || 'sum by (mountpoint,fstype)((1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|nfs",mountpoint!~"/boot.*"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay|nfs",mountpoint!~"/boot.*"}) * 100)', nasUsage: process.env.QUERY_NAS || '((node_filesystem_size_bytes{fstype=~"nfs", node=~".*(bastion).*"} - node_filesystem_free_bytes{fstype=~"nfs", node=~".*(bastion).*"}) / node_filesystem_size_bytes{fstype=~"nfs", node=~".*(bastion).*"}) * 100', networkReceive: process.env.QUERY_NET_RX || 'sum(rate(container_network_receive_bytes_total{namespace="ingress-nginx", pod=~"ingress-nginx-controller-.*"}[5m]))', networkTransmit: process.env.QUERY_NET_TX || 'sum(rate(container_network_transmit_bytes_total{namespace="ingress-nginx", pod=~"ingress-nginx-controller-.*"}[5m]))', };