mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* add page and basic things * quick annotations * added so we can run queries on the view rule page. * wip. * merge * cleaned up the combined rule hook. * readd queries * fixing so you can run queries. * renamed variable. * fix rerenders and visualizing * minor fixes. * work in progress. * wip * a working version that can be tested. * changing check if we have data. * removed unused styling. * removed unused dep. * removed another dep. * Update public/app/features/alerting/unified/hooks/useCombinedRule.ts Co-authored-by: Domas <domas.lapinskas@grafana.com> * Update public/app/features/alerting/unified/hooks/useCombinedRule.ts Co-authored-by: Domas <domas.lapinskas@grafana.com> * refactored and changed UI according to figma. * resseting menu item. * removing unused external link. * refactor according to feedback. * changed so we always fetch the rule. * fixing so datasource only is displayed once. Also changed so we only navigate to alert list when rule has been deleted. * removed unused dep. * Will display query as json if we can't find data source. * changed to a function instead of the React.FC. * refactoring of id generation and added support to generate ids for native prometheus alerts without ruler. * set max width on page content * added page where you can easily link to a rule in grafana. * listing rules with same name. * fixing error cases. * updates after pr feedback * more pr feedback * use 1h-now as timerange * remove unused import * start on test * add test for cloud case * add ruleview render test * add render tests for grafana and cloud alerts * add mock for backendsrv * add rendering test for the find route * check if cards are rendered Co-authored-by: Peter Holmberg <peter.hlmbrg@gmail.com> Co-authored-by: Domas <domas.lapinskas@grafana.com>
81 lines
2.7 KiB
TypeScript
81 lines
2.7 KiB
TypeScript
import { DataSourceInstanceSettings, DataSourceJsonData } from '@grafana/data';
|
|
import { RulesSource } from 'app/types/unified-alerting';
|
|
import { getAllDataSources } from './config';
|
|
|
|
export const GRAFANA_RULES_SOURCE_NAME = 'grafana';
|
|
|
|
export enum DataSourceType {
|
|
Alertmanager = 'alertmanager',
|
|
Loki = 'loki',
|
|
Prometheus = 'prometheus',
|
|
}
|
|
|
|
export const RulesDataSourceTypes: string[] = [DataSourceType.Loki, DataSourceType.Prometheus];
|
|
|
|
export function getRulesDataSources() {
|
|
return getAllDataSources()
|
|
.filter((ds) => RulesDataSourceTypes.includes(ds.type))
|
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
}
|
|
|
|
export function getAlertManagerDataSources() {
|
|
return getAllDataSources()
|
|
.filter((ds) => ds.type === DataSourceType.Alertmanager)
|
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
}
|
|
|
|
export function getLotexDataSourceByName(dataSourceName: string): DataSourceInstanceSettings {
|
|
const dataSource = getDataSourceByName(dataSourceName);
|
|
if (!dataSource) {
|
|
throw new Error(`Data source ${dataSourceName} not found`);
|
|
}
|
|
if (dataSource.type !== DataSourceType.Loki && dataSource.type !== DataSourceType.Prometheus) {
|
|
throw new Error(`Unexpected data source type ${dataSource.type}`);
|
|
}
|
|
return dataSource;
|
|
}
|
|
|
|
export function getAllRulesSourceNames(): string[] {
|
|
return [...getRulesDataSources().map((r) => r.name), GRAFANA_RULES_SOURCE_NAME];
|
|
}
|
|
|
|
export function getAllRulesSources(): RulesSource[] {
|
|
return [...getRulesDataSources(), GRAFANA_RULES_SOURCE_NAME];
|
|
}
|
|
|
|
export function getRulesSourceName(rulesSource: RulesSource): string {
|
|
return isCloudRulesSource(rulesSource) ? rulesSource.name : rulesSource;
|
|
}
|
|
|
|
export function isCloudRulesSource(rulesSource: RulesSource | string): rulesSource is DataSourceInstanceSettings {
|
|
return rulesSource !== GRAFANA_RULES_SOURCE_NAME;
|
|
}
|
|
|
|
export function isGrafanaRulesSource(
|
|
rulesSource: RulesSource | string
|
|
): rulesSource is typeof GRAFANA_RULES_SOURCE_NAME {
|
|
return rulesSource === GRAFANA_RULES_SOURCE_NAME;
|
|
}
|
|
|
|
export function getDataSourceByName(name: string): DataSourceInstanceSettings<DataSourceJsonData> | undefined {
|
|
return getAllDataSources().find((source) => source.name === name);
|
|
}
|
|
|
|
export function getRulesSourceByName(name: string): RulesSource | undefined {
|
|
if (name === GRAFANA_RULES_SOURCE_NAME) {
|
|
return GRAFANA_RULES_SOURCE_NAME;
|
|
}
|
|
return getDataSourceByName(name);
|
|
}
|
|
|
|
export function getDatasourceAPIId(dataSourceName: string) {
|
|
if (dataSourceName === GRAFANA_RULES_SOURCE_NAME) {
|
|
return GRAFANA_RULES_SOURCE_NAME;
|
|
}
|
|
const ds = getDataSourceByName(dataSourceName);
|
|
if (!ds) {
|
|
throw new Error(`Datasource "${dataSourceName}" not found`);
|
|
}
|
|
return String(ds.id);
|
|
}
|