mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
* Attach static generic data link to data frames in Explore * WIP * Always load correlations config when the query is run This will be moved to Wrapper.tsx and called only once Explore is mounted * remove comment * Load the config when Explore is loaded * Clean up * Check for feature toggle, simplify cod * Simplify the code * Remove unused code * Fix types * Add a test for attaching links * Revert package.json changes * Display title provided in the correlation label * Add missing mocks * Fix tests * Merge branch 'main' into ifrost/integration/attach-generic-data-link # Conflicts: # public/app/features/explore/Wrapper.tsx # public/app/features/explore/state/main.ts * Remove redundant async calls * Do not block Wrapper before correlations are loaded (only delay the query) * Test showing results after correlations are loaded * Post-merge fix * Use more consistent naming * Avoid null assertions Co-authored-by: Elfo404 <me@giordanoricci.com>
95 lines
3.0 KiB
TypeScript
95 lines
3.0 KiB
TypeScript
import { DataFrame, DataSourceInstanceSettings, FieldType, toDataFrame } from '@grafana/data';
|
|
|
|
import { CorrelationData } from './useCorrelations';
|
|
import { attachCorrelationsToDataFrames } from './utils';
|
|
|
|
describe('correlations utils', () => {
|
|
it('attaches correlations defined in the configuration', () => {
|
|
const loki = { uid: 'loki-uid', name: 'loki' } as DataSourceInstanceSettings;
|
|
const elastic = { uid: 'elastic-uid', name: 'elastic' } as DataSourceInstanceSettings;
|
|
const prometheus = { uid: 'prometheus-uid', name: 'prometheus' } as DataSourceInstanceSettings;
|
|
|
|
const refIdMap = {
|
|
'Loki Query': loki.uid,
|
|
'Elastic Query': elastic.uid,
|
|
'Prometheus Query': prometheus.uid,
|
|
};
|
|
|
|
const testDataFrames: DataFrame[] = [
|
|
toDataFrame({
|
|
name: 'Loki Logs',
|
|
refId: 'Loki Query',
|
|
fields: [
|
|
{ name: 'line', values: [] },
|
|
{ name: 'traceId', values: [] },
|
|
],
|
|
}),
|
|
toDataFrame({
|
|
name: 'Elastic Logs',
|
|
refId: 'Elastic Query',
|
|
fields: [
|
|
{ name: 'line', values: [] },
|
|
{ name: 'traceId', values: [] },
|
|
],
|
|
}),
|
|
toDataFrame({
|
|
name: 'Prometheus Metrics',
|
|
refId: 'Prometheus Query',
|
|
fields: [{ name: 'value', type: FieldType.number, values: [1, 2, 3, 4, 5] }],
|
|
}),
|
|
];
|
|
|
|
const correlations: CorrelationData[] = [
|
|
{
|
|
uid: 'loki-to-prometheus',
|
|
label: 'logs to metrics',
|
|
source: loki,
|
|
target: prometheus,
|
|
config: { type: 'query', field: 'traceId', target: { expr: 'target Prometheus query' } },
|
|
},
|
|
{
|
|
uid: 'prometheus-to-elastic',
|
|
label: 'metrics to logs',
|
|
source: prometheus,
|
|
target: elastic,
|
|
config: { type: 'query', field: 'value', target: { expr: 'target Elastic query' } },
|
|
},
|
|
];
|
|
|
|
attachCorrelationsToDataFrames(testDataFrames, correlations, refIdMap);
|
|
|
|
// Loki line (no links)
|
|
expect(testDataFrames[0].fields[0].config.links).toBeUndefined();
|
|
// Loki traceId (linked to Prometheus)
|
|
expect(testDataFrames[0].fields[1].config.links).toHaveLength(1);
|
|
expect(testDataFrames[0].fields[1].config.links![0]).toMatchObject({
|
|
title: 'logs to metrics',
|
|
internal: {
|
|
datasourceUid: prometheus.uid,
|
|
datasourceName: prometheus.name,
|
|
query: {
|
|
expr: 'target Prometheus query',
|
|
},
|
|
},
|
|
});
|
|
|
|
// Elastic line (no links)
|
|
expect(testDataFrames[1].fields[0].config.links).toBeUndefined();
|
|
// Elastic traceId (no links)
|
|
expect(testDataFrames[1].fields[0].config.links).toBeUndefined();
|
|
|
|
// Prometheus value (linked to Elastic)
|
|
expect(testDataFrames[2].fields[0].config.links).toHaveLength(1);
|
|
expect(testDataFrames[2].fields[0].config.links![0]).toMatchObject({
|
|
title: 'metrics to logs',
|
|
internal: {
|
|
datasourceUid: elastic.uid,
|
|
datasourceName: elastic.name,
|
|
query: {
|
|
expr: 'target Elastic query',
|
|
},
|
|
},
|
|
});
|
|
});
|
|
});
|