Skip to content
This repository was archived by the owner on Apr 27, 2023. It is now read-only.

Commit 36ac551

Browse files
committed
handle dashboard variables
1 parent ba0193e commit 36ac551

File tree

2 files changed

+40
-28
lines changed

2 files changed

+40
-28
lines changed

src/QueryEditor.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import defaults from 'lodash/defaults';
22

33
import React, { useState, useEffect } from 'react';
4-
import { AsyncSelect, Label, Field } from '@grafana/ui';
4+
import { Label, Select } from '@grafana/ui';
55
import { QueryEditorProps, SelectableValue } from '@grafana/data';
66
import { DataSource } from './datasource';
77
import { defaultQuery, MyDataSourceOptions, FlamegraphQuery } from './types';
@@ -11,6 +11,7 @@ type Props = QueryEditorProps<DataSource, FlamegraphQuery, MyDataSourceOptions>;
1111

1212
export const QueryEditor = (props: Props) => {
1313
const query = defaults(props.query, defaultQuery);
14+
console.log(props);
1415
const [appName, setAppName] = useState<SelectableValue<string>>({ label: query.name, value: query.name });
1516
const [names, setNames] = useState<SelectableValue<string>[]>([]);
1617
const loadAppNames = (query: string) => {
@@ -28,8 +29,10 @@ export const QueryEditor = (props: Props) => {
2829

2930
useEffect(() => {
3031
const { onChange, query, onRunQuery } = props;
31-
onChange({ ...query, name: appName.value });
32-
onRunQuery();
32+
if(appName.value) {
33+
onChange({ ...query, name: appName.value });
34+
onRunQuery();
35+
}
3336
}, [appName]);
3437

3538
return (
@@ -42,15 +45,14 @@ export const QueryEditor = (props: Props) => {
4245
/> */}
4346
<div style={{display: 'flex', flexDirection: 'row', marginTop: '10px'}}>
4447
<Label style={{marginTop: '8px', marginRight: '10px'}}>Application</Label>
45-
<Field>
46-
<AsyncSelect
47-
placeholder='Application name'
48-
value={appName}
49-
onChange={setAppName}
50-
defaultOptions={names}
51-
loadOptions={(query: string) => Promise.resolve(names.filter(name => name.value?.includes(query)))}
52-
/>
53-
</Field>
48+
<Select
49+
onChange={(v) => v ? setAppName(v) : setAppName({label:'', value: ''})}
50+
value={appName}
51+
options={names}
52+
backspaceRemovesValue
53+
isClearable
54+
allowCustomValue
55+
/>
5456
</div>
5557
</div>
5658
);

src/datasource.ts

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
import { getBackendSrv, BackendSrv } from "@grafana/runtime";
1010

1111
import { FlamegraphQuery, MyDataSourceOptions } from './types';
12+
import { getTemplateSrv } from '@grafana/runtime';
1213

1314

1415

@@ -48,22 +49,31 @@ export class DataSource extends DataSourceApi<FlamegraphQuery, MyDataSourceOptio
4849
const from = range.raw.from.valueOf();
4950
const until = range.raw.to.valueOf();
5051

51-
const promises = options.targets.map((query) =>
52-
this.getFlamegraph({ ...query, from, until }).then((response: any) => {
53-
const frame = new MutableDataFrame({
54-
refId: query.refId,
55-
name: query.name,
56-
fields: [
57-
{ name: "flamebearer", type: FieldType.other },
58-
],
59-
});
60-
61-
frame.appendRow([response.data.flamebearer]);
62-
63-
return frame;
64-
})
65-
);
66-
52+
const promises = options.targets.map((query) => {
53+
let nameFromVar: string | undefined;
54+
if(query?.name?.startsWith('$')) {
55+
const appNameVar = getTemplateSrv().getVariables().find((vari => query?.name?.slice(1) === vari.name));
56+
// @ts-ignore
57+
nameFromVar = appNameVar?.query;
58+
}
59+
return this.getFlamegraph({ ...query, name: nameFromVar || query.name, from, until }).then((response: any) => {
60+
const frame = new MutableDataFrame({
61+
refId: query.refId,
62+
name: nameFromVar || query.name,
63+
fields: [
64+
{ name: "flamebearer", type: FieldType.other },
65+
],
66+
meta: {
67+
preferredVisualisationType: 'table',
68+
},
69+
});
70+
71+
frame.appendRow([response.data.flamebearer]);
72+
73+
return frame;
74+
})
75+
}
76+
);
6777
return Promise.all(promises).then((data) => ({ data }));
6878
}
6979

0 commit comments

Comments
 (0)