瀏覽代碼

Fixed issue with logs graph and stacking

Torkel Ödegaard 7 年之前
父節點
當前提交
14cf846e73
共有 2 個文件被更改,包括 32 次插入38 次删除
  1. 32 17
      public/app/core/logs_model.ts
  2. 0 21
      public/app/features/explore/Logs.tsx

+ 32 - 17
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],
+      };
 
-    const levelSeries = seriesByLevel[row.logLevel];
+      seriesList.push(series);
+    }
 
-    // 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;
     }
-  }
 
-  return Object.keys(seriesByLevel).reduce((acc, level) => {
-    if (seriesByLevel[level]) {
-      const gs = new TimeSeries(seriesByLevel[level]);
-      gs.setColor(LogLevelColor[level]);
-      acc.push(gs);
+    // 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 acc;
-  }, []);
+  }
+
+  return seriesList.map(series => {
+    series.datapoints.sort((a, b) => {
+      return a[1] - b[1];
+    });
+
+    return new TimeSeries(series);
+  });
 }

+ 0 - 21
public/app/features/explore/Logs.tsx

@@ -393,27 +393,6 @@ export default class Logs extends PureComponent<LogsProps, LogsState> {
       }
     }
 
-    // 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 (