Explorar o código

Changed functions to arrow functions for only-arrow-functions rule.

Patrick O'Carroll %!s(int64=7) %!d(string=hai) anos
pai
achega
19b7ad61dd
Modificáronse 50 ficheiros con 289 adicións e 288 borrados
  1. 14 11
      public/app/core/components/grafana_app.ts
  2. 3 3
      public/app/core/components/info_popover.ts
  3. 1 1
      public/app/core/components/layout_selector/layout_selector.ts
  4. 1 1
      public/app/core/components/navbar/navbar.ts
  5. 10 10
      public/app/core/components/query_part/query_part_editor.ts
  6. 3 3
      public/app/core/components/sidemenu/sidemenu.ts
  7. 2 2
      public/app/core/controllers/inspect_ctrl.ts
  8. 1 1
      public/app/core/controllers/json_editor_ctrl.ts
  9. 1 1
      public/app/core/directives/array_join.ts
  10. 1 1
      public/app/features/annotations/annotation_tooltip.ts
  11. 2 2
      public/app/features/panellinks/link_srv.ts
  12. 3 3
      public/app/features/plugins/datasource_srv.ts
  13. 1 1
      public/app/features/plugins/plugin_loader.ts
  14. 24 24
      public/app/plugins/datasource/cloudwatch/query_parameter_ctrl.ts
  15. 18 18
      public/app/plugins/datasource/elasticsearch/bucket_agg.ts
  16. 10 10
      public/app/plugins/datasource/elasticsearch/datasource.ts
  17. 1 1
      public/app/plugins/datasource/elasticsearch/elastic_response.ts
  18. 16 16
      public/app/plugins/datasource/elasticsearch/metric_agg.ts
  19. 4 4
      public/app/plugins/datasource/elasticsearch/query_def.ts
  20. 2 2
      public/app/plugins/datasource/graphite/graphite_query.ts
  21. 1 1
      public/app/plugins/datasource/graphite/lexer.ts
  22. 2 2
      public/app/plugins/datasource/influxdb/datasource.ts
  23. 3 3
      public/app/plugins/datasource/influxdb/influx_query.ts
  24. 5 5
      public/app/plugins/datasource/influxdb/influx_series.ts
  25. 1 1
      public/app/plugins/datasource/influxdb/query_builder.ts
  26. 1 1
      public/app/plugins/datasource/influxdb/query_ctrl.ts
  27. 2 2
      public/app/plugins/datasource/influxdb/query_part.ts
  28. 2 2
      public/app/plugins/datasource/mixed/datasource.ts
  29. 1 1
      public/app/plugins/datasource/mssql/datasource.ts
  30. 1 1
      public/app/plugins/datasource/mysql/datasource.ts
  31. 39 41
      public/app/plugins/datasource/opentsdb/datasource.ts
  32. 1 1
      public/app/plugins/datasource/opentsdb/query_ctrl.ts
  33. 3 3
      public/app/plugins/datasource/prometheus/datasource.ts
  34. 13 13
      public/app/plugins/datasource/prometheus/metric_find_query.ts
  35. 1 1
      public/app/plugins/datasource/prometheus/query_ctrl.ts
  36. 5 5
      public/app/plugins/datasource/prometheus/result_transformer.ts
  37. 6 6
      public/app/plugins/panel/graph/graph.ts
  38. 11 11
      public/app/plugins/panel/graph/graph_tooltip.ts
  39. 21 21
      public/app/plugins/panel/graph/jquery.flot.events.ts
  40. 7 7
      public/app/plugins/panel/graph/legend.ts
  41. 11 11
      public/app/plugins/panel/graph/series_overrides_ctrl.ts
  42. 1 1
      public/app/plugins/panel/graph/threshold_manager.ts
  43. 1 1
      public/app/plugins/panel/graph/thresholds_form.ts
  44. 6 6
      public/app/plugins/panel/heatmap/color_legend.ts
  45. 1 1
      public/app/plugins/panel/heatmap/heatmap_tooltip.ts
  46. 1 1
      public/app/plugins/panel/heatmap/rendering.ts
  47. 8 8
      public/app/plugins/panel/singlestat/module.ts
  48. 1 1
      public/app/plugins/panel/table/column_options.ts
  49. 2 2
      public/app/plugins/panel/table/module.ts
  50. 13 13
      public/app/plugins/panel/table/transformers.ts

+ 14 - 11
public/app/core/components/grafana_app.ts

