Alerting: Support group view in breadcrumbs (#107901)
This commit is contained in:
@@ -40,10 +40,10 @@ import { useRuleGroupConsistencyCheck } from '../../hooks/usePrometheusConsisten
|
||||
import { useReturnTo } from '../../hooks/useReturnTo';
|
||||
import { PluginOriginBadge } from '../../plugins/PluginOriginBadge';
|
||||
import { Annotation } from '../../utils/constants';
|
||||
import { ruleIdentifierToRuleSourceIdentifier } from '../../utils/datasource';
|
||||
import { getRulesSourceUid, ruleIdentifierToRuleSourceIdentifier } from '../../utils/datasource';
|
||||
import { labelsSize } from '../../utils/labels';
|
||||
import { makeDashboardLink, makePanelLink, stringifyErrorLike } from '../../utils/misc';
|
||||
import { createListFilterLink } from '../../utils/navigation';
|
||||
import { createListFilterLink, groups } from '../../utils/navigation';
|
||||
import {
|
||||
RulePluginOrigin,
|
||||
getRulePluginOrigin,
|
||||
@@ -422,6 +422,11 @@ function usePageNav(rule: CombinedRule) {
|
||||
const isGrafanaRecordingRule = rulerRuleType.grafana.recordingRule(rulerRule);
|
||||
const isRecordingRuleType = prometheusRuleType.recordingRule(promRule);
|
||||
|
||||
const dataSourceUID = getRulesSourceUid(rule.namespace.rulesSource);
|
||||
const namespaceString = getNamespaceString(rule);
|
||||
|
||||
const groupDetailsUrl = groups.detailsPageLink(dataSourceUID, namespaceString, groupName);
|
||||
|
||||
const pageNav: NavModelItem = {
|
||||
...defaultPageNav,
|
||||
text: rule.name,
|
||||
@@ -470,10 +475,7 @@ function usePageNav(rule: CombinedRule) {
|
||||
],
|
||||
parentItem: {
|
||||
text: groupName,
|
||||
url: createListFilterLink([
|
||||
['namespace', namespaceName],
|
||||
['group', groupName],
|
||||
]),
|
||||
url: groupDetailsUrl,
|
||||
// @TODO support nested folders here
|
||||
parentItem: {
|
||||
text: namespaceName,
|
||||
@@ -523,4 +525,33 @@ function isValidRunbookURL(url: string) {
|
||||
return isRelative || isAbsolute;
|
||||
}
|
||||
|
||||
function getNamespaceString(rule: CombinedRule): string {
|
||||
// try rule.namespace.uid
|
||||
if (rule.namespace.uid) {
|
||||
return rule.namespace.uid;
|
||||
}
|
||||
|
||||
// if datasource managed, use rule.namespace.name;
|
||||
const isDataSourceManagedRulerRule = rulerRuleType.dataSource.rule(rule.rulerRule);
|
||||
const isDataSourceManagedPromRule =
|
||||
prometheusRuleType.rule(rule.promRule) && !prometheusRuleType.grafana.rule(rule.promRule);
|
||||
|
||||
if (isDataSourceManagedRulerRule || isDataSourceManagedPromRule) {
|
||||
return rule.namespace.name;
|
||||
}
|
||||
|
||||
// try rulerRule definition if grafana ruler rule;
|
||||
if (rulerRuleType.grafana.rule(rule.rulerRule)) {
|
||||
return rule.rulerRule?.grafana_alert.namespace_uid;
|
||||
}
|
||||
|
||||
// try promRule definition if grafana prom rule;
|
||||
if (prometheusRuleType.grafana.rule(rule.promRule)) {
|
||||
return rule.promRule.folderUid;
|
||||
}
|
||||
|
||||
// fell back to whatever the name is of the namespace assigned to the combined rule
|
||||
return rule.namespace.name;
|
||||
}
|
||||
|
||||
export default RuleViewer;
|
||||
|
||||
Reference in New Issue
Block a user