43 lines
1.6 KiB
TypeScript
43 lines
1.6 KiB
TypeScript
import { CombinedRule, RuleGroupIdentifier, RuleGroupIdentifierV2 } from 'app/types/unified-alerting';
|
|
|
|
import { GRAFANA_RULES_SOURCE_NAME, getDatasourceAPIUid, getRulesSourceName, isGrafanaRulesSource } from './datasource';
|
|
import { isGrafanaRulerRule } from './rules';
|
|
|
|
function fromCombinedRule(rule: CombinedRule): RuleGroupIdentifierV2 {
|
|
if (isGrafanaRulerRule(rule.rulerRule) && isGrafanaRulesSource(rule.namespace.rulesSource)) {
|
|
return {
|
|
namespace: { uid: rule.rulerRule.grafana_alert.namespace_uid },
|
|
groupName: rule.group.name,
|
|
groupOrigin: 'grafana',
|
|
};
|
|
}
|
|
|
|
const rulesSourceName = getRulesSourceName(rule.namespace.rulesSource);
|
|
const rulesSourceUid = getDatasourceAPIUid(rulesSourceName);
|
|
return {
|
|
rulesSource: { uid: rulesSourceUid, name: rulesSourceName, ruleSourceType: 'datasource' },
|
|
namespace: { name: rule.namespace.name },
|
|
groupName: rule.group.name,
|
|
groupOrigin: 'datasource',
|
|
};
|
|
}
|
|
|
|
export function getGroupOriginName(groupIdentifier: RuleGroupIdentifierV2) {
|
|
return groupIdentifier.groupOrigin === 'grafana' ? GRAFANA_RULES_SOURCE_NAME : groupIdentifier.rulesSource.name;
|
|
}
|
|
|
|
/** Helper function to convert RuleGroupIdentifier to RuleGroupIdentifierV2 */
|
|
export function ruleGroupIdentifierV2toV1(groupIdentifier: RuleGroupIdentifierV2): RuleGroupIdentifier {
|
|
const rulesSourceName = getGroupOriginName(groupIdentifier);
|
|
|
|
return {
|
|
dataSourceName: rulesSourceName,
|
|
namespaceName: 'uid' in groupIdentifier.namespace ? groupIdentifier.namespace.uid : groupIdentifier.namespace.name,
|
|
groupName: groupIdentifier.groupName,
|
|
};
|
|
}
|
|
|
|
export const groupIdentifier = {
|
|
fromCombinedRule,
|
|
};
|