Files
Sonia Aguilar 3854be1fcb Alerting: Implement template preview for Grafana AlertManager (#65530)
* Add Preview template and payload editor to templates form

* Add TemplatePreview test and update css

* Preview errors for each template that is wrong

* Enable preview templating only for Grafana Alert Manager

* Use harcoded default payload instead of requesting it to the backend

* Update error response in the api definition

* Add spinner when loading result for preview

* Update api request followind DD changes

* Use pre instead of TextArea to render the preview

* Fix tests

* Add alert list editor

* Add start and end time for alert generator

* Add preview for data list added in the modal

* Update copies and move submit button in alert generator to the bottom

* Copy updates

* Refactor

* Use tab instead of button to preview

* Move payload editor next to the content

* Copy update

* Refactor

* Adress PR review comments

* Fix wrong json format throwing an exception when adding more data

* Use monaco editor for payload

* Only show text 'Preview for...'  when we have more than one define

* Fix some errors

* Update CollapseSection style

* Add tooltip for the Payload info icon explaining the available list of alert data fields in preview

* Set payload as invalid if it's not an array

* Fix test

* Update text in AlertTemplateDataTable

* Add separators to distinguish lines that belong to the preview

* Fix text

* Use subDays instead of addDays for substracting days
2023-04-28 17:05:45 +02:00

37 lines
1.1 KiB
TypeScript

import { lastValueFrom } from 'rxjs';
import { getBackendSrv } from '@grafana/runtime';
import { alertingApi } from './alertingApi';
export interface OnCallIntegration {
integration_url: string;
}
export type OnCallIntegrationsResponse = OnCallIntegration[];
export type OnCallIntegrationsUrls = string[];
export const onCallApi = alertingApi.injectEndpoints({
endpoints: (build) => ({
getOnCallIntegrations: build.query<OnCallIntegrationsUrls, void>({
queryFn: async () => {
const integrations = await fetchOnCallIntegrations();
return { data: integrations };
},
}),
}),
});
export async function fetchOnCallIntegrations(): Promise<OnCallIntegrationsUrls> {
try {
const response = await lastValueFrom(
getBackendSrv().fetch<OnCallIntegrationsResponse>({
url: '/api/plugin-proxy/grafana-oncall-app/api/internal/v1/alert_receive_channels/',
showErrorAlert: false,
showSuccessAlert: false,
})
);
return response.data.map((result) => result.integration_url);
} catch (error) {
return [];
}
}
export const { useGetOnCallIntegrationsQuery } = onCallApi;