40 lines
1.3 KiB
TypeScript
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 || [],
|
|
});
|
|
}
|