forked from grafana.jool/grafana-jool
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
import { useSelector } from 'react-redux';
|
|
import { StoreState } from '../../../../types';
|
|
|
|
const SUFFIX_REGEX = /\/api\/v[1|2]\/alerts/i;
|
|
type AlertmanagerConfig = { url: string; status: string; actualUrl: string };
|
|
|
|
export function useExternalAmSelector(): AlertmanagerConfig[] | undefined {
|
|
const discoveredAlertmanagers = useSelector(
|
|
(state: StoreState) => state.unifiedAlerting.externalAlertmanagers.discoveredAlertmanagers.result?.data
|
|
);
|
|
const alertmanagerConfig = useSelector(
|
|
(state: StoreState) => state.unifiedAlerting.externalAlertmanagers.alertmanagerConfig.result?.alertmanagers
|
|
);
|
|
|
|
if (!discoveredAlertmanagers || !alertmanagerConfig) {
|
|
return [];
|
|
}
|
|
|
|
const enabledAlertmanagers: AlertmanagerConfig[] = [];
|
|
const droppedAlertmanagers: AlertmanagerConfig[] = discoveredAlertmanagers?.droppedAlertManagers.map((am) => ({
|
|
url: am.url.replace(SUFFIX_REGEX, ''),
|
|
status: 'dropped',
|
|
actualUrl: am.url,
|
|
}));
|
|
|
|
for (const url of alertmanagerConfig) {
|
|
if (discoveredAlertmanagers.activeAlertManagers.length === 0) {
|
|
enabledAlertmanagers.push({
|
|
url: url,
|
|
status: 'pending',
|
|
actualUrl: '',
|
|
});
|
|
} else {
|
|
let found = false;
|
|
for (const activeAM of discoveredAlertmanagers.activeAlertManagers) {
|
|
if (activeAM.url === `${url}/api/v2/alerts`) {
|
|
found = true;
|
|
enabledAlertmanagers.push({
|
|
url: activeAM.url.replace(SUFFIX_REGEX, ''),
|
|
status: 'active',
|
|
actualUrl: activeAM.url,
|
|
});
|
|
}
|
|
}
|
|
if (!found) {
|
|
enabledAlertmanagers.push({
|
|
url: url,
|
|
status: 'pending',
|
|
actualUrl: '',
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
return [...enabledAlertmanagers, ...droppedAlertmanagers];
|
|
}
|
|
|