grafana/public/app/features/logs/legacyLogsFrame.ts
Gábor Farkas e9b9a08dd0
logs: handle dataplane-compatible logs-frames (#70318)
* logs: handle dataplane-compatible logs-frames

* simpler tests

* simpler code

* simpler code

* switch to null from undefined

* updated tests

* added test for simplest case

* more direct comparisons

* simplified code

* removed by-mistake added code
2023-06-27 14:50:36 +02:00

54 lines
1.4 KiB
TypeScript

import { DataFrame, FieldCache, FieldType, Field, Labels } from '@grafana/data';
import type { LogsFrame } from './logsFrame';
function getLabels(frame: DataFrame, cache: FieldCache, lineField: Field): Labels[] | null {
const useLabelsField = frame.meta?.custom?.frameType === 'LabeledTimeValues';
if (!useLabelsField) {
const lineLabels = lineField.labels;
if (lineLabels !== undefined) {
const result = new Array(frame.length);
result.fill(lineLabels);
return result;
} else {
return null;
}
}
const labelsField = cache.getFieldByName('labels');
if (labelsField === undefined) {
return null;
}
return labelsField.values;
}
export function parseLegacyLogsFrame(frame: DataFrame): LogsFrame | null {
const cache = new FieldCache(frame);
const timeField = cache.getFields(FieldType.time)[0];
const bodyField = cache.getFields(FieldType.string)[0];
// these two are mandatory
if (timeField === undefined || bodyField === undefined) {
return null;
}
const timeNanosecondField = cache.getFieldByName('tsNs') ?? null;
const severityField = cache.getFieldByName('level') ?? null;
const idField = cache.getFieldByName('id') ?? null;
const labels = getLabels(frame, cache, bodyField);
return {
timeField,
bodyField,
timeNanosecondField,
severityField,
idField,
attributes: labels,
getAttributesAsLabels: () => labels,
};
}