diff --git a/public/app/core/logs_model.ts b/public/app/core/logs_model.ts index 09f5bb3a916..e9a21831e7e 100644 --- a/public/app/core/logs_model.ts +++ b/public/app/core/logs_model.ts @@ -242,32 +242,47 @@ export function makeSeriesForLogs(rows: LogRow[], intervalMs: number): TimeSerie // Graph time series by log level const seriesByLevel = {}; const bucketSize = intervalMs * 10; + const seriesList = []; for (const row of rows) { - if (!seriesByLevel[row.logLevel]) { - seriesByLevel[row.logLevel] = { lastTs: null, datapoints: [], alias: row.logLevel }; + let series = seriesByLevel[row.logLevel]; + + if (!series) { + seriesByLevel[row.logLevel] = series = { + lastTs: null, + datapoints: [], + alias: row.logLevel, + color: LogLevelColor[row.logLevel], + }; + + seriesList.push(series); } - const levelSeries = seriesByLevel[row.logLevel]; - - // Bucket to nearest minute + // align time to bucket size const time = Math.round(row.timeEpochMs / bucketSize) * bucketSize; // Entry for time - if (time === levelSeries.lastTs) { - levelSeries.datapoints[levelSeries.datapoints.length - 1][0]++; + if (time === series.lastTs) { + series.datapoints[series.datapoints.length - 1][0]++; } else { - levelSeries.datapoints.push([1, time]); - levelSeries.lastTs = time; + series.datapoints.push([1, time]); + series.lastTs = time; + } + + // add zero to other levels to aid stacking so each level series has same number of points + for (const other of seriesList) { + if (other !== series && other.lastTs !== time) { + other.datapoints.push([0, time]); + other.lastTs = time; + } } } - return Object.keys(seriesByLevel).reduce((acc, level) => { - if (seriesByLevel[level]) { - const gs = new TimeSeries(seriesByLevel[level]); - gs.setColor(LogLevelColor[level]); - acc.push(gs); - } - return acc; - }, []); + return seriesList.map(series => { + series.datapoints.sort((a, b) => { + return a[1] - b[1]; + }); + + return new TimeSeries(series); + }); } diff --git a/public/app/features/explore/Logs.tsx b/public/app/features/explore/Logs.tsx index 108d4f37a6e..e89424f2734 100644 --- a/public/app/features/explore/Logs.tsx +++ b/public/app/features/explore/Logs.tsx @@ -393,27 +393,6 @@ export default class Logs extends PureComponent { } } - // Grid options - // const cssColumnSizes = []; - // if (showDuplicates) { - // cssColumnSizes.push('max-content'); - // } - // // Log-level indicator line - // cssColumnSizes.push('3px'); - // if (showUtc) { - // cssColumnSizes.push('minmax(220px, max-content)'); - // } - // if (showLocalTime) { - // cssColumnSizes.push('minmax(140px, max-content)'); - // } - // if (showLabels) { - // cssColumnSizes.push('fit-content(20%)'); - // } - // cssColumnSizes.push('1fr'); - // const logEntriesStyle = { - // gridTemplateColumns: cssColumnSizes.join(' '), - // }; - const scanText = scanRange ? `Scanning ${rangeUtil.describeTimeRange(scanRange)}` : 'Scanning...'; return (