Fix: Add support for datasource variable queries (#98098)

* add ds variable support

* bump scenes

* remove unused fixture
This commit is contained in:
Erik Sundell 2024-12-17 16:31:28 +01:00 committed by GitHub
parent 0d7303d536
commit 7c583ed8fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 65 additions and 25 deletions

View File

@ -11,6 +11,7 @@ import {
import { MyQuery, MyDataSourceOptions, DEFAULT_QUERY, DataSourceResponse } from './types';
import { lastValueFrom } from 'rxjs';
import { VariableSupport } from './variables';
export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
baseUrl: string;
@ -18,6 +19,7 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
constructor(instanceSettings: DataSourceInstanceSettings<MyDataSourceOptions>) {
super(instanceSettings);
this.baseUrl = instanceSettings.url!;
this.variables = new VariableSupport();
}
getDefaultQuery(_: CoreApp): Partial<MyQuery> {
@ -34,18 +36,17 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
const from = range!.from.valueOf();
const to = range!.to.valueOf();
// Return a constant for each query.
const data = options.targets.map((target) => {
return createDataFrame({
refId: target.refId,
fields: [
{ name: 'Time', values: [from, to], type: FieldType.time },
{ name: 'Value', values: [target.constant, target.constant], type: FieldType.number },
],
});
});
return { data };
return {
data: [
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', values: [from, to], type: FieldType.time },
{ name: 'Value', values: ['A', 'B'], type: FieldType.string },
],
}),
],
};
}
async request(url: string, params?: string) {

View File

@ -0,0 +1,13 @@
import { test, expect } from '@grafana/plugin-e2e';
test('should render variable editor', async ({ variableEditPage, page }) => {
await variableEditPage.datasource.set('gdev-e2etestdatasource');
await expect(page.getByRole('textbox', { name: 'Query Text' })).toBeVisible();
});
test('create new, successful variable query', async ({ variableEditPage, page }) => {
await variableEditPage.datasource.set('gdev-e2etestdatasource');
await page.getByRole('textbox', { name: 'Query Text' }).fill('variableQuery');
await variableEditPage.runQuery();
await expect(variableEditPage).toDisplayPreviews(['A', 'B']);
});

View File

@ -0,0 +1,13 @@
import { VariableSupportBase, VariableSupportType } from '@grafana/data';
import { DEFAULT_QUERY, MyQuery } from './types';
import { DataSource } from './datasource';
export class VariableSupport extends VariableSupportBase<DataSource> {
getType(): VariableSupportType {
return VariableSupportType.Datasource;
}
getDefaultQuery(): Partial<MyQuery> {
return DEFAULT_QUERY;
}
}

View File

@ -275,8 +275,8 @@
"@grafana/prometheus": "workspace:*",
"@grafana/runtime": "workspace:*",
"@grafana/saga-icons": "workspace:*",
"@grafana/scenes": "^5.32.0",
"@grafana/scenes-react": "^5.32.0",
"@grafana/scenes": "^5.34.0",
"@grafana/scenes-react": "^5.34.0",
"@grafana/schema": "workspace:*",
"@grafana/sql": "workspace:*",
"@grafana/ui": "workspace:*",

View File

@ -3829,7 +3829,7 @@ __metadata:
languageName: unknown
linkType: soft
"@grafana/scenes-react@npm:^5.32.0":
"@grafana/scenes-react@npm:^5.34.0":
version: 5.34.0
resolution: "@grafana/scenes-react@npm:5.34.0"
dependencies:
@ -3848,7 +3848,7 @@ __metadata:
languageName: node
linkType: hard
"@grafana/scenes@npm:5.34.0, @grafana/scenes@npm:^5.32.0":
"@grafana/scenes@npm:5.34.0, @grafana/scenes@npm:^5.34.0":
version: 5.34.0
resolution: "@grafana/scenes@npm:5.34.0"
dependencies:
@ -17552,8 +17552,8 @@ __metadata:
"@grafana/prometheus": "workspace:*"
"@grafana/runtime": "workspace:*"
"@grafana/saga-icons": "workspace:*"
"@grafana/scenes": "npm:^5.32.0"
"@grafana/scenes-react": "npm:^5.32.0"
"@grafana/scenes": "npm:^5.34.0"
"@grafana/scenes-react": "npm:^5.34.0"
"@grafana/schema": "workspace:*"
"@grafana/sql": "workspace:*"
"@grafana/tsconfig": "npm:^2.0.0"
@ -20699,8 +20699,8 @@ __metadata:
linkType: hard
"knip@npm:^5.10.0":
version: 5.41.0
resolution: "knip@npm:5.41.0"
version: 5.40.0
resolution: "knip@npm:5.40.0"
dependencies:
"@nodelib/fs.walk": "npm:1.2.8"
"@snyk/github-codeowners": "npm:1.1.0"
@ -20724,7 +20724,7 @@ __metadata:
bin:
knip: bin/knip.js
knip-bun: bin/knip-bun.js
checksum: 10/a30b986ca4331b735f188c9217cb551b2698ddbed54bc98f1bf3c1fe1e85b3aff589244dafe60d6b5c7a8ee5133726d69366965cc3ae6299b43c33787155a7a2
checksum: 10/238d76428a1f0cd3a184ebd9aaea2e07b3b8434cdee6c6e9230d6ae31f18b93188e2b60fbd64769d2448ce5b0114e662ee536843207514b1e95060b8740218d8
languageName: node
linkType: hard
@ -25155,7 +25155,7 @@ __metadata:
languageName: node
linkType: hard
"rc-util@npm:^5.0.1, rc-util@npm:^5.0.6, rc-util@npm:^5.15.0, rc-util@npm:^5.16.1, rc-util@npm:^5.21.0, rc-util@npm:^5.24.4, rc-util@npm:^5.26.0, rc-util@npm:^5.27.0, rc-util@npm:^5.36.0, rc-util@npm:^5.37.0, rc-util@npm:^5.38.0, rc-util@npm:^5.38.1, rc-util@npm:^5.43.0":
"rc-util@npm:^5.0.1, rc-util@npm:^5.0.6, rc-util@npm:^5.26.0":
version: 5.44.2
resolution: "rc-util@npm:5.44.2"
dependencies:
@ -25168,6 +25168,19 @@ __metadata:
languageName: node
linkType: hard
"rc-util@npm:^5.15.0, rc-util@npm:^5.16.1, rc-util@npm:^5.21.0, rc-util@npm:^5.24.4, rc-util@npm:^5.27.0, rc-util@npm:^5.36.0, rc-util@npm:^5.37.0, rc-util@npm:^5.38.0, rc-util@npm:^5.38.1, rc-util@npm:^5.43.0":
version: 5.43.0
resolution: "rc-util@npm:5.43.0"
dependencies:
"@babel/runtime": "npm:^7.18.3"
react-is: "npm:^18.2.0"
peerDependencies:
react: ">=16.9.0"
react-dom: ">=16.9.0"
checksum: 10/6d5be9d79182c6b4c5a033ad6517b2940d3d2ac42a8e77ef5735591d182f8236f61bc7628d61e82a122d2046ec849462f3fe57c08d3a2a20279646785c34ec4a
languageName: node
linkType: hard
"rc-virtual-list@npm:^3.5.1, rc-virtual-list@npm:^3.5.2":
version: 3.5.3
resolution: "rc-virtual-list@npm:3.5.3"
@ -29687,9 +29700,9 @@ __metadata:
linkType: hard
"type-fest@npm:^4.18.2, type-fest@npm:^4.26.1":
version: 4.30.2
resolution: "type-fest@npm:4.30.2"
checksum: 10/c5168b159c366e4fd5b74c7f7b786bed9248c03f67e6e07d52dd5d51354447468fa7c92b9f2142c7fe9279814031f783959370242c3520de848931b65ddb48bb
version: 4.26.1
resolution: "type-fest@npm:4.26.1"
checksum: 10/b82676194f80af228cb852e320d2ea8381c89d667d2e4d9f2bdfc8f254bccc039c7741a90c53617a4de0c9fdca8265ed18eb0888cd628f391c5c381c33a9f94b
languageName: node
linkType: hard