Logs Panel: Explore - Condense line limit copy (#103739)
* chore: condense line limit copy, fix forward search calculation
This commit is contained in:
@@ -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,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user