Alerting: Make GMA import use appropriate API for folders (#112229)
This commit is contained in:
@@ -1,9 +1,8 @@
|
|||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { lastValueFrom } from 'rxjs';
|
|
||||||
|
|
||||||
import { getBackendSrv } from '@grafana/runtime';
|
import { getGrafanaSearcher } from 'app/features/search/service/searcher';
|
||||||
import { FolderDTO } from 'app/types/folders';
|
import { DashboardQueryResult } from 'app/features/search/service/types';
|
||||||
import { RulerRulesConfigDTO } from 'app/types/unified-alerting-dto';
|
import { RulerRulesConfigDTO } from 'app/types/unified-alerting-dto';
|
||||||
|
|
||||||
import { alertRuleApi } from '../../api/alertRuleApi';
|
import { alertRuleApi } from '../../api/alertRuleApi';
|
||||||
@@ -11,26 +10,20 @@ import { GRAFANA_RULER_CONFIG } from '../../api/featureDiscoveryApi';
|
|||||||
import { Folder } from '../../types/rule-form';
|
import { Folder } from '../../types/rule-form';
|
||||||
import { useGetRulerRules } from '../rule-editor/useAlertRuleSuggestions';
|
import { useGetRulerRules } from '../rule-editor/useAlertRuleSuggestions';
|
||||||
|
|
||||||
async function getNestedFoldersIn(uid: string) {
|
function useGetNestedFolders(folderUID: string, skip = false) {
|
||||||
const response = await lastValueFrom(
|
const [nestedFolders, setNestedFolders] = useState<DashboardQueryResult[]>([]);
|
||||||
getBackendSrv().fetch<FolderDTO[]>({
|
|
||||||
url: `/api/folders`,
|
|
||||||
params: { parentUid: uid },
|
|
||||||
method: 'GET',
|
|
||||||
showErrorAlert: false,
|
|
||||||
showSuccessAlert: false,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
return response?.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function useGetNestedFolders(folderUID: string, skip = false) {
|
|
||||||
const [nestedFolders, setNestedFolders] = useState<FolderDTO[]>([]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
(async () => {
|
(async () => {
|
||||||
const nestedFoldersIn = skip ? [] : await getNestedFoldersIn(folderUID);
|
const searcher = getGrafanaSearcher();
|
||||||
|
const nestedFoldersIn = skip
|
||||||
|
? []
|
||||||
|
: (
|
||||||
|
await searcher.search({
|
||||||
|
kind: ['folder'],
|
||||||
|
location: folderUID,
|
||||||
|
})
|
||||||
|
).view.toArray();
|
||||||
setNestedFolders(nestedFoldersIn);
|
setNestedFolders(nestedFoldersIn);
|
||||||
})();
|
})();
|
||||||
}, [folderUID, skip]);
|
}, [folderUID, skip]);
|
||||||
@@ -64,7 +57,7 @@ export function useGetRulesToBeImported(skip: boolean, selectedDatasourceName: s
|
|||||||
}
|
}
|
||||||
|
|
||||||
function useFilterRulesThatMightBeOverwritten(
|
function useFilterRulesThatMightBeOverwritten(
|
||||||
targetNestedFolders: FolderDTO[],
|
targetNestedFolders: DashboardQueryResult[],
|
||||||
rulesToBeImported: RulerRulesConfigDTO,
|
rulesToBeImported: RulerRulesConfigDTO,
|
||||||
skip = true
|
skip = true
|
||||||
): RulerRulesConfigDTO {
|
): RulerRulesConfigDTO {
|
||||||
@@ -78,7 +71,7 @@ function useFilterRulesThatMightBeOverwritten(
|
|||||||
}
|
}
|
||||||
// filter targetNestedFolders to only include folders that are in the rulesToBeImported
|
// filter targetNestedFolders to only include folders that are in the rulesToBeImported
|
||||||
const targetNestedFoldersFiltered = targetNestedFolders.filter((folder) => {
|
const targetNestedFoldersFiltered = targetNestedFolders.filter((folder) => {
|
||||||
return Object.keys(rulesToBeImported).includes(folder.title);
|
return Object.keys(rulesToBeImported).includes(folder.name);
|
||||||
});
|
});
|
||||||
const fetchRules = async () => {
|
const fetchRules = async () => {
|
||||||
const results: RulerRulesConfigDTO = {};
|
const results: RulerRulesConfigDTO = {};
|
||||||
|
|||||||
Reference in New Issue
Block a user