mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Loki: Support X-ray as internal link in derived fields (#75756)
Update Loki datasource to support X-ray as internal link in derived fields
This commit is contained in:
parent
9813d17e93
commit
65fa94b16b
@ -7,7 +7,13 @@ jest.mock('@grafana/runtime', () => ({
|
||||
...jest.requireActual('@grafana/runtime'),
|
||||
getDataSourceSrv: () => {
|
||||
return {
|
||||
getInstanceSettings: () => {
|
||||
getInstanceSettings: (datasourceUid?: string) => {
|
||||
switch (datasourceUid) {
|
||||
case 'tempo-datasource-uid':
|
||||
return { name: 'Tempo', type: 'tempo' };
|
||||
case 'xray-datasource-uid':
|
||||
return { name: 'X-ray', type: 'grafana-x-ray-datasource' };
|
||||
}
|
||||
return { name: 'Loki1' };
|
||||
},
|
||||
};
|
||||
@ -36,8 +42,22 @@ describe('getDerivedFields', () => {
|
||||
datasourceUid: 'uid2',
|
||||
urlDisplayLabel: 'Custom Label',
|
||||
},
|
||||
{
|
||||
matcherRegex: 'trace=(\\w+)',
|
||||
name: 'tempoTraceId',
|
||||
url: 'test',
|
||||
datasourceUid: 'tempo-datasource-uid',
|
||||
urlDisplayLabel: 'Tempo',
|
||||
},
|
||||
{
|
||||
matcherRegex: 'trace=(\\w+)',
|
||||
name: 'xrayTraceId',
|
||||
url: 'test',
|
||||
datasourceUid: 'xray-datasource-uid',
|
||||
urlDisplayLabel: 'AWS X-ray',
|
||||
},
|
||||
]);
|
||||
expect(newFields.length).toBe(2);
|
||||
expect(newFields.length).toBe(4);
|
||||
const trace1 = newFields.find((f) => f.name === 'trace1');
|
||||
expect(trace1!.values).toEqual([null, '1234', null]);
|
||||
expect(trace1!.config.links![0]).toEqual({
|
||||
@ -58,5 +78,31 @@ describe('getDerivedFields', () => {
|
||||
internal: { datasourceName: 'Loki1', datasourceUid: 'uid2', query: { query: 'test' } },
|
||||
url: '',
|
||||
});
|
||||
|
||||
const tempoTraceId = newFields.find((f) => f.name === 'tempoTraceId');
|
||||
expect(tempoTraceId!.values).toEqual([null, null, null]);
|
||||
expect(tempoTraceId!.config.links!.length).toBe(1);
|
||||
expect(tempoTraceId!.config.links![0]).toEqual({
|
||||
title: 'Tempo',
|
||||
internal: {
|
||||
datasourceName: 'Tempo',
|
||||
datasourceUid: 'tempo-datasource-uid',
|
||||
query: { query: 'test', queryType: 'traceql' },
|
||||
},
|
||||
url: '',
|
||||
});
|
||||
|
||||
const xrayTraceId = newFields.find((f) => f.name === 'xrayTraceId');
|
||||
expect(xrayTraceId!.values).toEqual([null, null, null]);
|
||||
expect(xrayTraceId!.config.links!.length).toBe(1);
|
||||
expect(xrayTraceId!.config.links![0]).toEqual({
|
||||
title: 'AWS X-ray',
|
||||
internal: {
|
||||
datasourceName: 'X-ray',
|
||||
datasourceUid: 'xray-datasource-uid',
|
||||
query: { query: 'test', queryType: 'getTrace' },
|
||||
},
|
||||
url: '',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -42,6 +42,16 @@ function fieldFromDerivedFieldConfig(derivedFieldConfigs: DerivedFieldConfig[]):
|
||||
// Having field.datasourceUid means it is an internal link.
|
||||
if (derivedFieldConfig.datasourceUid) {
|
||||
const dsSettings = dataSourceSrv.getInstanceSettings(derivedFieldConfig.datasourceUid);
|
||||
const queryType = (type: string | undefined): string | undefined => {
|
||||
switch (type) {
|
||||
case 'tempo':
|
||||
return 'traceql';
|
||||
case 'grafana-x-ray-datasource':
|
||||
return 'getTrace';
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
acc.push({
|
||||
// Will be filled out later
|
||||
@ -49,7 +59,7 @@ function fieldFromDerivedFieldConfig(derivedFieldConfigs: DerivedFieldConfig[]):
|
||||
url: '',
|
||||
// This is hardcoded for Jaeger or Zipkin not way right now to specify datasource specific query object
|
||||
internal: {
|
||||
query: { query: derivedFieldConfig.url, queryType: dsSettings?.type === 'tempo' ? 'traceql' : undefined },
|
||||
query: { query: derivedFieldConfig.url, queryType: queryType(dsSettings?.type) },
|
||||
datasourceUid: derivedFieldConfig.datasourceUid,
|
||||
datasourceName: dsSettings?.name ?? 'Data source not found',
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user