templating: fix queries contained regex with braces, fixes #432
This commit is contained in:
50
dist/datasource-zabbix/specs/utils_specs.js
vendored
50
dist/datasource-zabbix/specs/utils_specs.js
vendored
@@ -88,4 +88,54 @@ describe('Utils', () => {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('splitTemplateQuery()', () => {
|
||||||
|
|
||||||
|
// Backward compatibility
|
||||||
|
it('should properly split query in old format', (done) => {
|
||||||
|
let test_cases = [
|
||||||
|
{
|
||||||
|
query: `/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/`,
|
||||||
|
expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
query: `a.b.c.d`,
|
||||||
|
expected: ['a', 'b', 'c', 'd']
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(test_cases, test_case => {
|
||||||
|
let splitQuery = utils.splitTemplateQuery(test_case.query);
|
||||||
|
expect(splitQuery).to.eql(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly split query', (done) => {
|
||||||
|
let test_cases = [
|
||||||
|
{
|
||||||
|
query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/}`,
|
||||||
|
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/}`,
|
||||||
|
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
query: `{a}{b}{c}{d}`,
|
||||||
|
expected: ['a', 'b', 'c', 'd']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
query: `{a}{b.c.d}`,
|
||||||
|
expected: ['a', 'b.c.d']
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(test_cases, test_case => {
|
||||||
|
let splitQuery = utils.splitTemplateQuery(test_case.query);
|
||||||
|
expect(splitQuery).to.eql(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
5
dist/datasource-zabbix/utils.js
vendored
5
dist/datasource-zabbix/utils.js
vendored
@@ -99,7 +99,7 @@ System.register(['lodash', 'moment'], function (_export, _context) {
|
|||||||
* {group}{host.com} -> [group, host.com]
|
* {group}{host.com} -> [group, host.com]
|
||||||
*/
|
*/
|
||||||
function splitTemplateQuery(query) {
|
function splitTemplateQuery(query) {
|
||||||
var splitPattern = /{[^{}]*}/g;
|
var splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g;
|
||||||
var split = void 0;
|
var split = void 0;
|
||||||
|
|
||||||
if (isContainsBraces(query)) {
|
if (isContainsBraces(query)) {
|
||||||
@@ -117,7 +117,8 @@ System.register(['lodash', 'moment'], function (_export, _context) {
|
|||||||
_export('splitTemplateQuery', splitTemplateQuery);
|
_export('splitTemplateQuery', splitTemplateQuery);
|
||||||
|
|
||||||
function isContainsBraces(query) {
|
function isContainsBraces(query) {
|
||||||
return query.includes('{') && query.includes('}');
|
var bracesPattern = /^\{.+\}$/;
|
||||||
|
return bracesPattern.test(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
// Pattern for testing regex
|
||||||
|
|||||||
2
dist/datasource-zabbix/utils.js.map
vendored
2
dist/datasource-zabbix/utils.js.map
vendored
File diff suppressed because one or more lines are too long
42
dist/test/datasource-zabbix/specs/utils_specs.js
vendored
42
dist/test/datasource-zabbix/specs/utils_specs.js
vendored
@@ -86,4 +86,46 @@ describe('Utils', function () {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('splitTemplateQuery()', function () {
|
||||||
|
|
||||||
|
// Backward compatibility
|
||||||
|
it('should properly split query in old format', function (done) {
|
||||||
|
var test_cases = [{
|
||||||
|
query: '/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9{2}/',
|
||||||
|
expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/']
|
||||||
|
}, {
|
||||||
|
query: 'a.b.c.d',
|
||||||
|
expected: ['a', 'b', 'c', 'd']
|
||||||
|
}];
|
||||||
|
|
||||||
|
_lodash2.default.each(test_cases, function (test_case) {
|
||||||
|
var splitQuery = utils.splitTemplateQuery(test_case.query);
|
||||||
|
expect(splitQuery).to.eql(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly split query', function (done) {
|
||||||
|
var test_cases = [{
|
||||||
|
query: '{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9]*/}',
|
||||||
|
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/']
|
||||||
|
}, {
|
||||||
|
query: '{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9]{2}/}',
|
||||||
|
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/']
|
||||||
|
}, {
|
||||||
|
query: '{a}{b}{c}{d}',
|
||||||
|
expected: ['a', 'b', 'c', 'd']
|
||||||
|
}, {
|
||||||
|
query: '{a}{b.c.d}',
|
||||||
|
expected: ['a', 'b.c.d']
|
||||||
|
}];
|
||||||
|
|
||||||
|
_lodash2.default.each(test_cases, function (test_case) {
|
||||||
|
var splitQuery = utils.splitTemplateQuery(test_case.query);
|
||||||
|
expect(splitQuery).to.eql(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
5
dist/test/datasource-zabbix/utils.js
vendored
5
dist/test/datasource-zabbix/utils.js
vendored
@@ -120,7 +120,7 @@ function escapeMacro(macro) {
|
|||||||
* {group}{host.com} -> [group, host.com]
|
* {group}{host.com} -> [group, host.com]
|
||||||
*/
|
*/
|
||||||
function splitTemplateQuery(query) {
|
function splitTemplateQuery(query) {
|
||||||
var splitPattern = /{[^{}]*}/g;
|
var splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g;
|
||||||
var split = void 0;
|
var split = void 0;
|
||||||
|
|
||||||
if (isContainsBraces(query)) {
|
if (isContainsBraces(query)) {
|
||||||
@@ -136,7 +136,8 @@ function splitTemplateQuery(query) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function isContainsBraces(query) {
|
function isContainsBraces(query) {
|
||||||
return query.includes('{') && query.includes('}');
|
var bracesPattern = /^\{.+\}$/;
|
||||||
|
return bracesPattern.test(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
// Pattern for testing regex
|
||||||
|
|||||||
@@ -88,4 +88,54 @@ describe('Utils', () => {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('splitTemplateQuery()', () => {
|
||||||
|
|
||||||
|
// Backward compatibility
|
||||||
|
it('should properly split query in old format', (done) => {
|
||||||
|
let test_cases = [
|
||||||
|
{
|
||||||
|
query: `/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/`,
|
||||||
|
expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
query: `a.b.c.d`,
|
||||||
|
expected: ['a', 'b', 'c', 'd']
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(test_cases, test_case => {
|
||||||
|
let splitQuery = utils.splitTemplateQuery(test_case.query);
|
||||||
|
expect(splitQuery).to.eql(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly split query', (done) => {
|
||||||
|
let test_cases = [
|
||||||
|
{
|
||||||
|
query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/}`,
|
||||||
|
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/}`,
|
||||||
|
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
query: `{a}{b}{c}{d}`,
|
||||||
|
expected: ['a', 'b', 'c', 'd']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
query: `{a}{b.c.d}`,
|
||||||
|
expected: ['a', 'b.c.d']
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(test_cases, test_case => {
|
||||||
|
let splitQuery = utils.splitTemplateQuery(test_case.query);
|
||||||
|
expect(splitQuery).to.eql(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ function escapeMacro(macro) {
|
|||||||
* {group}{host.com} -> [group, host.com]
|
* {group}{host.com} -> [group, host.com]
|
||||||
*/
|
*/
|
||||||
export function splitTemplateQuery(query) {
|
export function splitTemplateQuery(query) {
|
||||||
let splitPattern = /{[^{}]*}/g;
|
let splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g;
|
||||||
let split;
|
let split;
|
||||||
|
|
||||||
if (isContainsBraces(query)) {
|
if (isContainsBraces(query)) {
|
||||||
@@ -109,7 +109,8 @@ export function splitTemplateQuery(query) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function isContainsBraces(query) {
|
function isContainsBraces(query) {
|
||||||
return query.includes('{') && query.includes('}');
|
let bracesPattern = /^\{.+\}$/;
|
||||||
|
return bracesPattern.test(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
// Pattern for testing regex
|
||||||
|
|||||||
Reference in New Issue
Block a user