mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* WIP * add configure irm componet and pass it to Nav * add check if theres datasource for Alerts * update incident steps links * uncomment done property in the interface * Fix not having data sources in store and removing warning using wrong Icon name type * call incidents api in done step * Show checked steps with an icon instead of a badge * Implemnt check contact point ready in essentials * Fix codeowners and prettify file * Check if there is one oncall integration in at least one contact point * Refactor * Check for oncall integration being created * Add the test oncall integration action * Do not hide any card in irm page, and refactor * Refactor: move hooks to a separate file * Implement oncall chatops checks * update incidents hook * Show new irm page only on cloud and for admins * fix prettier in irmhooks * remove unused import * fix prettier in irm hooks * fix axios method * Add progress bar on essentials * Update texts and some styles * Refactor * fix api call * fix check is plugin is installed * fix async call * fix lint * Do not show check icon when done field is undefined in a step * refactor * Add test for Essentials * check if incident plugin installed * call incidents api to get steps * add the new api to get config * fix prettier * memoize the api call * fix lint * add proper api call * check if response is valid * fix typo * use state to save the values * fix lint * fix response schema * fix prettier * update incident steps copy * udapte texts in respond tooltips * Fix confiure IRM route check * Fix logic for the data source check: check if there is a data source that is alerting compatible * Use existing header prop in NavLandingPage instead of creating a new prop * fix wrong updated file * Update logic for default contact point check and update some links * Update texts and show only one item for oncall integration with alerting checks * Update texts following suggestions in the doc * Fix getting default contact point and update oncall link for slack tab * Update texts, buttons and checks following last meeting action items * remove unnecessary component drawer * Track interactions: user open or close essentials drawer * Refactor * remove unnecessary createMonitoringLogger for tracking irm events * remove unnecessary style * refactor * refactor * Add fallback links and labels for action buttons when step is done * Update irm card styles * remove extra space after progress bar numbers * remove progress bar border * Address pr review comments * remove unnecessary AlertmanagerProvider * fix logic behind default contact point check * update test * Address pr review comments part1 * add aria and properties role for Progressbar * Reorganize hooks into separate folders/files for each app * move done field to the step level * Handle empty dropdown options * Handle loading state * Update tooltip for connecting alerting to oncall * Use RTKQ for incidents * handle loading for oncall hooks * refactor getting configuration for each app * fix incident rtkq query to be a query instead of mutation * refactor: rename variable * Address some nits in the review --------- Co-authored-by: reemtariqq <reem.tariq@grafana.com>
65 lines
2.4 KiB
TypeScript
65 lines
2.4 KiB
TypeScript
import { useEffect } from 'react';
|
|
|
|
import { alertRuleApi } from 'app/features/alerting/unified/api/alertRuleApi';
|
|
import { alertmanagerApi } from 'app/features/alerting/unified/api/alertmanagerApi';
|
|
import { ReceiverTypes } from 'app/features/alerting/unified/components/receivers/grafanaAppReceivers/onCall/onCall';
|
|
import { useDataSourceFeatures } from 'app/features/alerting/unified/hooks/useCombinedRule';
|
|
import { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';
|
|
import { Receiver } from 'app/plugins/datasource/alertmanager/types';
|
|
|
|
export function useIsCreateAlertRuleDone() {
|
|
const [fetchRulerRules, { data, isLoading }] = alertRuleApi.endpoints.rulerRules.useLazyQuery({
|
|
refetchOnFocus: true,
|
|
refetchOnReconnect: true,
|
|
});
|
|
|
|
const { dsFeatures, isLoadingDsFeatures } = useDataSourceFeatures(GRAFANA_RULES_SOURCE_NAME);
|
|
const rulerConfig = dsFeatures?.rulerConfig;
|
|
|
|
useEffect(() => {
|
|
rulerConfig && fetchRulerRules({ rulerConfig });
|
|
}, [rulerConfig, fetchRulerRules]);
|
|
|
|
const rules = data
|
|
? Object.entries(data).flatMap(([_, groupDto]) => {
|
|
return groupDto.flatMap((group) => group.rules);
|
|
})
|
|
: [];
|
|
const isDone = rules.length > 0;
|
|
return { isDone, isLoading: isLoading || isLoadingDsFeatures };
|
|
}
|
|
|
|
export function isOnCallContactPointReady(contactPoints: Receiver[]) {
|
|
return contactPoints.some((contactPoint: Receiver) =>
|
|
contactPoint.grafana_managed_receiver_configs?.some((receiver) => receiver.type === ReceiverTypes.OnCall)
|
|
);
|
|
}
|
|
|
|
export function useGetContactPoints() {
|
|
const alertmanagerConfiguration = alertmanagerApi.endpoints.getAlertmanagerConfiguration.useQuery(
|
|
GRAFANA_RULES_SOURCE_NAME,
|
|
{
|
|
refetchOnFocus: true,
|
|
refetchOnReconnect: true,
|
|
refetchOnMountOrArgChange: true,
|
|
}
|
|
);
|
|
|
|
const contactPoints = alertmanagerConfiguration.data?.alertmanager_config?.receivers ?? [];
|
|
return { contactPoints, isLoading: alertmanagerConfiguration.isLoading };
|
|
}
|
|
|
|
export function useGetDefaultContactPoint() {
|
|
const alertmanagerConfiguration = alertmanagerApi.endpoints.getAlertmanagerConfiguration.useQuery(
|
|
GRAFANA_RULES_SOURCE_NAME,
|
|
{
|
|
refetchOnFocus: true,
|
|
refetchOnReconnect: true,
|
|
refetchOnMountOrArgChange: true,
|
|
}
|
|
);
|
|
|
|
const defaultContactpoint = alertmanagerConfiguration.data?.alertmanager_config?.route?.receiver ?? '';
|
|
return { defaultContactpoint, isLoading: alertmanagerConfiguration.isLoading };
|
|
}
|