mirror of
https://github.com/grafana/grafana.git
synced 2025-09-22 14:33:50 +08:00
Snapshots: Fix panel inspector for snapshot data (#41530)
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
import { FieldConfig } from './dataFrame';
|
import { DataFrameDTO, FieldConfig } from './dataFrame';
|
||||||
import { DataTransformerConfig } from './transformations';
|
import { DataTransformerConfig } from './transformations';
|
||||||
import { ApplyFieldOverrideOptions } from './fieldOverrides';
|
import { ApplyFieldOverrideOptions } from './fieldOverrides';
|
||||||
import { PanelPluginDataSupport } from '.';
|
import { PanelPluginDataSupport } from '.';
|
||||||
@ -171,4 +171,5 @@ export interface DataConfigSource {
|
|||||||
getDataSupport: () => PanelPluginDataSupport;
|
getDataSupport: () => PanelPluginDataSupport;
|
||||||
getTransformations: () => DataTransformerConfig[] | undefined;
|
getTransformations: () => DataTransformerConfig[] | undefined;
|
||||||
getFieldOverrideOptions: () => ApplyFieldOverrideOptions | undefined;
|
getFieldOverrideOptions: () => ApplyFieldOverrideOptions | undefined;
|
||||||
|
snapshotData?: DataFrameDTO[];
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,11 @@ interface ScenarioContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ScenarioFn = (ctx: ScenarioContext) => void;
|
type ScenarioFn = (ctx: ScenarioContext) => void;
|
||||||
|
const defaultPanelConfig: grafanaData.DataConfigSource = {
|
||||||
|
getFieldOverrideOptions: () => undefined,
|
||||||
|
getTransformations: () => undefined,
|
||||||
|
getDataSupport: () => ({ annotations: false, alertStates: false }),
|
||||||
|
};
|
||||||
|
|
||||||
function describeQueryRunnerScenario(
|
function describeQueryRunnerScenario(
|
||||||
description: string,
|
description: string,
|
||||||
@ -64,11 +69,6 @@ function describeQueryRunnerScenario(
|
|||||||
) {
|
) {
|
||||||
describe(description, () => {
|
describe(description, () => {
|
||||||
let setupFn = () => {};
|
let setupFn = () => {};
|
||||||
const defaultPanelConfig: grafanaData.DataConfigSource = {
|
|
||||||
getFieldOverrideOptions: () => undefined,
|
|
||||||
getTransformations: () => undefined,
|
|
||||||
getDataSupport: () => ({ annotations: false, alertStates: false }),
|
|
||||||
};
|
|
||||||
const ctx: ScenarioContext = {
|
const ctx: ScenarioContext = {
|
||||||
maxDataPoints: 200,
|
maxDataPoints: 200,
|
||||||
scopedVars: {
|
scopedVars: {
|
||||||
@ -363,6 +363,35 @@ describe('PanelQueryRunner', () => {
|
|||||||
}),
|
}),
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
getTransformations: () => [{}],
|
getTransformations: () => [{}],
|
||||||
|
getDataSupport: () => ({ annotations: false, alertStates: false }),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const snapshotData: grafanaData.DataFrameDTO[] = [
|
||||||
|
{
|
||||||
|
fields: [
|
||||||
|
{ name: 'time', type: grafanaData.FieldType.time, values: [1000] },
|
||||||
|
{ name: 'value', type: grafanaData.FieldType.number, values: [1] },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
describeQueryRunnerScenario(
|
||||||
|
'getData with snapshot data',
|
||||||
|
(ctx) => {
|
||||||
|
it('should return snapshotted data', async () => {
|
||||||
|
ctx.runner.getData({ withTransforms: false, withFieldConfig: true }).subscribe({
|
||||||
|
next: (data: grafanaData.PanelData) => {
|
||||||
|
expect(data.state).toBe(grafanaData.LoadingState.Done);
|
||||||
|
expect(data.series).toEqual(snapshotData);
|
||||||
|
expect(data.timeRange).toEqual(grafanaData.getDefaultTimeRange());
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{
|
||||||
|
...defaultPanelConfig,
|
||||||
|
snapshotData,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -23,12 +23,14 @@ import {
|
|||||||
DataSourceJsonData,
|
DataSourceJsonData,
|
||||||
DataSourceRef,
|
DataSourceRef,
|
||||||
DataTransformerConfig,
|
DataTransformerConfig,
|
||||||
|
getDefaultTimeRange,
|
||||||
LoadingState,
|
LoadingState,
|
||||||
PanelData,
|
PanelData,
|
||||||
rangeUtil,
|
rangeUtil,
|
||||||
ScopedVars,
|
ScopedVars,
|
||||||
TimeRange,
|
TimeRange,
|
||||||
TimeZone,
|
TimeZone,
|
||||||
|
toDataFrame,
|
||||||
transformDataFrame,
|
transformDataFrame,
|
||||||
} from '@grafana/data';
|
} from '@grafana/data';
|
||||||
import { getDashboardQueryRunner } from './DashboardQueryRunner/DashboardQueryRunner';
|
import { getDashboardQueryRunner } from './DashboardQueryRunner/DashboardQueryRunner';
|
||||||
@ -87,6 +89,15 @@ export class PanelQueryRunner {
|
|||||||
return compareDataFrameStructures(a, b, true);
|
return compareDataFrameStructures(a, b, true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (this.dataConfigSource.snapshotData) {
|
||||||
|
const snapshotPanelData: PanelData = {
|
||||||
|
state: LoadingState.Done,
|
||||||
|
series: this.dataConfigSource.snapshotData.map((v) => toDataFrame(v)),
|
||||||
|
timeRange: getDefaultTimeRange(), // Don't need real time range for snapshots
|
||||||
|
};
|
||||||
|
return of(snapshotPanelData);
|
||||||
|
}
|
||||||
|
|
||||||
return this.subject.pipe(
|
return this.subject.pipe(
|
||||||
this.getTransformationsStream(withTransforms),
|
this.getTransformationsStream(withTransforms),
|
||||||
map((data: PanelData) => {
|
map((data: PanelData) => {
|
||||||
|
Reference in New Issue
Block a user