Logs: fix tests

This commit is contained in:
L2D2Grafana
2026-01-07 07:43:01 -08:00
parent 099c75b632
commit dc20e8bb2b
4 changed files with 33 additions and 12 deletions
@@ -61,6 +61,16 @@ jest.mock('../state/query', () => ({
},
}));
jest.mock('app/core/context/GrafanaContext', () => ({
...jest.requireActual('app/core/context/GrafanaContext'),
useGrafana: () => ({
location: {
getSearchObject: jest.fn().mockReturnValue({}),
partial: jest.fn(),
},
}),
}));
describe('Logs', () => {
let originalHref = window.location.href;
@@ -42,7 +42,10 @@ function getDisplayedFieldsForLanguages(logs: LogListModel[] | LogRowModel[], la
});
return displayedFields.filter(
(field) => field === OTEL_LOG_LINE_ATTRIBUTES_FIELD_NAME || logs.some((log) => log.labels[field] !== undefined)
(field) =>
field === LOG_LINE_BODY_FIELD_NAME ||
field === OTEL_LOG_LINE_ATTRIBUTES_FIELD_NAME ||
logs.some((log) => log.labels[field] !== undefined)
);
}
@@ -308,9 +308,13 @@ export const LogListContextProvider = ({
// ['Time', 'detected_level', '___LOG_LINE_BODY___', '___OTEL_LOG_ATTRIBUTES___']
const defaultDisplayedFields = useMemo(() => {
const orderedFields: string[] = tableDefaultFields;
// Always add LOG_LINE_BODY
// Always add LOG_LINE_BODY before OTel fields
orderedFields.push(LOG_LINE_BODY_FIELD_NAME);
orderedFields.push(...otelDisplayedFields);
// Add OTel fields, excluding LOG_LINE_BODY_FIELD_NAME if it's already there to avoid duplicates
const otelFieldsWithoutBody = otelDisplayedFields.filter((field) => field !== LOG_LINE_BODY_FIELD_NAME);
orderedFields.push(...otelFieldsWithoutBody);
return orderedFields;
}, [tableDefaultFields, otelDisplayedFields]);
+13 -9
View File
@@ -156,30 +156,34 @@ export const sortInDescendingOrder = (a: LogRowModel, b: LogRowModel) => {
return 0;
};
export function sortLogRows(logRows: LogRowModel[], sortOrder: LogsSortOrder) {
return sortOrder === LogsSortOrder.Ascending
? logRows.sort(sortInAscendingOrder)
: logRows.sort(sortInDescendingOrder);
}
export const sortLogsResult = (logsResult: LogsModel | null, sortOrder: LogsSortOrder): LogsModel => {
const rows = logsResult ? sortLogRows(logsResult.rows, sortOrder) : [];
return logsResult ? { ...logsResult, rows } : { hasUniqueLabels: false, rows };
};
export const sortLogRows = (logRows: LogRowModel[], sortOrder: LogsSortOrder) =>
sortOrder === LogsSortOrder.Ascending ? logRows.sort(sortInAscendingOrder) : logRows.sort(sortInDescendingOrder);
// Currently supports only error condition in Loki logs
export const checkLogsError = (logRow: LogRowModel): string | undefined => {
export function checkLogsError(logRow: LogRowModel): string | undefined {
return logRow.labels.__error__;
};
}
export const checkLogsSampled = (logRow: LogRowModel): string | undefined => {
export function checkLogsSampled(logRow: LogRowModel): string | undefined {
if (!logRow.labels.__adaptive_logs_sampled__) {
return undefined;
}
return logRow.labels.__adaptive_logs_sampled__ === 'true'
? 'Logs like this one have been dropped by Adaptive Logs'
: `${logRow.labels.__adaptive_logs_sampled__}% of logs like this one have been dropped by Adaptive Logs`;
};
}
export const escapeUnescapedString = (string: string) =>
string.replace(/\\r\\n|\\n|\\t|\\r/g, (match: string) => (match.slice(1) === 't' ? '\t' : '\n'));
export function escapeUnescapedString(string: string) {
return string.replace(/\\r\\n|\\n|\\t|\\r/g, (match: string) => (match.slice(1) === 't' ? '\t' : '\n'));
}
export function logRowsToReadableJson(logs: LogRowModel[], pickFields: string[] = []) {
return logs.map((log) => {