diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e427f63198..4e12da99428 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,10 +3,12 @@ vNext - Allow special characters in serie names (influxdb datasource), PR #390 - thx @majst01 - Refactoring of filterSrv (Issue #428), thx @Tetha - New config for playlist feature. Set playlist_timespan to set default playlist interval (Issue #445) - thx @rmca +- New graphite function definition added isNonNull (PR #461), - thx @tmonk42 - New InfluxDB function difference add to function dropdown (PR #455) - Added parameter to keepLastValue graphite function definition (default 100), Closes #459 - improved asset (css/js) build pipeline, added revision to css and js. Will remove issues related to the browser cache when upgrading grafana and improve load performance (Fixes #418) +- Partial support for url encoded metrics when using Graphite datasource (PR #327) - thx @axe-felix # Fixes - Filter option loading when having muliple nested filters now works better. @@ -14,6 +16,8 @@ vNext After an option is changed and a nested template param is also reloaded, if the current value exists after the options are reloaded the current selected value is kept (Closes #447, Closes #412) - Legend Current value did not display when value was zero, Fixes #460 +- Fix to series toggling bug that caused annotations to be hidden when toggling (hiding) series. Fixes #328 +- Fix for graphite function selection menu that some times draws outside screen. It now displays upward (Fixes #293) # 1.5.4 (2014-05-13) ### New features and improvements diff --git a/src/app/directives/addGraphiteFunc.js b/src/app/directives/addGraphiteFunc.js index 6ea24a18cfe..f5801bb3106 100644 --- a/src/app/directives/addGraphiteFunc.js +++ b/src/app/directives/addGraphiteFunc.js @@ -18,7 +18,7 @@ function (angular, app, _, $, gfunc) { var buttonTemplate = ''; + ' data-placement="top">'; return { link: function($scope, elem) { diff --git a/src/app/directives/bootstrap-tagsinput.js b/src/app/directives/bootstrap-tagsinput.js index 5012fa03212..95dc78a6bf7 100644 --- a/src/app/directives/bootstrap-tagsinput.js +++ b/src/app/directives/bootstrap-tagsinput.js @@ -87,13 +87,12 @@ function (angular, $) { .module('kibana.directives') .directive('gfDropdown', function ($parse, $compile, $timeout) { - function buildTemplate(items, ul) { - if (!ul) { - ul = [ - '' - ]; - } + function buildTemplate(items, placement) { + var upclass = placement === 'top' ? 'dropup' : ''; + var ul = [ + '' + ]; angular.forEach(items, function (item, index) { if (item.divider) { @@ -122,10 +121,12 @@ function (angular, $) { link: function postLink(scope, iElement, iAttrs) { var getter = $parse(iAttrs.gfDropdown), items = getter(scope); $timeout(function () { - var dropdown = angular.element(buildTemplate(items).join('')); + var placement = iElement.data('placement'); + var dropdown = angular.element(buildTemplate(items, placement).join('')); dropdown.insertAfter(iElement); $compile(iElement.next('ul.dropdown-menu'))(scope); }); + iElement.addClass('dropdown-toggle').attr('data-toggle', 'dropdown'); } }; diff --git a/src/app/directives/grafanaGraph.js b/src/app/directives/grafanaGraph.js old mode 100644 new mode 100755 index 798584ca194..b27ed32d352 --- a/src/app/directives/grafanaGraph.js +++ b/src/app/directives/grafanaGraph.js @@ -15,7 +15,7 @@ function (angular, $, kbn, moment, _) { restrict: 'A', template: '
', link: function(scope, elem) { - var data, plot; + var data, plot, annotations; var hiddenData = {}; scope.$on('refresh',function() { @@ -35,8 +35,9 @@ function (angular, $, kbn, moment, _) { }); // Receive render events - scope.$on('render',function(event, d) { - data = d || data; + scope.$on('render',function(event, renderData) { + data = renderData || data; + annotations = data.annotations; render_panel(); }); @@ -206,13 +207,13 @@ function (angular, $, kbn, moment, _) { } function addAnnotations(options) { - if(!data.annotations || data.annotations.length === 0) { + if(!annotations || annotations.length === 0) { return; } var types = {}; - _.each(data.annotations, function(event) { + _.each(annotations, function(event) { if (!types[event.annotation.name]) { types[event.annotation.name] = { level: _.keys(types).length + 1, @@ -235,7 +236,7 @@ function (angular, $, kbn, moment, _) { options.events = { levels: _.keys(types).length + 1, - data: data.annotations, + data: annotations, types: types }; } @@ -313,7 +314,7 @@ function (angular, $, kbn, moment, _) { if (seriesInfo.alias) { group = '' + '' + ' ' + - (seriesInfo.alias || seriesInfo.query)+ + (decodeURIComponent(seriesInfo.alias)) + '
'; } else { group = kbn.query_color_dot(item.series.color, 15) + ' '; diff --git a/src/app/filters/all.js b/src/app/filters/all.js old mode 100644 new mode 100755 index e4ffe7088c8..0a6dd12b816 --- a/src/app/filters/all.js +++ b/src/app/filters/all.js @@ -114,4 +114,10 @@ define(['angular', 'jquery', 'underscore', 'moment'], function (angular, $, _, m }; }); + module.filter('urlDecode', function() { + return function(input) { + return decodeURIComponent(input); + }; + }); + }); \ No newline at end of file diff --git a/src/app/panels/filtering/module.html b/src/app/panels/filtering/module.html old mode 100644 new mode 100755 index 96b5751ce7d..3c95fbd3751 --- a/src/app/panels/filtering/module.html +++ b/src/app/panels/filtering/module.html @@ -17,7 +17,7 @@ diff --git a/src/app/panels/graphite/legend.html b/src/app/panels/graphite/legend.html old mode 100644 new mode 100755 index 84aab5020f6..45eca738848 --- a/src/app/panels/graphite/legend.html +++ b/src/app/panels/graphite/legend.html @@ -9,7 +9,7 @@ - {{series.alias}} + {{series.alias | urlDecode}} diff --git a/src/app/partials/graphite/editor.html b/src/app/partials/graphite/editor.html old mode 100644 new mode 100755 diff --git a/src/app/services/graphite/gfunc.js b/src/app/services/graphite/gfunc.js index e2d7b072e6d..748f6085a7b 100644 --- a/src/app/services/graphite/gfunc.js +++ b/src/app/services/graphite/gfunc.js @@ -69,6 +69,11 @@ function (_) { category: categories.Combine, }); + addFuncDef({ + name: 'isNonNull', + category: categories.Combine, + }); + addFuncDef({ name: 'rangeOfSeries', category: categories.Combine diff --git a/src/app/services/graphite/graphiteDatasource.js b/src/app/services/graphite/graphiteDatasource.js index 78984a55cf7..6d2c76f9af4 100644 --- a/src/app/services/graphite/graphiteDatasource.js +++ b/src/app/services/graphite/graphiteDatasource.js @@ -118,7 +118,7 @@ function (angular, _, $, config, kbn, moment) { GraphiteDatasource.prototype.metricFindQuery = function(filterSrv, query) { var interpolated; try { - interpolated = filterSrv.applyTemplateToTarget(query); + interpolated = encodeURIComponent(filterSrv.applyTemplateToTarget(query)); } catch(err) { return $q.reject(err); diff --git a/src/app/services/graphite/lexer.js b/src/app/services/graphite/lexer.js index 91cd2237bfe..3cc3a1a2774 100644 --- a/src/app/services/graphite/lexer.js +++ b/src/app/services/graphite/lexer.js @@ -124,6 +124,7 @@ define([ i === 45 || // - i === 42 || // * i === 58 || // : + i === 37 || // % i >= 97 && i <= 122; // a-z }