@@ -28,7 +28,7 @@ export class GrafanaCtrl {
     setBackendSrv(backendSrv);
     createStore({ backendSrv, datasourceSrv });
 
-    $scope.init = function() {
+    $scope.init = () => {
       $scope.contextSrv = contextSrv;
       $scope.appSubUrl = config.appSubUrl;
       $scope._ = _;
@@ -43,7 +43,7 @@ export class GrafanaCtrl {
 
     $rootScope.colors = colors;
 
-    $scope.initDashboard = function(dashboardData, viewScope) {
+    $scope.initDashboard = (dashboardData, viewScope) => {
       $scope.appEvent('dashboard-fetch-end', dashboardData);
       $controller('DashboardCtrl', { $scope: viewScope }).init(dashboardData);
     };
@@ -60,7 +60,7 @@ export class GrafanaCtrl {
       callerScope.$on('$destroy', unbind);
     };
 
-    $rootScope.appEvent = function(name, payload) {
+    $rootScope.appEvent = (name, payload) => {
       $rootScope.$emit(name, payload);
       appEvents.emit(name, payload);
     };
@@ -103,7 +103,7 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop
       const body = $('body');
 
       // see https://github.com/zenorocha/clipboard.js/issues/155
-      $.fn.modal.Constructor.prototype.enforceFocus = function() {};
+      $.fn.modal.Constructor.prototype.enforceFocus = () => {};
 
       $('.preloader').remove();
 
@@ -123,9 +123,12 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop
         body.toggleClass('sidemenu-hidden');
       });
 
-      scope.$watch(() => playlistSrv.isPlaying, function(newValue) {
-        elem.toggleClass('view-mode--playlist', newValue === true);
-      });
+      scope.$watch(
+        () => playlistSrv.isPlaying,
+        newValue => {
+          elem.toggleClass('view-mode--playlist', newValue === true);
+        }
+      );
 
       // check if we are in server side render
       if (document.cookie.indexOf('renderKey') !== -1) {
@@ -135,7 +138,7 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop
       // tooltip removal fix
       // manage page classes
       let pageClass;
-      scope.$on('$routeChangeSuccess', function(evt, data) {
+      scope.$on('$routeChangeSuccess', (evt, data) => {
         if (pageClass) {
           body.removeClass(pageClass);
         }
@@ -236,7 +239,7 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop
       });
 
       // handle document clicks that should hide things
-      body.click(function(evt) {
+      body.click(evt => {
         const target = $(evt.target);
         if (target.parents().length === 0) {
           return;
@@ -248,7 +251,7 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop
         if (clickAutoHide.length) {
           const clickAutoHideParent = clickAutoHide.parent();
           clickAutoHide.detach();
-          setTimeout(function() {
+          setTimeout(() => {
             clickAutoHideParent.append(clickAutoHide);
           }, 100);
         }
@@ -260,7 +263,7 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop
         // hide search
         if (body.find('.search-container').length > 0) {
           if (target.parents('.search-results-container, .search-field-wrapper').length === 0) {
-            scope.$apply(function() {
+            scope.$apply(() => {
               scope.appEvent('hide-dash-search');
             });
           }

+ 3 - 3
public/app/core/components/info_popover.ts

@@ -7,7 +7,7 @@ export function infoPopover() {
     restrict: 'E',
     template: '<i class="fa fa-info-circle"></i>',
     transclude: true,
-    link: function(scope, elem, attrs, ctrl, transclude) {
+    link: (scope, elem, attrs, ctrl, transclude) => {
       const offset = attrs.offset || '0 -10px';
       const position = attrs.position || 'right middle';
       let classes = 'drop-help drop-hide-out-of-bounds';
@@ -23,7 +23,7 @@ export function infoPopover() {
         elem.addClass('gf-form-help-icon--' + attrs.mode);
       }
 
-      transclude(function(clone, newScope) {
+      transclude((clone, newScope) => {
         const content = document.createElement('div');
         content.className = 'markdown-html';
 
@@ -54,7 +54,7 @@ export function infoPopover() {
         scope.$applyAsync(() => {
           const drop = new Drop(dropOptions);
 
-          const unbind = scope.$on('$destroy', function() {
+          const unbind = scope.$on('$destroy', () => {
             drop.destroy();
             unbind();
           });

+ 1 - 1
public/app/core/components/layout_selector/layout_selector.ts

@@ -50,7 +50,7 @@ export function layoutMode($rootScope) {
   return {
     restrict: 'A',
     scope: {},
-    link: function(scope, elem) {
+    link: (scope, elem) => {
       const layout = store.get('grafana.list.layout.mode') || 'grid';
       let className = 'card-list-layout-' + layout;
       elem.addClass(className);

+ 1 - 1
public/app/core/components/navbar/navbar.ts

@@ -30,7 +30,7 @@ export function navbarDirective() {
     scope: {
       model: '=',
     },
-    link: function(scope, elem) {},
+    link: (scope, elem) => {},
   };
 }
 

+ 10 - 10
public/app/core/components/query_part/query_part_editor.ts

@@ -89,20 +89,20 @@ export function queryPartEditorDirective($compile, templateSrv) {
           return;
         }
 
-        const typeaheadSource = function(query, callback) {
+        const typeaheadSource = (query, callback) => {
           if (param.options) {
             let options = param.options;
             if (param.type === 'int') {
-              options = _.map(options, function(val) {
+              options = _.map(options, val => {
                 return val.toString();
               });
             }
             return options;
           }
 
-          $scope.$apply(function() {
-            $scope.handleEvent({ $event: { name: 'get-param-options' } }).then(function(result) {
-              const dynamicOptions = _.map(result, function(op) {
+          $scope.$apply(() => {
+            $scope.handleEvent({ $event: { name: 'get-param-options' } }).then(result => {
+              const dynamicOptions = _.map(result, op => {
                 return op.value;
               });
               callback(dynamicOptions);
@@ -116,8 +116,8 @@ export function queryPartEditorDirective($compile, templateSrv) {
           source: typeaheadSource,
           minLength: 0,
           items: 1000,
-          updater: function(value) {
-            setTimeout(function() {
+          updater: value => {
+            setTimeout(() => {
               inputBlur.call($input[0], paramIndex);
             }, 0);
             return value;
@@ -136,18 +136,18 @@ export function queryPartEditorDirective($compile, templateSrv) {
         }
       }
 
-      $scope.showActionsMenu = function() {
+      $scope.showActionsMenu = () => {
         $scope.handleEvent({ $event: { name: 'get-part-actions' } }).then(res => {
           $scope.partActions = res;
         });
       };
 
-      $scope.triggerPartAction = function(action) {
+      $scope.triggerPartAction = action => {
         $scope.handleEvent({ $event: { name: 'action', action: action } });
       };
 
       function addElementsAndCompile() {
-        _.each(partDef.params, function(param, index) {
+        _.each(partDef.params, (param, index) => {
           if (param.optional && part.params.length <= index) {
             return;
           }

+ 3 - 3
public/app/core/components/sidemenu/sidemenu.ts

@@ -71,14 +71,14 @@ export function sideMenuDirective() {
     bindToController: true,
     controllerAs: 'ctrl',
     scope: {},
-    link: function(scope, elem) {
+    link: (scope, elem) => {
       // hack to hide dropdown menu
-      elem.on('click.dropdown', '.dropdown-menu a', function(evt) {
+      elem.on('click.dropdown', '.dropdown-menu a', evt => {
         const menu = $(evt.target).parents('.dropdown-menu');
         const parent = menu.parent();
         menu.detach();
 
-        setTimeout(function() {
+        setTimeout(() => {
           parent.append(menu);
         }, 100);
       });

+ 2 - 2
public/app/core/controllers/inspect_ctrl.ts

@@ -28,7 +28,7 @@ export class InspectCtrl {
       }
 
       if (model.error.config && model.error.config.params) {
-        $scope.request_parameters = _.map(model.error.config.params, function(value, key) {
+        $scope.request_parameters = _.map(model.error.config.params, (value, key) => {
           return { key: key, value: value };
         });
       }
@@ -45,7 +45,7 @@ export class InspectCtrl {
         if (_.isString(model.error.config.data)) {
           $scope.request_parameters = this.getParametersFromQueryString(model.error.config.data);
         } else {
-          $scope.request_parameters = _.map(model.error.config.data, function(value, key) {
+          $scope.request_parameters = _.map(model.error.config.data, (value, key) => {
             return { key: key, value: angular.toJson(value, true) };
           });
         }

+ 1 - 1
public/app/core/controllers/json_editor_ctrl.ts

@@ -8,7 +8,7 @@ export class JsonEditorCtrl {
     $scope.canUpdate = $scope.updateHandler !== void 0 && $scope.contextSrv.isEditor;
     $scope.canCopy = $scope.enableCopy;
 
-    $scope.update = function() {
+    $scope.update = () => {
       const newObject = angular.fromJson($scope.json);
       $scope.updateHandler(newObject, $scope.object);
     };

+ 1 - 1
public/app/core/directives/array_join.ts

@@ -7,7 +7,7 @@ export function arrayJoin() {
   return {
     restrict: 'A',
     require: 'ngModel',
-    link: function(scope, element, attr, ngModel) {
+    link: (scope, element, attr, ngModel) => {
       function split_array(text) {
         return (text || '').split(',');
       }

+ 1 - 1
public/app/features/annotations/annotation_tooltip.ts

@@ -20,7 +20,7 @@ export function annotationTooltipDirective($sanitize, dashboardSrv, contextSrv,
       event: '=',
       onEdit: '&',
     },
-    link: function(scope, element) {
+    link: (scope, element) => {
       const event = scope.event;
       let title = event.title;
       let text = event.text;

+ 2 - 2
public/app/features/panellinks/link_srv.ts

@@ -26,14 +26,14 @@ export class LinkSrv {
   addParamsToUrl(url, params) {
     const paramsArray = [];
 
-    _.each(params, function(value, key) {
+    _.each(params, (value, key) => {
       if (value === null) {
         return;
       }
       if (value === true) {
         paramsArray.push(key);
       } else if (_.isArray(value)) {
-        _.each(value, function(instance) {
+        _.each(value, instance => {
           paramsArray.push(key + '=' + encodeURIComponent(instance));
         });
       } else {

+ 3 - 3
public/app/features/plugins/datasource_srv.ts

@@ -77,7 +77,7 @@ export class DatasourceSrv {
 
     this.addDataSourceVariables(sources);
 
-    _.each(config.datasources, function(value) {
+    _.each(config.datasources, value => {
       if (value.meta && value.meta.annotations) {
         sources.push(value);
       }
@@ -97,7 +97,7 @@ export class DatasourceSrv {
   getMetricSources(options) {
     const metricSources = [];
 
-    _.each(config.datasources, function(value, key) {
+    _.each(config.datasources, (value, key) => {
       if (value.meta && value.meta.metrics) {
         let metricSource = { value: key, name: key, meta: value.meta, sort: key };
 
@@ -121,7 +121,7 @@ export class DatasourceSrv {
       this.addDataSourceVariables(metricSources);
     }
 
-    metricSources.sort(function(a, b) {
+    metricSources.sort((a, b) => {
       if (a.sort.toLowerCase() > b.sort.toLowerCase()) {
         return 1;
       }

+ 1 - 1
public/app/features/plugins/plugin_loader.ts

@@ -65,7 +65,7 @@ System.config({
 });
 
 function exposeToPlugin(name: string, component: any) {
-  System.registerDynamic(name, [], true, function(require, exports, module) {
+  System.registerDynamic(name, [], true, (require, exports, module) => {
     module.exports = component;
   });
 }

+ 24 - 24
public/app/plugins/datasource/cloudwatch/query_parameter_ctrl.ts

@@ -19,7 +19,7 @@ export class CloudWatchQueryParameter {
 export class CloudWatchQueryParameterCtrl {
   /** @ngInject */
   constructor($scope, templateSrv, uiSegmentSrv, datasourceSrv, $q) {
-    $scope.init = function() {
+    $scope.init = () => {
       const target = $scope.target;
       target.namespace = target.namespace || '';
       target.metricName = target.metricName || '';
@@ -38,7 +38,7 @@ export class CloudWatchQueryParameterCtrl {
 
       $scope.dimSegments = _.reduce(
         $scope.target.dimensions,
-        function(memo, value, key) {
+        (memo, value, key) => {
           memo.push(uiSegmentSrv.newKey(key));
           memo.push(uiSegmentSrv.newOperator('='));
           memo.push(uiSegmentSrv.newKeyValue(value));
@@ -47,7 +47,7 @@ export class CloudWatchQueryParameterCtrl {
         []
       );
 
-      $scope.statSegments = _.map($scope.target.statistics, function(stat) {
+      $scope.statSegments = _.map($scope.target.statistics, stat => {
         return uiSegmentSrv.getSegmentForValue(stat);
       });
 
@@ -67,15 +67,15 @@ export class CloudWatchQueryParameterCtrl {
       }
 
       if (!$scope.onChange) {
-        $scope.onChange = function() {};
+        $scope.onChange = () => {};
       }
     };
 
-    $scope.getStatSegments = function() {
+    $scope.getStatSegments = () => {
       return $q.when(
         _.flatten([
           angular.copy($scope.removeStatSegment),
-          _.map($scope.datasource.standardStatistics, function(s) {
+          _.map($scope.datasource.standardStatistics, s => {
             return uiSegmentSrv.getSegmentForValue(s);
           }),
           uiSegmentSrv.getSegmentForValue('pNN.NN'),
@@ -83,7 +83,7 @@ export class CloudWatchQueryParameterCtrl {
       );
     };
 
-    $scope.statSegmentChanged = function(segment, index) {
+    $scope.statSegmentChanged = (segment, index) => {
       if (segment.value === $scope.removeStatSegment.value) {
         $scope.statSegments.splice(index, 1);
       } else {
@@ -92,7 +92,7 @@ export class CloudWatchQueryParameterCtrl {
 
       $scope.target.statistics = _.reduce(
         $scope.statSegments,
-        function(memo, seg) {
+        (memo, seg) => {
           if (!seg.fake) {
             memo.push(seg.value);
           }
@@ -105,7 +105,7 @@ export class CloudWatchQueryParameterCtrl {
       $scope.onChange();
     };
 
-    $scope.ensurePlusButton = function(segments) {
+    $scope.ensurePlusButton = segments => {
       const count = segments.length;
       const lastSegment = segments[Math.max(count - 1, 0)];
 
@@ -114,7 +114,7 @@ export class CloudWatchQueryParameterCtrl {
       }
     };
 
-    $scope.getDimSegments = function(segment, $index) {
+    $scope.getDimSegments = (segment, $index) => {
       if (segment.type === 'operator') {
         return $q.when([]);
       }
@@ -135,7 +135,7 @@ export class CloudWatchQueryParameterCtrl {
         );
       }
 
-      return query.then($scope.transformToSegments(true)).then(function(results) {
+      return query.then($scope.transformToSegments(true)).then(results => {
         if (segment.type === 'key') {
           results.splice(0, 0, angular.copy($scope.removeDimSegment));
         }
@@ -143,7 +143,7 @@ export class CloudWatchQueryParameterCtrl {
       });
     };
 
-    $scope.dimSegmentChanged = function(segment, index) {
+    $scope.dimSegmentChanged = (segment, index) => {
       $scope.dimSegments[index] = segment;
 
       if (segment.value === $scope.removeDimSegment.value) {
@@ -160,7 +160,7 @@ export class CloudWatchQueryParameterCtrl {
       $scope.onChange();
     };
 
-    $scope.syncDimSegmentsWithModel = function() {
+    $scope.syncDimSegmentsWithModel = () => {
       const dims = {};
       const length = $scope.dimSegments.length;
 
@@ -175,44 +175,44 @@ export class CloudWatchQueryParameterCtrl {
       $scope.target.dimensions = dims;
     };
 
-    $scope.getRegions = function() {
+    $scope.getRegions = () => {
       return $scope.datasource
         .metricFindQuery('regions()')
-        .then(function(results) {
+        .then(results => {
           results.unshift({ text: 'default' });
           return results;
         })
         .then($scope.transformToSegments(true));
     };
 
-    $scope.getNamespaces = function() {
+    $scope.getNamespaces = () => {
       return $scope.datasource.metricFindQuery('namespaces()').then($scope.transformToSegments(true));
     };
 
-    $scope.getMetrics = function() {
+    $scope.getMetrics = () => {
       return $scope.datasource
         .metricFindQuery('metrics(' + $scope.target.namespace + ',' + $scope.target.region + ')')
         .then($scope.transformToSegments(true));
     };
 
-    $scope.regionChanged = function() {
+    $scope.regionChanged = () => {
       $scope.target.region = $scope.regionSegment.value;
       $scope.onChange();
     };
 
-    $scope.namespaceChanged = function() {
+    $scope.namespaceChanged = () => {
       $scope.target.namespace = $scope.namespaceSegment.value;
       $scope.onChange();
     };
 
-    $scope.metricChanged = function() {
+    $scope.metricChanged = () => {
       $scope.target.metricName = $scope.metricSegment.value;
       $scope.onChange();
     };
 
-    $scope.transformToSegments = function(addTemplateVars) {
-      return function(results) {
-        const segments = _.map(results, function(segment) {
+    $scope.transformToSegments = addTemplateVars => {
+      return results => {
+        const segments = _.map(results, segment => {
           return uiSegmentSrv.newSegment({
             value: segment.text,
             expandable: segment.expandable,
@@ -220,7 +220,7 @@ export class CloudWatchQueryParameterCtrl {
         });
 
         if (addTemplateVars) {
-          _.each(templateSrv.variables, function(variable) {
+          _.each(templateSrv.variables, variable => {
             segments.unshift(
               uiSegmentSrv.newSegment({
                 type: 'template',

+ 18 - 18
public/app/plugins/datasource/elasticsearch/bucket_agg.ts

@@ -23,36 +23,36 @@ export class ElasticBucketAggCtrl {
 
     $scope.orderByOptions = [];
 
-    $scope.getBucketAggTypes = function() {
+    $scope.getBucketAggTypes = () => {
       return queryDef.bucketAggTypes;
     };
 
-    $scope.getOrderOptions = function() {
+    $scope.getOrderOptions = () => {
       return queryDef.orderOptions;
     };
 
-    $scope.getSizeOptions = function() {
+    $scope.getSizeOptions = () => {
       return queryDef.sizeOptions;
     };
 
     $rootScope.onAppEvent(
       'elastic-query-updated',
-      function() {
+      () => {
         $scope.validateModel();
       },
       $scope
     );
 
-    $scope.init = function() {
+    $scope.init = () => {
       $scope.agg = bucketAggs[$scope.index];
       $scope.validateModel();
     };
 
-    $scope.onChangeInternal = function() {
+    $scope.onChangeInternal = () => {
       $scope.onChange();
     };
 
-    $scope.onTypeChanged = function() {
+    $scope.onTypeChanged = () => {
       $scope.agg.settings = {};
       $scope.showOptions = false;
 
@@ -79,7 +79,7 @@ export class ElasticBucketAggCtrl {
       $scope.onChange();
     };
 
-    $scope.validateModel = function() {
+    $scope.validateModel = () => {
       $scope.index = _.indexOf(bucketAggs, $scope.agg);
       $scope.isFirst = $scope.index === 0;
       $scope.bucketAggCount = bucketAggs.length;
@@ -114,7 +114,7 @@ export class ElasticBucketAggCtrl {
           settings.filters = settings.filters || [{ query: '*' }];
           settingsLinkText = _.reduce(
             settings.filters,
-            function(memo, value, index) {
+            (memo, value, index) => {
               memo += 'Q' + (index + 1) + '  = ' + value.query + ' ';
               return memo;
             },
@@ -168,23 +168,23 @@ export class ElasticBucketAggCtrl {
       return true;
     };
 
-    $scope.addFiltersQuery = function() {
+    $scope.addFiltersQuery = () => {
       $scope.agg.settings.filters.push({ query: '*' });
     };
 
-    $scope.removeFiltersQuery = function(filter) {
+    $scope.removeFiltersQuery = filter => {
       $scope.agg.settings.filters = _.without($scope.agg.settings.filters, filter);
     };
 
-    $scope.toggleOptions = function() {
+    $scope.toggleOptions = () => {
       $scope.showOptions = !$scope.showOptions;
     };
 
-    $scope.getOrderByOptions = function() {
+    $scope.getOrderByOptions = () => {
       return queryDef.getOrderByOptions($scope.target);
     };
 
-    $scope.getFieldsInternal = function() {
+    $scope.getFieldsInternal = () => {
       if ($scope.agg.type === 'date_histogram') {
         return $scope.getFields({ $fieldType: 'date' });
       } else {
@@ -192,11 +192,11 @@ export class ElasticBucketAggCtrl {
       }
     };
 
-    $scope.getIntervalOptions = function() {
+    $scope.getIntervalOptions = () => {
       return $q.when(uiSegmentSrv.transformToSegments(true, 'interval')(queryDef.intervalOptions));
     };
 
-    $scope.addBucketAgg = function() {
+    $scope.addBucketAgg = () => {
       // if last is date histogram add it before
       const lastBucket = bucketAggs[bucketAggs.length - 1];
       let addIndex = bucketAggs.length - 1;
@@ -207,7 +207,7 @@ export class ElasticBucketAggCtrl {
 
       const id = _.reduce(
         $scope.target.bucketAggs.concat($scope.target.metrics),
-        function(max, val) {
+        (max, val) => {
           return parseInt(val.id) > max ? parseInt(val.id) : max;
         },
         0
@@ -217,7 +217,7 @@ export class ElasticBucketAggCtrl {
       $scope.onChange();
     };
 
-    $scope.removeBucketAgg = function() {
+    $scope.removeBucketAgg = () => {
       bucketAggs.splice($scope.index, 1);
       $scope.onChange();
     };

+ 10 - 10
public/app/plugins/datasource/elasticsearch/datasource.ts

@@ -59,12 +59,12 @@ export class ElasticDatasource {
     const range = this.timeSrv.timeRange();
     const indexList = this.indexPattern.getIndexList(range.from.valueOf(), range.to.valueOf());
     if (_.isArray(indexList) && indexList.length) {
-      return this.request('GET', indexList[0] + url).then(function(results) {
+      return this.request('GET', indexList[0] + url).then(results => {
         results.data.$$config = results.config;
         return results.data;
       });
     } else {
-      return this.request('GET', this.indexPattern.getIndexForToday() + url).then(function(results) {
+      return this.request('GET', this.indexPattern.getIndexForToday() + url).then(results => {
         results.data.$$config = results.config;
         return results.data;
       });
@@ -73,7 +73,7 @@ export class ElasticDatasource {
 
   private post(url, data) {
     return this.request('POST', url, data)
-      .then(function(results) {
+      .then(results => {
         results.data.$$config = results.config;
         return results.data;
       })
@@ -145,7 +145,7 @@ export class ElasticDatasource {
       const list = [];
       const hits = res.responses[0].hits.hits;
 
-      const getFieldFromSource = function(source, fieldName) {
+      const getFieldFromSource = (source, fieldName) => {
         if (!fieldName) {
           return;
         }
@@ -213,7 +213,7 @@ export class ElasticDatasource {
         }
         return { status: 'success', message: 'Index OK. Time field name OK.' };
       },
-      function(err) {
+      err => {
         console.log(err);
         if (err.data && err.data.error) {
           let message = angular.toJson(err.data.error);
@@ -274,13 +274,13 @@ export class ElasticDatasource {
     payload = payload.replace(/\$timeTo/g, options.range.to.valueOf());
     payload = this.templateSrv.replace(payload, options.scopedVars);
 
-    return this.post('_msearch', payload).then(function(res) {
+    return this.post('_msearch', payload).then(res => {
       return new ElasticResponse(sentTargets, res).getTimeSeries();
     });
   }
 
   getFields(query) {
-    return this.get('/_mapping').then(function(result) {
+    return this.get('/_mapping').then(result => {
       const typeMap = {
         float: 'number',
         double: 'number',
@@ -352,7 +352,7 @@ export class ElasticDatasource {
       }
 
       // transform to array
-      return _.map(fields, function(value) {
+      return _.map(fields, value => {
         return value;
       });
     });
@@ -368,13 +368,13 @@ export class ElasticDatasource {
     esQuery = esQuery.replace(/\$timeTo/g, range.to.valueOf());
     esQuery = header + '\n' + esQuery + '\n';
 
-    return this.post('_msearch?search_type=' + searchType, esQuery).then(function(res) {
+    return this.post('_msearch?search_type=' + searchType, esQuery).then(res => {
       if (!res.responses[0].aggregations) {
         return [];
       }
 
       const buckets = res.responses[0].aggregations['1'].buckets;
-      return _.map(buckets, function(bucket) {
+      return _.map(buckets, bucket => {
         return {
           text: bucket.key_as_string || bucket.key,
           value: bucket.key,

+ 1 - 1
public/app/plugins/datasource/elasticsearch/elastic_response.ts

@@ -227,7 +227,7 @@ export class ElasticResponse {
     if (target.alias) {
       const regex = /\{\{([\s\S]+?)\}\}/g;
 
-      return target.alias.replace(regex, function(match, g1, g2) {
+      return target.alias.replace(regex, (match, g1, g2) => {
         const group = g1 || g2;
 
         if (group.indexOf('term ') === 0) {

+ 16 - 16
public/app/plugins/datasource/elasticsearch/metric_agg.ts

@@ -25,19 +25,19 @@ export class ElasticMetricAggCtrl {
     $scope.pipelineAggOptions = [];
     $scope.modelSettingsValues = {};
 
-    $scope.init = function() {
+    $scope.init = () => {
       $scope.agg = metricAggs[$scope.index];
       $scope.validateModel();
       $scope.updatePipelineAggOptions();
     };
 
-    $scope.updatePipelineAggOptions = function() {
+    $scope.updatePipelineAggOptions = () => {
       $scope.pipelineAggOptions = queryDef.getPipelineAggOptions($scope.target);
     };
 
     $rootScope.onAppEvent(
       'elastic-query-updated',
-      function() {
+      () => {
         $scope.index = _.indexOf(metricAggs, $scope.agg);
         $scope.updatePipelineAggOptions();
         $scope.validateModel();
@@ -45,7 +45,7 @@ export class ElasticMetricAggCtrl {
       $scope
     );
 
-    $scope.validateModel = function() {
+    $scope.validateModel = () => {
       $scope.isFirst = $scope.index === 0;
       $scope.isSingle = metricAggs.length === 1;
       $scope.settingsLinkText = '';
@@ -57,7 +57,7 @@ export class ElasticMetricAggCtrl {
 
         const pipelineOptions = queryDef.getPipelineOptions($scope.agg);
         if (pipelineOptions.length > 0) {
-          _.each(pipelineOptions, function(opt) {
+          _.each(pipelineOptions, opt => {
             $scope.agg.settings[opt.text] = $scope.agg.settings[opt.text] || opt.default;
           });
           $scope.settingsLinkText = 'Options';
@@ -84,7 +84,7 @@ export class ElasticMetricAggCtrl {
 
           const stats = _.reduce(
             $scope.agg.meta,
-            function(memo, val, key) {
+            (memo, val, key) => {
               if (val) {
                 const def = _.find($scope.extendedStats, { value: key });
                 memo.push(def.text);
@@ -128,16 +128,16 @@ export class ElasticMetricAggCtrl {
       }
     };
 
-    $scope.toggleOptions = function() {
+    $scope.toggleOptions = () => {
       $scope.showOptions = !$scope.showOptions;
       $scope.updatePipelineAggOptions();
     };
 
-    $scope.onChangeInternal = function() {
+    $scope.onChangeInternal = () => {
       $scope.onChange();
     };
 
-    $scope.updateMovingAvgModelSettings = function() {
+    $scope.updateMovingAvgModelSettings = () => {
       const modelSettingsKeys = [];
       const modelSettings = queryDef.getMovingAvgSettings($scope.agg.settings.model, false);
       for (let i = 0; i < modelSettings.length; i++) {
@@ -151,12 +151,12 @@ export class ElasticMetricAggCtrl {
       }
     };
 
-    $scope.onChangeClearInternal = function() {
+    $scope.onChangeClearInternal = () => {
       delete $scope.agg.settings.minimize;
       $scope.onChange();
     };
 
-    $scope.onTypeChange = function() {
+    $scope.onTypeChange = () => {
       $scope.agg.settings = {};
       $scope.agg.meta = {};
       $scope.showOptions = false;
@@ -164,19 +164,19 @@ export class ElasticMetricAggCtrl {
       $scope.onChange();
     };
 
-    $scope.getFieldsInternal = function() {
+    $scope.getFieldsInternal = () => {
       if ($scope.agg.type === 'cardinality') {
         return $scope.getFields();
       }
       return $scope.getFields({ $fieldType: 'number' });
     };
 
-    $scope.addMetricAgg = function() {
+    $scope.addMetricAgg = () => {
       const addIndex = metricAggs.length;
 
       const id = _.reduce(
         $scope.target.bucketAggs.concat($scope.target.metrics),
-        function(max, val) {
+        (max, val) => {
           return parseInt(val.id) > max ? parseInt(val.id) : max;
         },
         0
@@ -186,12 +186,12 @@ export class ElasticMetricAggCtrl {
       $scope.onChange();
     };
 
-    $scope.removeMetricAgg = function() {
+    $scope.removeMetricAgg = () => {
       metricAggs.splice($scope.index, 1);
       $scope.onChange();
     };
 
-    $scope.toggleShowMetric = function() {
+    $scope.toggleShowMetric = () => {
       $scope.agg.hide = !$scope.agg.hide;
       if (!$scope.agg.hide) {
         delete $scope.agg.hide;

+ 4 - 4
public/app/plugins/datasource/elasticsearch/query_def.ts

@@ -145,7 +145,7 @@ export const movingAvgModelSettings = {
 };
 
 export function getMetricAggTypes(esVersion) {
-  return _.filter(metricAggTypes, function(f) {
+  return _.filter(metricAggTypes, f => {
     if (f.minVersion) {
       return f.minVersion <= esVersion;
     } else {
@@ -173,7 +173,7 @@ export function isPipelineAgg(metricType) {
 
 export function getPipelineAggOptions(targets) {
   const result = [];
-  _.each(targets.metrics, function(metric) {
+  _.each(targets.metrics, metric => {
     if (!isPipelineAgg(metric.type)) {
       result.push({ text: describeMetric(metric), value: metric.id });
     }
@@ -185,7 +185,7 @@ export function getPipelineAggOptions(targets) {
 export function getMovingAvgSettings(model, filtered) {
   const filteredResult = [];
   if (filtered) {
-    _.each(movingAvgModelSettings[model], function(setting) {
+    _.each(movingAvgModelSettings[model], setting => {
       if (!setting.isCheckbox) {
         filteredResult.push(setting);
       }
@@ -197,7 +197,7 @@ export function getMovingAvgSettings(model, filtered) {
 
 export function getOrderByOptions(target) {
   const metricRefs = [];
-  _.each(target.metrics, function(metric) {
+  _.each(target.metrics, metric => {
     if (metric.type !== 'count') {
       metricRefs.push({ text: describeMetric(metric), value: metric.id });
     }

+ 2 - 2
public/app/plugins/datasource/graphite/graphite_query.ts

@@ -73,7 +73,7 @@ export default class GraphiteQuery {
 
     return _.reduce(
       arr,
-      function(result, segment) {
+      (result, segment) => {
         return result ? result + '.' + segment.value : segment.value;
       },
       ''
@@ -133,7 +133,7 @@ export default class GraphiteQuery {
   }
 
   moveAliasFuncLast() {
-    const aliasFunc = _.find(this.functions, function(func) {
+    const aliasFunc = _.find(this.functions, func => {
       return func.def.name.startsWith('alias');
     });
 

+ 1 - 1
public/app/plugins/datasource/graphite/lexer.ts

@@ -1370,7 +1370,7 @@ Lexer.prototype = {
     };
   },
 
-  isPunctuator: function(ch1) {
+  isPunctuator: ch1 => {
     switch (ch1) {
       case '.':
       case '(':

+ 2 - 2
public/app/plugins/datasource/influxdb/datasource.ts

@@ -23,7 +23,7 @@ export default class InfluxDatasource {
   /** @ngInject */
   constructor(instanceSettings, private $q, private backendSrv, private templateSrv) {
     this.type = 'influxdb';
-    this.urls = _.map(instanceSettings.url.split(','), function(url) {
+    this.urls = _.map(instanceSettings.url.split(','), url => {
       return url.trim();
     });
 
@@ -274,7 +274,7 @@ export default class InfluxDatasource {
       result => {
         return result.data;
       },
-      function(err) {
+      err => {
         if (err.status !== 0 || err.status >= 300) {
           if (err.data && err.data.error) {
             throw {

+ 3 - 3
public/app/plugins/datasource/influxdb/influx_query.ts

@@ -27,15 +27,15 @@ export default class InfluxQuery {
   }
 
   updateProjection() {
-    this.selectModels = _.map(this.target.select, function(parts: any) {
+    this.selectModels = _.map(this.target.select, (parts: any) => {
       return _.map(parts, queryPart.create);
     });
     this.groupByParts = _.map(this.target.groupBy, queryPart.create);
   }
 
   updatePersistedParts() {
-    this.target.select = _.map(this.selectModels, function(selectParts) {
-      return _.map(selectParts, function(part: any) {
+    this.target.select = _.map(this.selectModels, selectParts => {
+      return _.map(selectParts, (part: any) => {
         return { type: part.def.type, params: part.params };
       });
     });

+ 5 - 5
public/app/plugins/datasource/influxdb/influx_series.ts

@@ -22,7 +22,7 @@ export default class InfluxSeries {
 
     _.each(this.series, series => {
       const columns = series.columns.length;
-      const tags = _.map(series.tags, function(value, key) {
+      const tags = _.map(series.tags, (value, key) => {
         return key + ': ' + value;
       });
 
@@ -57,7 +57,7 @@ export default class InfluxSeries {
     const regex = /\$(\w+)|\[\[([\s\S]+?)\]\]/g;
     const segments = series.name.split('.');
 
-    return this.alias.replace(regex, function(match, g1, g2) {
+    return this.alias.replace(regex, (match, g1, g2) => {
       const group = g1 || g2;
       const segIndex = parseInt(group, 10);
 
@@ -124,10 +124,10 @@ export default class InfluxSeries {
           // Remove empty values, then split in different tags for comma separated values
           tags: _.flatten(
             tagsCol
-              .filter(function(t) {
+              .filter(t => {
                 return value[t];
               })
-              .map(function(t) {
+              .map(t => {
                 return value[t].split(',');
               })
           ),
@@ -158,7 +158,7 @@ export default class InfluxSeries {
           table.columns.push({ text: 'Time', type: 'time' });
           j++;
         }
-        _.each(_.keys(series.tags), function(key) {
+        _.each(_.keys(series.tags), key => {
           table.columns.push({ text: key });
         });
         for (; j < series.columns.length; j++) {

+ 1 - 1
public/app/plugins/datasource/influxdb/query_builder.ts

@@ -84,7 +84,7 @@ export class InfluxQueryBuilder {
     if (this.target.tags && this.target.tags.length > 0) {
       const whereConditions = _.reduce(
         this.target.tags,
-        function(memo, tag) {
+        (memo, tag) => {
           // do not add a condition for the key we want to explore for
           if (tag.key === withKey) {
             return memo;

+ 1 - 1
public/app/plugins/datasource/influxdb/query_ctrl.ts

@@ -70,7 +70,7 @@ export class InfluxQueryCtrl extends QueryCtrl {
     const categories = queryPart.getCategories();
     this.selectMenu = _.reduce(
       categories,
-      function(memo, cat, key) {
+      (memo, cat, key) => {
         const menu = {
           text: key,
           submenu: cat.map(item => {

+ 2 - 2
public/app/plugins/datasource/influxdb/query_part.ts

@@ -126,7 +126,7 @@ function addAliasStrategy(selectParts, partModel) {
 
 function addFieldStrategy(selectParts, partModel, query) {
   // copy all parts
-  const parts = _.map(selectParts, function(part: any) {
+  const parts = _.map(selectParts, (part: any) => {
     return createPart({ type: part.def.type, params: _.clone(part.params) });
   });
 
@@ -453,7 +453,7 @@ register({
 
 export default {
   create: createPart,
-  getCategories: function() {
+  getCategories: () => {
     return categories;
   },
   replaceAggregationAdd: replaceAggregationAddStrategy,

+ 2 - 2
public/app/plugins/datasource/mixed/datasource.ts

@@ -13,14 +13,14 @@ class MixedDatasource {
         return this.$q([]);
       }
 
-      return this.datasourceSrv.get(dsName).then(function(ds) {
+      return this.datasourceSrv.get(dsName).then(ds => {
         const opt = angular.copy(options);
         opt.targets = targets;
         return ds.query(opt);
       });
     });
 
-    return this.$q.all(promises).then(function(results) {
+    return this.$q.all(promises).then(results => {
       return { data: _.flatten(_.map(results, 'data')) };
     });
   }

+ 1 - 1
public/app/plugins/datasource/mssql/datasource.ts

@@ -26,7 +26,7 @@ export class MssqlDatasource {
       return value;
     }
 
-    const quotedValues = _.map(value, function(val) {
+    const quotedValues = _.map(value, val => {
       if (typeof value === 'number') {
         return value;
       }

+ 1 - 1
public/app/plugins/datasource/mysql/datasource.ts

@@ -26,7 +26,7 @@ export class MysqlDatasource {
       return value;
     }
 
-    const quotedValues = _.map(value, function(val) {
+    const quotedValues = _.map(value, val => {
       if (typeof value === 'number') {
         return value;
       }

+ 39 - 41
public/app/plugins/datasource/opentsdb/datasource.ts

@@ -56,19 +56,19 @@ export default class OpenTsDatasource {
     }
 
     const groupByTags = {};
-    _.each(queries, function(query) {
+    _.each(queries, query => {
       if (query.filters && query.filters.length > 0) {
-        _.each(query.filters, function(val) {
+        _.each(query.filters, val => {
           groupByTags[val.tagk] = true;
         });
       } else {
-        _.each(query.tags, function(val, key) {
+        _.each(query.tags, (val, key) => {
           groupByTags[key] = true;
         });
       }
     });
 
-    options.targets = _.filter(options.targets, function(query) {
+    options.targets = _.filter(options.targets, query => {
       return query.hide !== true;
     });
 
@@ -97,28 +97,26 @@ export default class OpenTsDatasource {
 
     const queries = _.compact(qs);
 
-    return this.performTimeSeriesQuery(queries, start, end).then(
-      function(results) {
-        if (results.data[0]) {
-          let annotationObject = results.data[0].annotations;
-          if (options.annotation.isGlobal) {
-            annotationObject = results.data[0].globalAnnotations;
-          }
-          if (annotationObject) {
-            _.each(annotationObject, function(annotation) {
-              const event = {
-                text: annotation.description,
-                time: Math.floor(annotation.startTime) * 1000,
-                annotation: options.annotation,
-              };
-
-              eventList.push(event);
-            });
-          }
+    return this.performTimeSeriesQuery(queries, start, end).then(results => {
+      if (results.data[0]) {
+        let annotationObject = results.data[0].annotations;
+        if (options.annotation.isGlobal) {
+          annotationObject = results.data[0].globalAnnotations;
+        }
+        if (annotationObject) {
+          _.each(annotationObject, annotation => {
+            const event = {
+              text: annotation.description,
+              time: Math.floor(annotation.startTime) * 1000,
+              annotation: options.annotation,
+            };
+
+            eventList.push(event);
+          });
         }
-        return eventList;
-      }.bind(this)
-    );
+      }
+      return eventList;
+    });
   }
 
   targetContainsTemplate(target) {
@@ -177,7 +175,7 @@ export default class OpenTsDatasource {
 
   _saveTagKeys(metricData) {
     const tagKeys = Object.keys(metricData.tags);
-    _.each(metricData.aggregateTags, function(tag) {
+    _.each(metricData.aggregateTags, tag => {
       tagKeys.push(tag);
     });
 
@@ -185,7 +183,7 @@ export default class OpenTsDatasource {
   }
 
   _performSuggestQuery(query, type) {
-    return this._get('/api/suggest', { type: type, q: query, max: 1000 }).then(function(result) {
+    return this._get('/api/suggest', { type: type, q: query, max: 1000 }).then(result => {
       return result.data;
     });
   }
@@ -195,7 +193,7 @@ export default class OpenTsDatasource {
       return this.$q.when([]);
     }
 
-    const keysArray = keys.split(',').map(function(key) {
+    const keysArray = keys.split(',').map(key => {
       return key.trim();
     });
     const key = keysArray[0];
@@ -207,10 +205,10 @@ export default class OpenTsDatasource {
 
     const m = metric + '{' + keysQuery + '}';
 
-    return this._get('/api/search/lookup', { m: m, limit: 3000 }).then(function(result) {
+    return this._get('/api/search/lookup', { m: m, limit: 3000 }).then(result => {
       result = result.data.results;
       const tagvs = [];
-      _.each(result, function(r) {
+      _.each(result, r => {
         if (tagvs.indexOf(r.tags[key]) === -1) {
           tagvs.push(r.tags[key]);
         }
@@ -224,11 +222,11 @@ export default class OpenTsDatasource {
       return this.$q.when([]);
     }
 
-    return this._get('/api/search/lookup', { m: metric, limit: 1000 }).then(function(result) {
+    return this._get('/api/search/lookup', { m: metric, limit: 1000 }).then(result => {
       result = result.data.results;
       const tagks = [];
-      _.each(result, function(r) {
-        _.each(r.tags, function(tagv, tagk) {
+      _.each(result, r => {
+        _.each(r.tags, (tagv, tagk) => {
           if (tagks.indexOf(tagk) === -1) {
             tagks.push(tagk);
           }
@@ -271,8 +269,8 @@ export default class OpenTsDatasource {
       return this.$q.reject(err);
     }
 
-    const responseTransform = function(result) {
-      return _.map(result, function(value) {
+    const responseTransform = result => {
+      return _.map(result, value => {
         return { text: value };
       });
     };
@@ -312,7 +310,7 @@ export default class OpenTsDatasource {
   }
 
   testDatasource() {
-    return this._performSuggestQuery('cpu', 'metrics').then(function() {
+    return this._performSuggestQuery('cpu', 'metrics').then(() => {
       return { status: 'success', message: 'Data source is working' };
     });
   }
@@ -322,7 +320,7 @@ export default class OpenTsDatasource {
       return this.aggregatorsPromise;
     }
 
-    this.aggregatorsPromise = this._get('/api/aggregators').then(function(result) {
+    this.aggregatorsPromise = this._get('/api/aggregators').then(result => {
       if (result.data && _.isArray(result.data)) {
         return result.data.sort();
       }
@@ -336,7 +334,7 @@ export default class OpenTsDatasource {
       return this.filterTypesPromise;
     }
 
-    this.filterTypesPromise = this._get('/api/config/filters').then(function(result) {
+    this.filterTypesPromise = this._get('/api/config/filters').then(result => {
       if (result.data) {
         return Object.keys(result.data).sort();
       }
@@ -351,7 +349,7 @@ export default class OpenTsDatasource {
 
     // TSDB returns datapoints has a hash of ts => value.
     // Can't use _.pairs(invert()) because it stringifies keys/values
-    _.each(md.dps, function(v, k) {
+    _.each(md.dps, (v, k) => {
       if (tsdbResolution === 2) {
         dps.push([v, k * 1]);
       } else {
@@ -365,7 +363,7 @@ export default class OpenTsDatasource {
   createMetricLabel(md, target, groupByTags, options) {
     if (target.alias) {
       const scopedVars = _.clone(options.scopedVars || {});
-      _.each(md.tags, function(value, key) {
+      _.each(md.tags, (value, key) => {
         scopedVars['tag_' + key] = { value: value };
       });
       return this.templateSrv.replace(target.alias, scopedVars);
@@ -375,7 +373,7 @@ export default class OpenTsDatasource {
     const tagData = [];
 
     if (!_.isEmpty(md.tags)) {
-      _.each(_.toPairs(md.tags), function(tag) {
+      _.each(_.toPairs(md.tags), tag => {
         if (_.has(groupByTags, tag[0])) {
           tagData.push(tag[0] + '=' + tag[1]);
         }

+ 1 - 1
public/app/plugins/datasource/opentsdb/query_ctrl.ts

@@ -88,7 +88,7 @@ export class OpenTsQueryCtrl extends QueryCtrl {
   }
 
   getTextValues(metricFindResult) {
-    return _.map(metricFindResult, function(value) {
+    return _.map(metricFindResult, value => {
       return value.text;
     });
   }

+ 3 - 3
public/app/plugins/datasource/prometheus/datasource.ts

@@ -526,13 +526,13 @@ export class PrometheusDatasource {
     const query = this.createQuery({ expr, interval: step }, queryOptions, start, end);
 
     const self = this;
-    return this.performTimeSeriesQuery(query, query.start, query.end).then(function(results) {
+    return this.performTimeSeriesQuery(query, query.start, query.end).then(results => {
       const eventList = [];
       tagKeys = tagKeys.split(',');
 
-      _.each(results.data.data.result, function(series) {
+      _.each(results.data.data.result, series => {
         const tags = _.chain(series.metric)
-          .filter(function(v, k) {
+          .filter((v, k) => {
             return _.includes(tagKeys, k);
           })
           .value();

+ 13 - 13
public/app/plugins/datasource/prometheus/metric_find_query.ts

@@ -46,8 +46,8 @@ export default class PrometheusMetricFindQuery {
       // return label values globally
       url = '/api/v1/label/' + label + '/values';
 
-      return this.datasource.metadataRequest(url).then(function(result) {
-        return _.map(result.data.data, function(value) {
+      return this.datasource.metadataRequest(url).then(result => {
+        return _.map(result.data.data, value => {
           return { text: value };
         });
       });
@@ -56,14 +56,14 @@ export default class PrometheusMetricFindQuery {
       const end = this.datasource.getPrometheusTime(this.range.to, true);
       url = '/api/v1/series?match[]=' + encodeURIComponent(metric) + '&start=' + start + '&end=' + end;
 
-      return this.datasource.metadataRequest(url).then(function(result) {
-        const _labels = _.map(result.data.data, function(metric) {
+      return this.datasource.metadataRequest(url).then(result => {
+        const _labels = _.map(result.data.data, metric => {
           return metric[label] || '';
-        }).filter(function(label) {
+        }).filter(label => {
           return label !== '';
         });
 
-        return _.uniq(_labels).map(function(metric) {
+        return _.uniq(_labels).map(metric => {
           return {
             text: metric,
             expandable: true,
@@ -76,13 +76,13 @@ export default class PrometheusMetricFindQuery {
   metricNameQuery(metricFilterPattern) {
     const url = '/api/v1/label/__name__/values';
 
-    return this.datasource.metadataRequest(url).then(function(result) {
+    return this.datasource.metadataRequest(url).then(result => {
       return _.chain(result.data.data)
-        .filter(function(metricName) {
+        .filter(metricName => {
           const r = new RegExp(metricFilterPattern);
           return r.test(metricName);
         })
-        .map(function(matchedMetricName) {
+        .map(matchedMetricName => {
           return {
             text: matchedMetricName,
             expandable: true,
@@ -94,13 +94,13 @@ export default class PrometheusMetricFindQuery {
 
   queryResultQuery(query) {
     const end = this.datasource.getPrometheusTime(this.range.to, true);
-    return this.datasource.performInstantQuery({ expr: query }, end).then(function(result) {
-      return _.map(result.data.data.result, function(metricData) {
+    return this.datasource.performInstantQuery({ expr: query }, end).then(result => {
+      return _.map(result.data.data.result, metricData => {
         let text = metricData.metric.__name__ || '';
         delete metricData.metric.__name__;
         text +=
           '{' +
-          _.map(metricData.metric, function(v, k) {
+          _.map(metricData.metric, (v, k) => {
             return k + '="' + v + '"';
           }).join(',') +
           '}';
@@ -120,7 +120,7 @@ export default class PrometheusMetricFindQuery {
     const url = '/api/v1/series?match[]=' + encodeURIComponent(query) + '&start=' + start + '&end=' + end;
 
     const self = this;
-    return this.datasource.metadataRequest(url).then(function(result) {
+    return this.datasource.metadataRequest(url).then(result => {
       return _.map(result.data.data, metric => {
         return {
           text: self.datasource.getOriginalMetricName(metric),

+ 1 - 1
public/app/plugins/datasource/prometheus/query_ctrl.ts

@@ -27,7 +27,7 @@ class PrometheusQueryCtrl extends QueryCtrl {
     target.format = target.format || this.getDefaultFormat();
 
     this.metric = '';
-    this.resolutions = _.map([1, 2, 3, 4, 5, 10], function(f) {
+    this.resolutions = _.map([1, 2, 3, 4, 5, 10], f => {
       return { factor: f, label: '1/' + f };
     });
 

+ 5 - 5
public/app/plugins/datasource/prometheus/result_transformer.ts

@@ -81,7 +81,7 @@ export class ResultTransformer {
     }
 
     // Collect all labels across all metrics
-    _.each(md, function(series) {
+    _.each(md, series => {
       for (const label in series.metric) {
         if (!metricLabels.hasOwnProperty(label)) {
           metricLabels[label] = 1;
@@ -92,7 +92,7 @@ export class ResultTransformer {
     // Sort metric labels, create columns for them and record their index
     const sortedLabels = _.keys(metricLabels).sort();
     table.columns.push({ text: 'Time', type: 'time' });
-    _.each(sortedLabels, function(label, labelIndex) {
+    _.each(sortedLabels, (label, labelIndex) => {
       metricLabels[label] = labelIndex + 1;
       table.columns.push({ text: label, filterable: !label.startsWith('__') });
     });
@@ -100,7 +100,7 @@ export class ResultTransformer {
     table.columns.push({ text: valueText });
 
     // Populate rows, set value to empty string when label not present.
-    _.each(md, function(series) {
+    _.each(md, series => {
       if (series.value) {
         series.values = [series.value];
       }
@@ -150,7 +150,7 @@ export class ResultTransformer {
 
   renderTemplate(aliasPattern, aliasData) {
     const aliasRegex = /\{\{\s*(.+?)\s*\}\}/g;
-    return aliasPattern.replace(aliasRegex, function(match, g1) {
+    return aliasPattern.replace(aliasRegex, (match, g1) => {
       if (aliasData[g1]) {
         return aliasData[g1];
       }
@@ -161,7 +161,7 @@ export class ResultTransformer {
   getOriginalMetricName(labelData) {
     const metricName = labelData.__name__ || '';
     delete labelData.__name__;
-    const labelPart = _.map(_.toPairs(labelData), function(label) {
+    const labelPart = _.map(_.toPairs(labelData), label => {
       return label[0] + '="' + label[1] + '"';
     }).join(',');
     return metricName + '{' + labelPart + '}';

+ 6 - 6
public/app/plugins/panel/graph/graph.ts

@@ -464,7 +464,7 @@ class GraphElement {
   }
 
   addXSeriesAxis(options) {
-    const ticks = _.map(this.data, function(series, index) {
+    const ticks = _.map(this.data, (series, index) => {
       return [index + 1, series.alias];
     });
 
@@ -533,8 +533,8 @@ class GraphElement {
   }
 
   addXTableAxis(options) {
-    let ticks = _.map(this.data, function(series, seriesIndex) {
-      return _.map(series.datapoints, function(point, pointIndex) {
+    let ticks = _.map(this.data, (series, seriesIndex) => {
+      return _.map(series.datapoints, (point, pointIndex) => {
         const tickIndex = seriesIndex * series.datapoints.length + pointIndex;
         return [tickIndex + 1, point[1]];
       });
@@ -627,10 +627,10 @@ class GraphElement {
       }
     }
 
-    axis.transform = function(v) {
+    axis.transform = v => {
       return v < Number.MIN_VALUE ? null : Math.log(v) / Math.log(axis.logBase);
     };
-    axis.inverseTransform = function(v) {
+    axis.inverseTransform = v => {
       return Math.pow(axis.logBase, v);
     };
 
@@ -701,7 +701,7 @@ class GraphElement {
   }
 
   configureAxisMode(axis, format) {
-    axis.tickFormatter = function(val, axis) {
+    axis.tickFormatter = (val, axis) => {
       if (!kbn.valueFormats[format]) {
         throw new Error(`Unit '${format}' is not supported`);
       }

+ 11 - 11
public/app/plugins/panel/graph/graph_tooltip.ts

@@ -8,11 +8,11 @@ export default function GraphTooltip(this: any, elem, dashboard, scope, getSerie
 
   const $tooltip = $('<div class="graph-tooltip">');
 
-  this.destroy = function() {
+  this.destroy = () => {
     $tooltip.remove();
   };
 
-  this.findHoverIndexFromDataPoints = function(posX, series, last) {
+  this.findHoverIndexFromDataPoints = (posX, series, last) => {
     const ps = series.datapoints.pointsize;
     const initial = last * ps;
     const len = series.datapoints.points.length;
@@ -30,7 +30,7 @@ export default function GraphTooltip(this: any, elem, dashboard, scope, getSerie
     return j / ps - 1;
   };
 
-  this.findHoverIndexFromData = function(posX, series) {
+  this.findHoverIndexFromData = (posX, series) => {
     let lower = 0;
     let upper = series.data.length - 1;
     let middle;
@@ -49,7 +49,7 @@ export default function GraphTooltip(this: any, elem, dashboard, scope, getSerie
     }
   };
 
-  this.renderAndShow = function(absoluteTime, innerHtml, pos, xMode) {
+  this.renderAndShow = (absoluteTime, innerHtml, pos, xMode) => {
     if (xMode === 'time') {
       innerHtml = '<div class="graph-tooltip-time">' + absoluteTime + '</div>' + innerHtml;
     }
@@ -147,7 +147,7 @@ export default function GraphTooltip(this: any, elem, dashboard, scope, getSerie
     return results;
   };
 
-  elem.mouseleave(function() {
+  elem.mouseleave(() => {
     if (panel.tooltip.shared) {
       const plot = elem.data().plot;
       if (plot) {
@@ -158,7 +158,7 @@ export default function GraphTooltip(this: any, elem, dashboard, scope, getSerie
     appEvents.emit('graph-hover-clear');
   });
 
-  elem.bind('plothover', function(event, pos, item) {
+  elem.bind('plothover', (event, pos, item) => {
     self.show(pos, item);
 
     // broadcast to other graph panels that we are hovering!
@@ -166,17 +166,17 @@ export default function GraphTooltip(this: any, elem, dashboard, scope, getSerie
     appEvents.emit('graph-hover', { pos: pos, panel: panel });
   });
 
-  elem.bind('plotclick', function(event, pos, item) {
+  elem.bind('plotclick', (event, pos, item) => {
     appEvents.emit('graph-click', { pos: pos, panel: panel, item: item });
   });
 
-  this.clear = function(plot) {
+  this.clear = plot => {
     $tooltip.detach();
     plot.clearCrosshair();
     plot.unhighlight();
   };
 
-  this.show = function(pos, item) {
+  this.show = (pos, item) => {
     const plot = elem.data().plot;
     const plotData = plot.getData();
     const xAxes = plot.getXAxes();
@@ -232,11 +232,11 @@ export default function GraphTooltip(this: any, elem, dashboard, scope, getSerie
       // Dynamically reorder the hovercard for the current time point if the
       // option is enabled.
       if (panel.tooltip.sort === 2) {
-        seriesHoverInfo.sort(function(a, b) {
+        seriesHoverInfo.sort((a, b) => {
           return b.value - a.value;
         });
       } else if (panel.tooltip.sort === 1) {
-        seriesHoverInfo.sort(function(a, b) {
+        seriesHoverInfo.sort((a, b) => {
           return a.value - b.value;
         });
       }

+ 21 - 21
public/app/plugins/panel/graph/jquery.flot.events.ts

@@ -12,11 +12,11 @@ export function createAnnotationToolip(element, event, plot) {
   injector.invoke([
     '$compile',
     '$rootScope',
-    function($compile, $rootScope) {
+    ($compile, $rootScope) => {
       const eventManager = plot.getOptions().events.manager;
       const tmpScope = $rootScope.$new(true);
       tmpScope.event = event;
-      tmpScope.onEdit = function() {
+      tmpScope.onEdit = () => {
         eventManager.editEvent(event);
       };
 
@@ -38,8 +38,8 @@ export function createAnnotationToolip(element, event, plot) {
 
       drop.open();
 
-      drop.on('close', function() {
-        setTimeout(function() {
+      drop.on('close', () => {
+        setTimeout(() => {
           drop.destroy();
         });
       });
@@ -65,7 +65,7 @@ export function createEditPopover(element, event, plot) {
   markerElementToAttachTo = element;
 
   // wait for element to be attached and positioned
-  setTimeout(function() {
+  setTimeout(() => {
     const injector = angular.element(document).injector();
     const content = document.createElement('div');
     content.innerHTML = '<event-editor panel-ctrl="panelCtrl" event="event" close="close()"></event-editor>';
@@ -73,13 +73,13 @@ export function createEditPopover(element, event, plot) {
     injector.invoke([
       '$compile',
       '$rootScope',
-      function($compile, $rootScope) {
+      ($compile, $rootScope) => {
         const scope = $rootScope.$new(true);
         let drop;
 
         scope.event = event;
         scope.panelCtrl = eventManager.panelCtrl;
-        scope.close = function() {
+        scope.close = () => {
           drop.close();
         };
 
@@ -100,9 +100,9 @@ export function createEditPopover(element, event, plot) {
         drop.open();
         eventManager.editorOpened();
 
-        drop.on('close', function() {
+        drop.on('close', () => {
           // need timeout here in order call drop.destroy
-          setTimeout(function() {
+          setTimeout(() => {
             eventManager.editorClosed();
             scope.$destroy();
             drop.destroy();
@@ -428,7 +428,7 @@ export class EventMarkers {
         createEditPopover(marker, event.editModel, that._plot);
       }
 
-      const mouseleave = function() {
+      const mouseleave = () => {
         that._plot.clearSelection();
       };
 
@@ -443,10 +443,10 @@ export class EventMarkers {
       function drawFunc(obj) {
         obj.show();
       },
-      function(obj) {
+      obj => {
         obj.remove();
       },
-      function(obj, position) {
+      (obj, position) => {
         obj.css({
           top: position.top,
           left: position.left,
@@ -549,7 +549,7 @@ export class EventMarkers {
       createEditPopover(region, event.editModel, that._plot);
     }
 
-    const mouseleave = function() {
+    const mouseleave = () => {
       that._plot.clearSelection();
     };
 
@@ -563,10 +563,10 @@ export class EventMarkers {
       function drawFunc(obj) {
         obj.show();
       },
-      function(obj) {
+      obj => {
         obj.remove();
       },
-      function(obj, position) {
+      (obj, position) => {
         obj.css({
           top: position.top,
           left: position.left,
@@ -601,11 +601,11 @@ export function init(this: any, plot) {
   const that = this;
   const eventMarkers = new EventMarkers(plot);
 
-  plot.getEvents = function() {
+  plot.getEvents = () => {
     return eventMarkers._events;
   };
 
-  plot.hideEvents = function() {
+  plot.hideEvents = () => {
     $.each(eventMarkers._events, (index, event) => {
       event
         .visual()
@@ -614,7 +614,7 @@ export function init(this: any, plot) {
     });
   };
 
-  plot.showEvents = function() {
+  plot.showEvents = () => {
     plot.hideEvents();
     $.each(eventMarkers._events, (index, event) => {
       event.hide();
@@ -624,20 +624,20 @@ export function init(this: any, plot) {
   };
 
   // change events on an existing plot
-  plot.setEvents = function(events) {
+  plot.setEvents = events => {
     if (eventMarkers.eventsEnabled) {
       eventMarkers.setupEvents(events);
     }
   };
 
-  plot.hooks.processOptions.push(function(plot, options) {
+  plot.hooks.processOptions.push((plot, options) => {
     // enable the plugin
     if (options.events.data != null) {
       eventMarkers.eventsEnabled = true;
     }
   });
 
-  plot.hooks.draw.push(function(plot) {
+  plot.hooks.draw.push(plot => {
     const options = plot.getOptions();
 
     if (eventMarkers.eventsEnabled) {

+ 7 - 7
public/app/plugins/panel/graph/legend.ts

@@ -5,9 +5,9 @@ import baron from 'baron';
 
 const module = angular.module('grafana.directives');
 
-module.directive('graphLegend', function(popoverSrv, $timeout) {
+module.directive('graphLegend', (popoverSrv, $timeout) => {
   return {
-    link: function(scope, elem) {
+    link: (scope, elem) => {
       let firstRender = true;
       const ctrl = scope.ctrl;
       const panel = ctrl.panel;
@@ -18,7 +18,7 @@ module.directive('graphLegend', function(popoverSrv, $timeout) {
       const legendRightDefaultWidth = 10;
       const legendElem = elem.parent();
 
-      scope.$on('$destroy', function() {
+      scope.$on('$destroy', () => {
         destroyScrollbar();
       });
 
@@ -44,7 +44,7 @@ module.directive('graphLegend', function(popoverSrv, $timeout) {
         const index = getSeriesIndexForElement(el);
         const series = seriesList[index];
 
-        $timeout(function() {
+        $timeout(() => {
           popoverSrv.show({
             element: el[0],
             position: 'bottom left',
@@ -55,10 +55,10 @@ module.directive('graphLegend', function(popoverSrv, $timeout) {
             openOn: 'hover',
             model: {
               series: series,
-              toggleAxis: function() {
+              toggleAxis: () => {
                 ctrl.toggleAxis(series);
               },
-              colorSelected: function(color) {
+              colorSelected: color => {
                 ctrl.changeSeriesColor(series, color);
               },
             },
@@ -154,7 +154,7 @@ module.directive('graphLegend', function(popoverSrv, $timeout) {
         }
 
         if (panel.legend.sort) {
-          seriesList = _.sortBy(seriesList, function(series) {
+          seriesList = _.sortBy(seriesList, series => {
             let sort = series.stats[panel.legend.sort];
             if (sort === null) {
               sort = -Infinity;

+ 11 - 11
public/app/plugins/panel/graph/series_overrides_ctrl.ts

@@ -7,13 +7,13 @@ export function SeriesOverridesCtrl($scope, $element, popoverSrv) {
   $scope.currentOverrides = [];
   $scope.override = $scope.override || {};
 
-  $scope.addOverrideOption = function(name, propertyName, values) {
+  $scope.addOverrideOption = (name, propertyName, values) => {
     const option = {
       text: name,
       propertyName: propertyName,
       index: $scope.overrideMenu.lenght,
       values: values,
-      submenu: _.map(values, function(value) {
+      submenu: _.map(values, value => {
         return { text: String(value), value: value };
       }),
     };
@@ -21,7 +21,7 @@ export function SeriesOverridesCtrl($scope, $element, popoverSrv) {
     $scope.overrideMenu.push(option);
   };
 
-  $scope.setOverride = function(item, subItem) {
+  $scope.setOverride = (item, subItem) => {
     // handle color overrides
     if (item.propertyName === 'color') {
       $scope.openColorSelector($scope.override['color']);
@@ -41,13 +41,13 @@ export function SeriesOverridesCtrl($scope, $element, popoverSrv) {
     $scope.ctrl.render();
   };
 
-  $scope.colorSelected = function(color) {
+  $scope.colorSelected = color => {
     $scope.override['color'] = color;
     $scope.updateCurrentOverrides();
     $scope.ctrl.render();
   };
 
-  $scope.openColorSelector = function(color) {
+  $scope.openColorSelector = color => {
     const fakeSeries = { color: color };
     popoverSrv.show({
       element: $element.find('.dropdown')[0],
@@ -59,27 +59,27 @@ export function SeriesOverridesCtrl($scope, $element, popoverSrv) {
         colorSelected: $scope.colorSelected,
         series: fakeSeries,
       },
-      onClose: function() {
+      onClose: () => {
         $scope.ctrl.render();
       },
     });
   };
 
-  $scope.removeOverride = function(option) {
+  $scope.removeOverride = option => {
     delete $scope.override[option.propertyName];
     $scope.updateCurrentOverrides();
     $scope.ctrl.refresh();
   };
 
-  $scope.getSeriesNames = function() {
-    return _.map($scope.ctrl.seriesList, function(series) {
+  $scope.getSeriesNames = () => {
+    return _.map($scope.ctrl.seriesList, series => {
       return series.alias;
     });
   };
 
-  $scope.updateCurrentOverrides = function() {
+  $scope.updateCurrentOverrides = () => {
     $scope.currentOverrides = [];
-    _.each($scope.overrideMenu, function(option) {
+    _.each($scope.overrideMenu, option => {
       const value = $scope.override[option.propertyName];
       if (_.isUndefined(value)) {
         return;

+ 1 - 1
public/app/plugins/panel/graph/threshold_manager.ts

@@ -61,7 +61,7 @@ export class ThresholdManager {
       handleElem.off('mouseleave', dragging);
 
       // trigger digest and render
-      panelCtrl.$scope.$apply(function() {
+      panelCtrl.$scope.$apply(() => {
         panelCtrl.render();
         panelCtrl.events.emit('threshold-changed', {
           threshold: model,

+ 1 - 1
public/app/plugins/panel/graph/thresholds_form.ts

@@ -138,7 +138,7 @@ const template = `
 </div>
 `;
 
-coreModule.directive('graphThresholdForm', function() {
+coreModule.directive('graphThresholdForm', () => {
   return {
     restrict: 'E',
     template: template,

+ 6 - 6
public/app/plugins/panel/heatmap/color_legend.ts

@@ -16,17 +16,17 @@ const LEGEND_VALUE_MARGIN = 0;
 /**
  * Color legend for heatmap editor.
  */
-module.directive('colorLegend', function() {
+module.directive('colorLegend', () => {
   return {
     restrict: 'E',
     template: '<div class="heatmap-color-legend"><svg width="16.5rem" height="24px"></svg></div>',
-    link: function(scope, elem, attrs) {
+    link: (scope, elem, attrs) => {
       const ctrl = scope.ctrl;
       const panel = scope.ctrl.panel;
 
       render();
 
-      ctrl.events.on('render', function() {
+      ctrl.events.on('render', () => {
         render();
       });
 
@@ -52,16 +52,16 @@ module.directive('colorLegend', function() {
 /**
  * Heatmap legend with scale values.
  */
-module.directive('heatmapLegend', function() {
+module.directive('heatmapLegend', () => {
   return {
     restrict: 'E',
     template: `<div class="heatmap-color-legend"><svg width="${LEGEND_WIDTH_PX}px" height="${LEGEND_HEIGHT_PX}px"></svg></div>`,
-    link: function(scope, elem, attrs) {
+    link: (scope, elem, attrs) => {
       const ctrl = scope.ctrl;
       const panel = scope.ctrl.panel;
 
       render();
-      ctrl.events.on('render', function() {
+      ctrl.events.on('render', () => {
         render();
       });
 

+ 1 - 1
public/app/plugins/panel/heatmap/heatmap_tooltip.ts

@@ -267,7 +267,7 @@ export class HeatmapTooltip {
 
   countValueFormatter(decimals, scaledDecimals = null) {
     const format = 'short';
-    return function(value) {
+    return value => {
       return kbn.valueFormats[format](value, decimals, scaledDecimals);
     };
   }

+ 1 - 1
public/app/plugins/panel/heatmap/rendering.ts

@@ -436,7 +436,7 @@ export class HeatmapRenderer {
 
   tickValueFormatter(decimals, scaledDecimals = null) {
     const format = this.panel.yAxis.format;
-    return function(value) {
+    return value => {
       try {
         return format !== 'none' ? kbn.valueFormats[format](value, decimals, scaledDecimals) : value;
       } catch (err) {

+ 8 - 8
public/app/plugins/panel/singlestat/module.ts

@@ -528,7 +528,7 @@ class SingleStatCtrl extends MetricsPanelCtrl {
             },
             value: {
               color: panel.colorValue ? getColorForValue(data, data.valueRounded) : null,
-              formatter: function() {
+              formatter: () => {
                 return getValueText();
               },
               font: {
@@ -617,7 +617,7 @@ class SingleStatCtrl extends MetricsPanelCtrl {
       data = ctrl.data;
 
       // get thresholds
-      data.thresholds = panel.thresholds.split(',').map(function(strVale) {
+      data.thresholds = panel.thresholds.split(',').map(strVale => {
         return Number(strVale.trim());
       });
       data.colorMap = panel.colors;
@@ -662,16 +662,16 @@ class SingleStatCtrl extends MetricsPanelCtrl {
       // drilldown link tooltip
       const drilldownTooltip = $('<div id="tooltip" class="">hello</div>"');
 
-      elem.mouseleave(function() {
+      elem.mouseleave(() => {
         if (panel.links.length === 0) {
           return;
         }
-        $timeout(function() {
+        $timeout(() => {
           drilldownTooltip.detach();
         });
       });
 
-      elem.click(function(evt) {
+      elem.click(evt => {
         if (!linkInfo) {
           return;
         }
@@ -688,7 +688,7 @@ class SingleStatCtrl extends MetricsPanelCtrl {
         if (linkInfo.href.indexOf('http') === 0) {
           window.location.href = linkInfo.href;
         } else {
-          $timeout(function() {
+          $timeout(() => {
             $location.url(linkInfo.href);
           });
         }
@@ -696,7 +696,7 @@ class SingleStatCtrl extends MetricsPanelCtrl {
         drilldownTooltip.detach();
       });
 
-      elem.mousemove(function(e) {
+      elem.mousemove(e => {
         if (!linkInfo) {
           return;
         }
@@ -708,7 +708,7 @@ class SingleStatCtrl extends MetricsPanelCtrl {
 
     hookupDrilldownLinkTooltip();
 
-    this.events.on('render', function() {
+    this.events.on('render', () => {
       render();
       ctrl.renderingCompleted();
     });

+ 1 - 1
public/app/plugins/panel/table/column_options.ts

@@ -48,7 +48,7 @@ export class ColumnOptionsCtrl {
       if (!this.panelCtrl.table) {
         return [];
       }
-      return _.map(this.panelCtrl.table.columns, function(col: any) {
+      return _.map(this.panelCtrl.table.columns, (col: any) => {
         return col.text;
       });
     };

+ 2 - 2
public/app/plugins/panel/table/module.ts

@@ -257,13 +257,13 @@ class TablePanelCtrl extends MetricsPanelCtrl {
     elem.on('click', '.table-panel-page-link', switchPage);
     elem.on('click', '.table-panel-filter-link', addFilterClicked);
 
-    const unbindDestroy = scope.$on('$destroy', function() {
+    const unbindDestroy = scope.$on('$destroy', () => {
       elem.off('click', '.table-panel-page-link');
       elem.off('click', '.table-panel-filter-link');
       unbindDestroy();
     });
 
-    ctrl.events.on('render', function(renderData) {
+    ctrl.events.on('render', renderData => {
       data = renderData || data;
       if (data) {
         renderPanel();

+ 13 - 13
public/app/plugins/panel/table/transformers.ts

@@ -7,10 +7,10 @@ const transformers = {};
 
 transformers['timeseries_to_rows'] = {
   description: 'Time series to rows',
-  getColumns: function() {
+  getColumns: () => {
     return [];
   },
-  transform: function(data, panel, model) {
+  transform: (data, panel, model) => {
     model.columns = [{ text: 'Time', type: 'date' }, { text: 'Metric' }, { text: 'Value' }];
 
     for (let i = 0; i < data.length; i++) {
@@ -25,10 +25,10 @@ transformers['timeseries_to_rows'] = {
 
 transformers['timeseries_to_columns'] = {
   description: 'Time series to columns',
-  getColumns: function() {
+  getColumns: () => {
     return [];
   },
-  transform: function(data, panel, model) {
+  transform: (data, panel, model) => {
     model.columns.push({ text: 'Time', type: 'date' });
 
     // group by time
@@ -67,7 +67,7 @@ transformers['timeseries_to_columns'] = {
 
 transformers['timeseries_aggregations'] = {
   description: 'Time series aggregations',
-  getColumns: function() {
+  getColumns: () => {
     return [
       { text: 'Avg', value: 'avg' },
       { text: 'Min', value: 'min' },
@@ -77,7 +77,7 @@ transformers['timeseries_aggregations'] = {
       { text: 'Count', value: 'count' },
     ];
   },
-  transform: function(data, panel, model) {
+  transform: (data, panel, model) => {
     let i, y;
     model.columns.push({ text: 'Metric' });
 
@@ -105,10 +105,10 @@ transformers['timeseries_aggregations'] = {
 
 transformers['annotations'] = {
   description: 'Annotations',
-  getColumns: function() {
+  getColumns: () => {
     return [];
   },
-  transform: function(data, panel, model) {
+  transform: (data, panel, model) => {
     model.columns.push({ text: 'Time', type: 'date' });
     model.columns.push({ text: 'Title' });
     model.columns.push({ text: 'Text' });
@@ -127,7 +127,7 @@ transformers['annotations'] = {
 
 transformers['table'] = {
   description: 'Table',
-  getColumns: function(data) {
+  getColumns: data => {
     if (!data || data.length === 0) {
       return [];
     }
@@ -154,7 +154,7 @@ transformers['table'] = {
 
     return columns;
   },
-  transform: function(data, panel, model) {
+  transform: (data, panel, model) => {
     if (!data || data.length === 0) {
       return;
     }
@@ -264,7 +264,7 @@ transformers['table'] = {
 
 transformers['json'] = {
   description: 'JSON Data',
-  getColumns: function(data) {
+  getColumns: data => {
     if (!data || data.length === 0) {
       return [];
     }
@@ -287,11 +287,11 @@ transformers['json'] = {
       }
     }
 
-    return _.map(names, function(value, key) {
+    return _.map(names, (value, key) => {
       return { text: key, value: key };
     });
   },
-  transform: function(data, panel, model) {
+  transform: (data, panel, model) => {
     let i, y, z;
 
     for (const column of panel.columns) {