Przeglądaj źródła

feat(relative time override): You can now use the new relative time option in panel time override, closes #2575

Torkel Ödegaard 10 lat temu
rodzic
commit
292db86c9e

+ 37 - 23
public/app/components/kbn.js

@@ -163,6 +163,20 @@ function($, _, moment) {
     return info.sec * info.count;
   };
 
+  kbn.getRelativeTimeInfo = function(str) {
+    var info = {value: str};
+    if (str === 'today') {
+      info.text = 'Today';
+      info.from = 'today';
+      info.to = 'now';
+    } else {
+      info.text = 'Last ' + str;
+      info.from = 'now-'+str;
+      info.to = 'now';
+    }
+    return info;
+  };
+
   /* This is a simplified version of elasticsearch's date parser */
   kbn.parseDate = function(text) {
     if(_.isDate(text)) {
@@ -205,7 +219,7 @@ function($, _, moment) {
     return kbn.parseDateMath(mathString, time);
   };
 
-  kbn._timespanRegex = /^\d+[h,m,M,w,s,H,d]$/;
+  kbn._timespanRegex = /^(\d+[h,m,M,w,s,H,d])|today$/;
   kbn.isValidTimeSpan = function(str) {
     return kbn._timespanRegex.test(str);
   };
@@ -215,8 +229,8 @@ function($, _, moment) {
     for (var i = 0; i < mathString.length;) {
       var c = mathString.charAt(i++),
         type,
-        num,
-        unit;
+      num,
+      unit;
       if (c === '/') {
         type = 0;
       } else if (c === '+') {
@@ -244,8 +258,8 @@ function($, _, moment) {
       }
       unit = mathString.charAt(i++);
       switch (unit) {
-      case 'y':
-        if (type === 0) {
+        case 'y':
+          if (type === 0) {
           roundUp ? dateTime.endOf('year') : dateTime.startOf('year');
         } else if (type === 1) {
           dateTime.add(num, 'years');
@@ -253,8 +267,8 @@ function($, _, moment) {
           dateTime.subtract(num, 'years');
         }
         break;
-      case 'M':
-        if (type === 0) {
+        case 'M':
+          if (type === 0) {
           roundUp ? dateTime.endOf('month') : dateTime.startOf('month');
         } else if (type === 1) {
           dateTime.add(num, 'months');
@@ -262,8 +276,8 @@ function($, _, moment) {
           dateTime.subtract(num, 'months');
         }
         break;
-      case 'w':
-        if (type === 0) {
+        case 'w':
+          if (type === 0) {
           roundUp ? dateTime.endOf('week') : dateTime.startOf('week');
         } else if (type === 1) {
           dateTime.add(num, 'weeks');
@@ -271,8 +285,8 @@ function($, _, moment) {
           dateTime.subtract(num, 'weeks');
         }
         break;
-      case 'd':
-        if (type === 0) {
+        case 'd':
+          if (type === 0) {
           roundUp ? dateTime.endOf('day') : dateTime.startOf('day');
         } else if (type === 1) {
           dateTime.add(num, 'days');
@@ -280,9 +294,9 @@ function($, _, moment) {
           dateTime.subtract(num, 'days');
         }
         break;
-      case 'h':
-      case 'H':
-        if (type === 0) {
+        case 'h':
+          case 'H':
+          if (type === 0) {
           roundUp ? dateTime.endOf('hour') : dateTime.startOf('hour');
         } else if (type === 1) {
           dateTime.add(num, 'hours');
@@ -290,8 +304,8 @@ function($, _, moment) {
           dateTime.subtract(num,'hours');
         }
         break;
-      case 'm':
-        if (type === 0) {
+        case 'm':
+          if (type === 0) {
           roundUp ? dateTime.endOf('minute') : dateTime.startOf('minute');
         } else if (type === 1) {
           dateTime.add(num, 'minutes');
@@ -299,8 +313,8 @@ function($, _, moment) {
           dateTime.subtract(num, 'minutes');
         }
         break;
-      case 's':
-        if (type === 0) {
+        case 's':
+          if (type === 0) {
           roundUp ? dateTime.endOf('second') : dateTime.startOf('second');
         } else if (type === 1) {
           dateTime.add(num, 'seconds');
@@ -308,8 +322,8 @@ function($, _, moment) {
           dateTime.subtract(num, 'seconds');
         }
         break;
-      default:
-        return false;
+        default:
+          return false;
       }
     }
     return dateTime.toDate();
@@ -509,9 +523,9 @@ function($, _, moment) {
 
   kbn.slugifyForUrl = function(str) {
     return str
-      .toLowerCase()
-      .replace(/[^\w ]+/g,'')
-      .replace(/ +/g,'-');
+    .toLowerCase()
+    .replace(/[^\w ]+/g,'')
+    .replace(/ +/g,'-');
   };
 
   kbn.exportSeriesListToCsv = function(seriesList) {

+ 4 - 2
public/app/features/panel/panelHelper.js

@@ -69,8 +69,10 @@ function (angular, _, kbn, $) {
         }
 
         if (_.isString(scope.rangeUnparsed.from)) {
-          scope.panelMeta.timeInfo = "last " + scope.panel.timeFrom;
-          scope.rangeUnparsed.from = 'now-' + scope.panel.timeFrom;
+          var timeInfo = kbn.getRelativeTimeInfo(scope.panel.timeFrom)
+          scope.panelMeta.timeInfo = timeInfo.text;
+          scope.rangeUnparsed.from = timeInfo.from;
+          scope.rangeUnparsed.to = timeInfo.to;
           scope.range.from = kbn.parseDate(scope.rangeUnparsed.from);
         }
       }

+ 1 - 11
public/app/panels/timepicker/module.js

@@ -74,17 +74,7 @@ function (angular, app, _, moment, kbn) {
 
     $scope.loadTimeOptions = function() {
       $scope.time_options = _.map($scope.panel.time_options, function(str) {
-        var option = {value: str};
-        if (str === 'today') {
-          option.text = 'Today';
-          option.from = 'today';
-          option.to = 'now';
-        } else {
-          option.text = 'Last ' + str;
-          option.from = 'now-'+str;
-          option.to = 'now';
-        }
-        return option;
+        return kbn.getRelativeTimeInfo(str);
       });
 
       $scope.refreshMenuLeftSide = $scope.time.rangeString.length < 10;