2020-10-13 12:12:49 -05:00
|
|
|
import {
|
2021-03-04 11:23:02 -06:00
|
|
|
DataFrame,
|
|
|
|
DataQuery,
|
2020-10-13 12:12:49 -05:00
|
|
|
DataQueryRequest,
|
|
|
|
DataQueryResponse,
|
2021-03-04 11:23:02 -06:00
|
|
|
DataSourceInstanceSettings,
|
2020-10-13 12:12:49 -05:00
|
|
|
FieldType,
|
2021-03-04 11:23:02 -06:00
|
|
|
MutableDataFrame,
|
2020-10-13 12:12:49 -05:00
|
|
|
} from '@grafana/data';
|
2021-03-04 11:23:02 -06:00
|
|
|
import { DataSourceWithBackend } from '@grafana/runtime';
|
|
|
|
import { Observable } from 'rxjs';
|
2020-10-13 12:12:49 -05:00
|
|
|
import { map } from 'rxjs/operators';
|
|
|
|
|
|
|
|
export type TempoQuery = {
|
|
|
|
query: string;
|
|
|
|
} & DataQuery;
|
|
|
|
|
2021-03-04 11:23:02 -06:00
|
|
|
export class TempoDatasource extends DataSourceWithBackend<TempoQuery> {
|
|
|
|
constructor(instanceSettings: DataSourceInstanceSettings) {
|
2020-10-13 12:12:49 -05:00
|
|
|
super(instanceSettings);
|
|
|
|
}
|
|
|
|
|
|
|
|
query(options: DataQueryRequest<TempoQuery>): Observable<DataQueryResponse> {
|
2021-03-04 11:23:02 -06:00
|
|
|
return super.query(options).pipe(
|
|
|
|
map((response) => {
|
|
|
|
if (response.error) {
|
|
|
|
return response;
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
data: [
|
|
|
|
new MutableDataFrame({
|
|
|
|
fields: [
|
|
|
|
{
|
|
|
|
name: 'trace',
|
|
|
|
type: FieldType.trace,
|
|
|
|
values: [JSON.parse((response.data as DataFrame[])[0].fields[0].values.get(0))],
|
2020-10-13 12:12:49 -05:00
|
|
|
},
|
2021-03-04 11:23:02 -06:00
|
|
|
],
|
|
|
|
meta: {
|
|
|
|
preferredVisualisationType: 'trace',
|
2020-10-13 12:12:49 -05:00
|
|
|
},
|
2021-03-04 11:23:02 -06:00
|
|
|
}),
|
|
|
|
],
|
|
|
|
};
|
|
|
|
})
|
|
|
|
);
|
2020-10-13 12:12:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
async testDatasource(): Promise<any> {
|
2021-03-04 11:23:02 -06:00
|
|
|
const response = await super.query({ targets: [{ query: '', refId: 'A' }] } as any).toPromise();
|
|
|
|
|
|
|
|
if (!response.error?.message?.startsWith('failed to get trace')) {
|
|
|
|
return { status: 'error', message: 'Data source is not working' };
|
2020-10-13 12:12:49 -05:00
|
|
|
}
|
|
|
|
|
2021-03-04 11:23:02 -06:00
|
|
|
return { status: 'success', message: 'Data source is working' };
|
2020-10-13 12:12:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
getQueryDisplayText(query: TempoQuery) {
|
|
|
|
return query.query;
|
|
|
|
}
|
|
|
|
}
|