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
}