Logs Panel: Explore - Condense line limit copy (#103739)

* chore: condense line limit copy, fix forward search calculation
This commit is contained in:
Galen Kistler
2025-04-10 09:02:17 -05:00
committed by GitHub
parent a1b792b1f5
commit e6c945b535
2 changed files with 30 additions and 28 deletions
+19 -19
View File
@@ -356,8 +356,8 @@ describe('dataFrameToLogsModel', () => {
kind: LogsMetaKind.LabelsMap,
});
expect(logsModel.meta![1]).toMatchObject({
label: LIMIT_LABEL,
value: `1000 (2 returned)`,
label: '',
value: `2 lines returned`,
kind: LogsMetaKind.String,
});
});
@@ -437,8 +437,8 @@ describe('dataFrameToLogsModel', () => {
kind: LogsMetaKind.LabelsMap,
});
expect(logsModel.meta![1]).toMatchObject({
label: LIMIT_LABEL,
value: `1000 (2 returned)`,
label: '',
value: `2 lines returned`,
kind: LogsMetaKind.String,
});
});
@@ -474,8 +474,8 @@ describe('dataFrameToLogsModel', () => {
];
const logsModel = dataFrameToLogsModel(series, 1);
expect(logsModel.meta![0]).toMatchObject({
label: LIMIT_LABEL,
value: `1000 (1 displayed)`,
label: '',
value: `1 line displayed`,
kind: LogsMetaKind.String,
});
@@ -486,8 +486,8 @@ describe('dataFrameToLogsModel', () => {
const series: DataFrame[] = getTestDataFrame();
const logsModel = dataFrameToLogsModel(series, 1);
expect(logsModel.meta![1]).toMatchObject({
label: LIMIT_LABEL,
value: `1000 (2 returned)`,
label: '',
value: `2 lines returned`,
kind: LogsMetaKind.String,
});
});
@@ -500,8 +500,8 @@ describe('dataFrameToLogsModel', () => {
},
};
const timeRange = {
from: 1556270800000,
to: 1556270899999,
from: 1556270899999,
to: 1556357299999,
};
const queries = [
{
@@ -522,8 +522,8 @@ describe('dataFrameToLogsModel', () => {
kind: 2,
},
{
label: 'Line limit',
value: '2 reached, received logs cover 8.65% (9sec) of your selected time range (1min 40sec)',
label: '',
value: '2 lines shown — 21.85% (5h 14min 40sec) of 24h',
kind: 1,
},
]);
@@ -560,7 +560,7 @@ describe('dataFrameToLogsModel', () => {
kind: 2,
},
{
label: 'Line limit',
label: '',
value: '2 reached',
kind: 1,
},
@@ -654,8 +654,8 @@ describe('dataFrameToLogsModel', () => {
kind: LogsMetaKind.LabelsMap,
});
expect(logsModel.meta![1]).toMatchObject({
label: LIMIT_LABEL,
value: `1000 (2 returned)`,
label: '',
value: `2 lines returned`,
kind: LogsMetaKind.String,
});
});
@@ -773,8 +773,8 @@ describe('dataFrameToLogsModel', () => {
kind: LogsMetaKind.LabelsMap,
});
expect(logsModel.meta![1]).toMatchObject({
label: LIMIT_LABEL,
value: `1000 (2 returned)`,
label: '',
value: `2 lines returned`,
kind: LogsMetaKind.String,
});
expect(logsModel.meta![2]).toMatchObject({
@@ -1115,8 +1115,8 @@ describe('dataFrameToLogsModel', () => {
kind: LogsMetaKind.LabelsMap,
});
expect(logsModel.meta![1]).toMatchObject({
label: LIMIT_LABEL,
value: `2 reached, received logs cover 98.44% (5h 14min 40sec) of your selected time range (5h 19min 40sec)`,
label: '',
value: `2 lines shown — 98.44% (5h 14min 40sec) of 5h 19min 40sec`,
kind: LogsMetaKind.String,
});
});
+11 -9
View File
@@ -259,6 +259,7 @@ export function dataFrameToLogsModel(
* @param intervalMs Dynamic data interval based on available pixel width
* @param absoluteRange Requested time range
* @param pxPerBar Default: 20, buckets will be rendered as bars, assuming 10px per histogram bar plus some free space around it
* @param minimumBucketSize
*/
export function getSeriesProperties(
sortedRows: LogRowModel[],
@@ -274,18 +275,21 @@ export function getSeriesProperties(
let requestedRangeMs;
// Clamp time range to visible logs otherwise big parts of the graph might look empty
if (absoluteRange) {
const earliestTsLogs = sortedRows[0].timeEpochMs;
const firstTimeStamp = sortedRows[0].timeEpochMs;
const lastTimeStamp = sortedRows[sortedRows.length - 1].timeEpochMs;
const earliestTsLogs = firstTimeStamp < lastTimeStamp ? firstTimeStamp : lastTimeStamp;
const earliestLogToTimeRangeEnd = absoluteRange.to - earliestTsLogs;
requestedRangeMs = absoluteRange.to - absoluteRange.from;
visibleRangeMs = absoluteRange.to - earliestTsLogs;
visibleRangeMs = Math.abs(firstTimeStamp - lastTimeStamp);
if (visibleRangeMs > 0) {
// Adjust interval bucket size for potentially shorter visible range
const clampingFactor = visibleRangeMs / requestedRangeMs;
const clampingFactor = earliestLogToTimeRangeEnd / requestedRangeMs;
resolutionIntervalMs *= clampingFactor;
// Minimum bucketsize of 1s for nicer graphing
bucketSize = Math.max(Math.ceil(resolutionIntervalMs * pxPerBar), minimumBucketSize);
// makeSeriesForLogs() aligns dataspoints with time buckets, so we do the same here to not cut off data
// makeSeriesForLogs() aligns data points with time buckets, so we do the same here to not cut off data
const adjustedEarliest = Math.floor(earliestTsLogs / bucketSize) * bucketSize;
visibleRange = { from: adjustedEarliest, to: absoluteRange.to };
} else {
@@ -564,17 +568,15 @@ function adjustMetaInfo(logsModel: LogsModel, visibleRangeMs?: number, requested
if (canShowCoverage) {
const coverage = ((visibleRangeMs / requestedRangeMs) * 100).toFixed(2);
metaLimitValue += `, received logs cover ${coverage}% (${rangeUtil.msRangeToTimeString(
visibleRangeMs
)}) of your selected time range (${rangeUtil.msRangeToTimeString(requestedRangeMs)})`;
metaLimitValue = `${limit} lines shown — ${coverage}% (${rangeUtil.msRangeToTimeString(visibleRangeMs)}) of ${rangeUtil.msRangeToTimeString(requestedRangeMs)}`;
}
} else {
const description = config.featureToggles.logsInfiniteScrolling ? 'displayed' : 'returned';
metaLimitValue = `${limit} (${logsModel.rows.length} ${description})`;
metaLimitValue = `${logsModel.rows.length} ${logsModel.rows.length > 1 ? 'lines' : 'line'} ${description}`;
}
logsModelMeta[limitIndex] = {
label: LIMIT_LABEL,
label: '',
value: metaLimitValue,
kind: LogsMetaKind.String,
};