import { DataSourceWithBackend } from '@grafana/runtime'; import { VizPanel } from '@grafana/scenes'; import { supportedDatasources } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SupportedPubdashDatasources'; import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; import { DashboardScene } from '../../scene/DashboardScene'; import { getQueryRunnerFor } from '../../utils/utils'; export const getUnsupportedDashboardDatasources = async (types: string[]): Promise => { let unsupportedDS = new Set(); for (const type of types) { if (!supportedDatasources.has(type)) { unsupportedDS.add(type); } else { const ds = await getDatasourceSrv().get(type); if (!(ds instanceof DataSourceWithBackend)) { unsupportedDS.add(type); } } } return Array.from(unsupportedDS); }; export function getPanelDatasourceTypes(scene: DashboardScene): string[] { const types = new Set(); const panels = scene.state.body.getVizPanels(); for (const child of panels) { const ts = panelDatasourceTypes(child); for (const t of ts) { types.add(t); } } return Array.from(types).sort(); } function panelDatasourceTypes(vizPanel: VizPanel) { const types = new Set(); const queryRunner = getQueryRunnerFor(vizPanel); if (queryRunner) { for (const q of queryRunner.state.queries) { types.add(q.datasource?.type ?? ''); } } return Array.from(types); }