1
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

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];
}