2025-04-01 10:38:02 +09:00

59 lines
1.4 KiB
TypeScript

import { PanelBuilders, SceneDataTransformer, SceneFlexItem, SceneQueryRunner } from '@grafana/scenes';
import { DataSourceRef } from '@grafana/schema';
import { PANEL_STYLES } from '../../home/Insights';
export function getMostFiredRulesScene(datasource: DataSourceRef, panelTitle: string) {
const query = new SceneQueryRunner({
datasource,
queries: [
{
refId: 'A',
expr: 'topk(5, sum by(group, labels_grafana_folder) (count_over_time({from="state-history"} | json | current = `Alerting` [1w])))',
instant: true,
},
],
});
const transformation = new SceneDataTransformer({
$data: query,
transformations: [
{
id: 'sortBy',
options: {
fields: {},
sort: [
{
field: 'Value #A',
desc: true,
},
],
},
},
{
id: 'organize',
options: {
excludeByName: {
Time: true,
},
indexByName: {
group: 0,
labels_grafana_folder: 1,
'Value #A': 2,
},
renameByName: {
group: 'Group',
labels_grafana_folder: 'Folder',
'Value #A': 'Number of fires',
},
},
},
],
});
return new SceneFlexItem({
...PANEL_STYLES,
body: PanelBuilders.table().setTitle(panelTitle).setDescription(panelTitle).setData(transformation).build(),
});
}