Commit 6b25453f by Torkel Ödegaard

templating(influxdb): regex escape values when multi or all format is enabled, closes #2373

parent 06a32ce7
...@@ -223,10 +223,25 @@ function (angular, _, kbn) { ...@@ -223,10 +223,25 @@ function (angular, _, kbn) {
} }
return _.map(_.keys(options).sort(), function(key) { return _.map(_.keys(options).sort(), function(key) {
return { text: key, value: key }; var option = { text: key, value: key };
// check if values need to be regex escaped
if (self.shouldRegexEscape(variable)) {
option.value = self.regexEscape(option.value);
}
return option;
}); });
}; };
this.shouldRegexEscape = function(variable) {
return (variable.includeAll || variable.multi) && variable.allFormat.indexOf('regex') !== -1;
};
this.regexEscape = function(value) {
return value.replace(/[-[\]{}()*+!<=:?.\/\\^$|#\s,]/g, '\\$&');
};
this.addAllOption = function(variable) { this.addAllOption = function(variable) {
var allValue = ''; var allValue = '';
switch(variable.allFormat) { switch(variable.allFormat) {
...@@ -237,7 +252,9 @@ function (angular, _, kbn) { ...@@ -237,7 +252,9 @@ function (angular, _, kbn) {
allValue = '.*'; allValue = '.*';
break; break;
case 'regex values': case 'regex values':
allValue = '(' + _.pluck(variable.options, 'text').join('|') + ')'; allValue = '(' + _.map(variable.options, function(option) {
return self.regexEscape(option.text);
}).join('|') + ')';
break; break;
default: default:
allValue = '{'; allValue = '{';
......
...@@ -322,6 +322,19 @@ define([ ...@@ -322,6 +322,19 @@ define([
}); });
}); });
describeUpdateVariable('with include all regex values and values require escaping', function(scenario) {
scenario.setup(function() {
scenario.variable = { type: 'query', query: 'apps.*', name: 'test', includeAll: true, allFormat: 'regex values' };
scenario.queryResult = [{text: '/root'}, {text: '/var'}, { text: '/lib'}];
});
it('should regex escape options', function() {
expect(scenario.variable.options[0].value).to.be('(\\/lib|\\/root|\\/var)');
expect(scenario.variable.options[1].value).to.be('\\/lib');
expect(scenario.variable.options[1].text).to.be('/lib');
});
});
}); });
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment