Skip to content

Commit 9b405ab

Browse files
committed
show first active alert
1 parent 78ec1c6 commit 9b405ab

File tree

1 file changed

+54
-13
lines changed

1 file changed

+54
-13
lines changed

client/src/components/prometheusModal/prometheusModal.tsx

Lines changed: 54 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ interface PrometheusQueryBoxProps {
5353
showPrometheusQuery: boolean;
5454
}
5555

56+
interface AlertDetails {
57+
alertName: string;
58+
severity: string;
59+
value: number;
60+
}
61+
5662
function usePrometheusWebSocket() {
5763
const [ws, setWs] = useState<WebSocket | null>(null);
5864
const [isConnected, setIsConnected] = useState(false);
@@ -219,6 +225,7 @@ export function PrometheusQueryBox({
219225
showPrometheusQuery,
220226
}: PrometheusQueryBoxProps) {
221227
const [queryResults, setQueryResults] = useState<PrometheusQueryResult[]>([]);
228+
const [alerts, setAlerts] = useState<AlertDetails[]>([]);
222229

223230
const { sendPrometheusQuery } = usePrometheusWebSocket();
224231

@@ -316,6 +323,7 @@ export function PrometheusQueryBox({
316323
if (result.data.result.length === 0) return null;
317324

318325
const alertInfo = result.data.result[0].metric;
326+
console.log("alertName: ", alertInfo.name);
319327
const alertName = alertInfo.name;
320328
return alertName;
321329
}, [queryResults]);
@@ -330,15 +338,55 @@ export function PrometheusQueryBox({
330338

331339
const interval = setInterval(() => {
332340
getAllQueryResults();
333-
let alertDetails = getAlertDetails();
334-
console.log("🚨 Alert details:", alertDetails);
335341
}, 15000);
336342

337343
return () => {
338344
clearInterval(interval);
339345
};
340346
}, [getAllQueryResults]);
341347

348+
useEffect(() => {
349+
let alertDetails = getAlertDetails();
350+
console.log("🚨 Alert details:", alertDetails);
351+
getAllAlertDetails(alertDetails);
352+
}, [queryResults]);
353+
354+
async function getAllAlertDetails(alertName: string) {
355+
const detailsQuery = {
356+
label: "Alerts for this session",
357+
path: `http://prometheus-server.monitoring.svc.cluster.local/api/v1/alerts`,
358+
description: "Alerts for this session",
359+
icon: "memory",
360+
unit: "",
361+
alertThreshold: 0,
362+
};
363+
364+
const result = await executeQuery(detailsQuery);
365+
console.log("📊 Alert details query result:", result?.data.alerts[0].value);
366+
if (result?.data?.alerts?.length && result.data.alerts.length > 0) {
367+
const alert = result.data.alerts.find((a) => a.labels.name === alertName);
368+
if (alert) {
369+
const severity = alert.labels.severity || "unknown";
370+
const value = parseFloat(alert.value) || 0;
371+
console.log(
372+
`🚨 Alert found - Name: ${alert.labels.alertname}, Severity: ${severity}, Value: ${value}`
373+
);
374+
const newAlert: AlertDetails = {
375+
alertName: alert.labels.alertname,
376+
severity,
377+
value,
378+
};
379+
setAlerts([newAlert]);
380+
} else {
381+
console.log(`ℹ️ No alert found with name: ${alertName}`);
382+
}
383+
}
384+
}
385+
386+
useEffect(() => {
387+
console.log("🚨 Alerts:", alerts);
388+
}, [alerts]);
389+
342390
if (queryResults.length === 0 || showPrometheusQuery === false) {
343391
return null;
344392
}
@@ -358,23 +406,16 @@ export function PrometheusQueryBox({
358406
/>
359407
</div>
360408

361-
{queryResults.map((qr, idx) => (
409+
{alerts.map((alert, idx) => (
362410
<div key={idx} className="mb-2">
363-
<div className="fw-bold">{qr.predefinedQuery?.label}</div>
411+
<div className="fw-bold">{alert.alertName}</div>
364412
<div className="mb-1">
365413
<div
366414
className={
367-
qr.data?.result?.[0]?.value?.[1] &&
368-
qr.predefinedQuery &&
369-
parseFloat(qr.data.result[0].value[1]) >
370-
qr.predefinedQuery.alertThreshold
371-
? "text-danger"
372-
: "text-warning"
415+
"text-warning"
373416
}
374417
>
375-
{qr.data?.result?.[0]?.value
376-
? `${qr.data.result[0].value[1]}${qr.predefinedQuery?.unit}`
377-
: "No value"}
418+
Severity: {alert.severity}, Value: {alert.value}
378419
</div>
379420
</div>
380421
</div>

0 commit comments

Comments
 (0)