Jaeger: Make tags templateable (#42005)

* make tags templateable

* cleanup files I didn't want to modify
pull/42141/head
Stephanie Closson 4 years ago committed by GitHub
parent e3ef82203e
commit 8b95746f63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 36
      public/app/plugins/datasource/jaeger/datasource.test.ts
  2. 9
      public/app/plugins/datasource/jaeger/datasource.ts

@ -1,5 +1,12 @@
import { lastValueFrom, of, throwError } from 'rxjs';
import { DataQueryRequest, DataSourceInstanceSettings, dateTime, FieldType, PluginType } from '@grafana/data';
import {
DataQueryRequest,
DataSourceInstanceSettings,
dateTime,
FieldType,
PluginType,
ScopedVars,
} from '@grafana/data';
import { backendSrv } from 'app/core/services/backend_srv';
import { createFetchResponse } from 'test/helpers/createFetchResponse';
@ -15,8 +22,13 @@ import {
import { JaegerQuery } from './types';
jest.mock('@grafana/runtime', () => ({
...((jest.requireActual('@grafana/runtime') as unknown) as object),
...(jest.requireActual('@grafana/runtime') as any),
getBackendSrv: () => backendSrv,
getTemplateSrv: () => ({
replace: (val: string, subs: ScopedVars): string => {
return subs[val]?.value ?? val;
},
}),
}));
const timeSrvStub: any = {
@ -146,6 +158,26 @@ describe('JaegerDatasource', () => {
url: `${defaultSettings.url}/api/traces?service=jaeger-query&tags=%7B%22error%22%3A%22true%22%7D&start=1531468681000&end=1531489712000&lookback=custom`,
});
});
it('should resolve templates in tags', async () => {
const mock = setupFetchMock({ data: [testResponse] });
const ds = new JaegerDatasource(defaultSettings, timeSrvStub);
await lastValueFrom(
ds.query({
...defaultQuery,
scopedVars: {
'error=$error': {
text: 'error',
value: 'error=true',
},
},
targets: [{ queryType: 'search', refId: 'a', service: 'jaeger-query', tags: 'error=$error' }],
})
);
expect(mock).toBeCalledWith({
url: `${defaultSettings.url}/api/traces?service=jaeger-query&tags=%7B%22error%22%3A%22true%22%7D&start=1531468681000&end=1531489712000&lookback=custom`,
});
});
});
describe('when performing testDataSource', () => {

@ -12,7 +12,7 @@ import {
FieldType,
MutableDataFrame,
} from '@grafana/data';
import { BackendSrvRequest, getBackendSrv } from '@grafana/runtime';
import { BackendSrvRequest, getBackendSrv, getTemplateSrv } from '@grafana/runtime';
import { serializeParams } from 'app/core/utils/fetch';
import { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv';
@ -46,7 +46,7 @@ export class JaegerDatasource extends DataSourceApi<JaegerQuery, JaegerJsonData>
query(options: DataQueryRequest<JaegerQuery>): Observable<DataQueryResponse> {
// At this moment we expect only one target. In case we somehow change the UI to be able to show multiple
// traces at one we need to change this.
const target = options.targets[0];
const target: JaegerQuery = options.targets[0];
if (!target) {
return of({ data: [emptyTraceDataFrame] });
}
@ -90,7 +90,10 @@ export class JaegerDatasource extends DataSourceApi<JaegerQuery, JaegerJsonData>
// remove empty properties
jaegerQuery = pickBy(jaegerQuery, identity);
if (jaegerQuery.tags) {
jaegerQuery = { ...jaegerQuery, tags: convertTagsLogfmt(jaegerQuery.tags) };
jaegerQuery = {
...jaegerQuery,
tags: convertTagsLogfmt(getTemplateSrv().replace(jaegerQuery.tags, options.scopedVars)),
};
}
if (jaegerQuery.operation === ALL_OPERATIONS_KEY) {

Loading…
Cancel
Save