48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import { isEmpty } from 'lodash';
|
|
|
|
import { GrafanaManagedReceiverConfig, Receiver } from 'app/plugins/datasource/alertmanager/types';
|
|
|
|
/**
|
|
* This function will extract the integrations that have been defined for either grafana managed contact point
|
|
* or vanilla Alertmanager receiver.
|
|
*
|
|
* It will attempt to normalize the data structure to how they have been defined for Grafana managed contact points.
|
|
* That way we can work with the same data structure in the UI.
|
|
*
|
|
* We don't normalize the configuration settings and those are blank for vanilla Alertmanager receivers.
|
|
*
|
|
* Example input:
|
|
* ```
|
|
* { name: 'my receiver', email_configs: [{ from: "foo@bar.com" }] }
|
|
* ```
|
|
*
|
|
* Example output:
|
|
* ```
|
|
* { name: 'my receiver', grafana_managed_receiver_configs: [{ type: 'email', settings: {} }] }
|
|
* ```
|
|
*/
|
|
export function extractReceivers(receiver: Receiver): GrafanaManagedReceiverConfig[] {
|
|
if ('grafana_managed_receiver_configs' in receiver) {
|
|
return receiver.grafana_managed_receiver_configs ?? [];
|
|
}
|
|
|
|
const integrations = Object.entries(receiver)
|
|
.filter(([key]) => key !== 'grafana_managed_receiver_configs' && key.endsWith('_configs'))
|
|
.filter(([_, value]) => Array.isArray(value) && !isEmpty(value))
|
|
.reduce((acc: GrafanaManagedReceiverConfig[], [key, value]) => {
|
|
const type = key.replace('_configs', '');
|
|
const configs = value.map((settings: unknown) => {
|
|
return {
|
|
name: receiver.name,
|
|
type,
|
|
settings,
|
|
disableResolveMessage: false,
|
|
};
|
|
});
|
|
|
|
return acc.concat(configs);
|
|
}, []);
|
|
|
|
return integrations;
|
|
}
|