grafana_bak/public/app/features/dashboard-scene/utils/createPanelDataProvider.ts
2025-04-01 10:38:02 +09:00

40 lines
1.3 KiB
TypeScript

import { config } from '@grafana/runtime';
import { SceneDataProvider, SceneDataTransformer, SceneQueryRunner } from '@grafana/scenes';
import { PanelModel } from 'app/features/dashboard/state/PanelModel';
import { DashboardDatasourceBehaviour } from '../scene/DashboardDatasourceBehaviour';
export function createPanelDataProvider(panel: PanelModel): SceneDataProvider | undefined {
// Skip setting query runner for panels without queries
if (!panel.targets?.length) {
return undefined;
}
// Skip setting query runner for panel plugins with skipDataQuery
if (config.panels[panel.type]?.skipDataQuery) {
return undefined;
}
let dataProvider: SceneDataProvider | undefined = undefined;
dataProvider = new SceneQueryRunner({
datasource: panel.datasource ?? undefined,
queries: panel.targets,
maxDataPoints: panel.maxDataPoints ?? undefined,
maxDataPointsFromWidth: true,
cacheTimeout: panel.cacheTimeout,
queryCachingTTL: panel.queryCachingTTL,
minInterval: panel.interval ?? undefined,
dataLayerFilter: {
panelId: panel.id,
},
$behaviors: [new DashboardDatasourceBehaviour({})],
});
// Wrap inner data provider in a data transformer
return new SceneDataTransformer({
$data: dataProvider,
transformations: panel.transformations || [],
});
}