Skip to content
This repository has been archived by the owner on May 1, 2024. It is now read-only.

Commit

Permalink
Merge pull request #161 from TaoVonQi/main
Browse files Browse the repository at this point in the history
Add support for dashboard query variables.
  • Loading branch information
helenosheaa authored Apr 24, 2024
2 parents 54f2fd6 + f3ad175 commit 24d952e
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 2 deletions.
36 changes: 36 additions & 0 deletions src/components/VariableQueryEditor.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import React, { useState } from 'react';
import { SQLQuery } from 'types';

interface VariableQueryProps {
query: SQLQuery;
onChange: (query: SQLQuery, definition: string) => void;
}

export const VariableQueryEditor = ({ onChange, query }: VariableQueryProps) => {
const [state, setState] = useState(query);

const saveQuery = () => {
onChange(state, `${state.queryText}`);
};

const handleChange = (event: React.FormEvent<HTMLInputElement>) =>
setState({
...state,
[event.currentTarget.name]: event.currentTarget.value,
});

return (
<>
<div className="gf-form">
<span className="gf-form-label width-10">Query</span>
<input
name="rawQuery"
className="gf-form-input"
onBlur={saveQuery}
onChange={handleChange}
value={state.queryText}
/>
</div>
</>
);
};
29 changes: 27 additions & 2 deletions src/datasource.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,37 @@
import {DataSourceInstanceSettings, CoreApp, ScopedVars, VariableWithMultiSupport} from '@grafana/data'
import {DataSourceWithBackend, getTemplateSrv} from '@grafana/runtime'
import {DataQueryResponse, MetricFindValue, DataSourceInstanceSettings, CoreApp, ScopedVars, VariableWithMultiSupport} from '@grafana/data'
import {frameToMetricFindValue, DataSourceWithBackend, getTemplateSrv} from '@grafana/runtime'
import {SQLQuery, FlightSQLDataSourceOptions, DEFAULT_QUERY} from './types'
import { lastValueFrom } from 'rxjs';

export class FlightSQLDataSource extends DataSourceWithBackend<SQLQuery, FlightSQLDataSourceOptions> {
constructor(instanceSettings: DataSourceInstanceSettings<FlightSQLDataSourceOptions>) {
super(instanceSettings)
}

async metricFindQuery(queryText: string, options?: any): Promise<MetricFindValue[]> {
const target: SQLQuery = {
refId: 'metricFindQuery',
queryText,
rawEditor: true,
format: 'table'
};
return lastValueFrom(
super.query({
...(options ?? {}), // includes 'range'
targets: [target],
})
).then(this.toMetricFindValue);
}

toMetricFindValue(rsp: DataQueryResponse): MetricFindValue[] {
const data = rsp.data ?? [];
// Create MetricFindValue object for all frames
const values = data.map((d) => frameToMetricFindValue(d)).flat();
// Filter out duplicate elements
return values.filter((elm, idx, self) => idx === self.findIndex((t) => t.text === elm.text));

}

getDefaultQuery(_: CoreApp): Partial<SQLQuery> {
return DEFAULT_QUERY
}
Expand Down

0 comments on commit 24d952e

Please sign in to comment.