Fix item name expanding when key contains commas in quoted params
This commit is contained in:
@@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
|||||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
### Fixed
|
||||||
|
- Item name expanding when key contains commas in quoted params, like my_key["a=1,b=2",c,d]
|
||||||
|
|
||||||
## [3.4.0] - 2017-05-17
|
## [3.4.0] - 2017-05-17
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
60
dist/datasource-zabbix/specs/utils_specs.js
vendored
Normal file
60
dist/datasource-zabbix/specs/utils_specs.js
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
import _ from 'lodash';
|
||||||
|
import * as utils from '../utils';
|
||||||
|
|
||||||
|
describe('Utils', () => {
|
||||||
|
|
||||||
|
describe('expandItemName()', () => {
|
||||||
|
|
||||||
|
it('should properly expand unquoted params', (done) => {
|
||||||
|
let test_cases = [
|
||||||
|
{
|
||||||
|
name: `CPU $2 time`,
|
||||||
|
key: `system.cpu.util[,user,avg1]`,
|
||||||
|
expected: "CPU user time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `CPU $2 time - $3`,
|
||||||
|
key: `system.cpu.util[,system,avg1]`,
|
||||||
|
expected: "CPU system time - avg1"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(test_cases, test_case => {
|
||||||
|
let expandedName = utils.expandItemName(test_case.name, test_case.key);
|
||||||
|
expect(expandedName).to.equal(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly expand quoted params with commas', (done) => {
|
||||||
|
let test_cases = [
|
||||||
|
{
|
||||||
|
name: `CPU $2 time`,
|
||||||
|
key: `system.cpu.util["type=user,value=avg",user]`,
|
||||||
|
expected: "CPU user time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `CPU $1 time`,
|
||||||
|
key: `system.cpu.util["type=user,value=avg","user"]`,
|
||||||
|
expected: "CPU type=user,value=avg time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `CPU $1 time $3`,
|
||||||
|
key: `system.cpu.util["type=user,value=avg",,"user"]`,
|
||||||
|
expected: "CPU type=user,value=avg time user"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `CPU $1 $2 $3`,
|
||||||
|
key: `system.cpu.util["type=user,value=avg",time,"user"]`,
|
||||||
|
expected: "CPU type=user,value=avg time user"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(test_cases, test_case => {
|
||||||
|
let expandedName = utils.expandItemName(test_case.name, test_case.key);
|
||||||
|
expect(expandedName).to.equal(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
29
dist/datasource-zabbix/utils.js
vendored
29
dist/datasource-zabbix/utils.js
vendored
@@ -16,7 +16,8 @@ System.register(['lodash', 'moment'], function (_export, _context) {
|
|||||||
|
|
||||||
// extract params from key:
|
// extract params from key:
|
||||||
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
||||||
var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(',');
|
var key_params_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']'));
|
||||||
|
var key_params = splitKeyParams(key_params_str);
|
||||||
|
|
||||||
// replace item parameters
|
// replace item parameters
|
||||||
for (var i = key_params.length; i >= 1; i--) {
|
for (var i = key_params.length; i >= 1; i--) {
|
||||||
@@ -25,10 +26,32 @@ System.register(['lodash', 'moment'], function (_export, _context) {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
|
||||||
|
|
||||||
_export('expandItemName', expandItemName);
|
_export('expandItemName', expandItemName);
|
||||||
|
|
||||||
|
function splitKeyParams(paramStr) {
|
||||||
|
var params = [];
|
||||||
|
var quoted = false;
|
||||||
|
var split_symbol = ',';
|
||||||
|
var param = '';
|
||||||
|
|
||||||
|
_.forEach(paramStr, function (symbol) {
|
||||||
|
if (symbol === '"' && !quoted) {
|
||||||
|
quoted = true;
|
||||||
|
} else if (symbol === '"' && quoted) {
|
||||||
|
quoted = false;
|
||||||
|
} else if (symbol === split_symbol && !quoted) {
|
||||||
|
params.push(param);
|
||||||
|
param = '';
|
||||||
|
} else {
|
||||||
|
param += symbol;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
params.push(param);
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pattern for testing regex
|
||||||
function isRegex(str) {
|
function isRegex(str) {
|
||||||
return regexPattern.test(str);
|
return regexPattern.test(str);
|
||||||
}
|
}
|
||||||
|
|||||||
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
63
dist/test/datasource-zabbix/specs/utils_specs.js
vendored
Normal file
63
dist/test/datasource-zabbix/specs/utils_specs.js
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _lodash = require('lodash');
|
||||||
|
|
||||||
|
var _lodash2 = _interopRequireDefault(_lodash);
|
||||||
|
|
||||||
|
var _utils = require('../utils');
|
||||||
|
|
||||||
|
var utils = _interopRequireWildcard(_utils);
|
||||||
|
|
||||||
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
describe('Utils', function () {
|
||||||
|
|
||||||
|
describe('expandItemName()', function () {
|
||||||
|
|
||||||
|
it('should properly expand unquoted params', function (done) {
|
||||||
|
var test_cases = [{
|
||||||
|
name: 'CPU $2 time',
|
||||||
|
key: 'system.cpu.util[,user,avg1]',
|
||||||
|
expected: "CPU user time"
|
||||||
|
}, {
|
||||||
|
name: 'CPU $2 time - $3',
|
||||||
|
key: 'system.cpu.util[,system,avg1]',
|
||||||
|
expected: "CPU system time - avg1"
|
||||||
|
}];
|
||||||
|
|
||||||
|
_lodash2.default.each(test_cases, function (test_case) {
|
||||||
|
var expandedName = utils.expandItemName(test_case.name, test_case.key);
|
||||||
|
expect(expandedName).to.equal(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly expand quoted params with commas', function (done) {
|
||||||
|
var test_cases = [{
|
||||||
|
name: 'CPU $2 time',
|
||||||
|
key: 'system.cpu.util["type=user,value=avg",user]',
|
||||||
|
expected: "CPU user time"
|
||||||
|
}, {
|
||||||
|
name: 'CPU $1 time',
|
||||||
|
key: 'system.cpu.util["type=user,value=avg","user"]',
|
||||||
|
expected: "CPU type=user,value=avg time"
|
||||||
|
}, {
|
||||||
|
name: 'CPU $1 time $3',
|
||||||
|
key: 'system.cpu.util["type=user,value=avg",,"user"]',
|
||||||
|
expected: "CPU type=user,value=avg time user"
|
||||||
|
}, {
|
||||||
|
name: 'CPU $1 $2 $3',
|
||||||
|
key: 'system.cpu.util["type=user,value=avg",time,"user"]',
|
||||||
|
expected: "CPU type=user,value=avg time user"
|
||||||
|
}];
|
||||||
|
|
||||||
|
_lodash2.default.each(test_cases, function (test_case) {
|
||||||
|
var expandedName = utils.expandItemName(test_case.name, test_case.key);
|
||||||
|
expect(expandedName).to.equal(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
26
dist/test/datasource-zabbix/utils.js
vendored
26
dist/test/datasource-zabbix/utils.js
vendored
@@ -36,7 +36,8 @@ function expandItemName(name, key) {
|
|||||||
|
|
||||||
// extract params from key:
|
// extract params from key:
|
||||||
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
||||||
var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(',');
|
var key_params_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']'));
|
||||||
|
var key_params = splitKeyParams(key_params_str);
|
||||||
|
|
||||||
// replace item parameters
|
// replace item parameters
|
||||||
for (var i = key_params.length; i >= 1; i--) {
|
for (var i = key_params.length; i >= 1; i--) {
|
||||||
@@ -45,6 +46,29 @@ function expandItemName(name, key) {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function splitKeyParams(paramStr) {
|
||||||
|
var params = [];
|
||||||
|
var quoted = false;
|
||||||
|
var split_symbol = ',';
|
||||||
|
var param = '';
|
||||||
|
|
||||||
|
_lodash2.default.forEach(paramStr, function (symbol) {
|
||||||
|
if (symbol === '"' && !quoted) {
|
||||||
|
quoted = true;
|
||||||
|
} else if (symbol === '"' && quoted) {
|
||||||
|
quoted = false;
|
||||||
|
} else if (symbol === split_symbol && !quoted) {
|
||||||
|
params.push(param);
|
||||||
|
param = '';
|
||||||
|
} else {
|
||||||
|
param += symbol;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
params.push(param);
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
// Pattern for testing regex
|
||||||
var regexPattern = exports.regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
var regexPattern = exports.regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
||||||
|
|
||||||
|
|||||||
60
src/datasource-zabbix/specs/utils_specs.js
Normal file
60
src/datasource-zabbix/specs/utils_specs.js
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
import _ from 'lodash';
|
||||||
|
import * as utils from '../utils';
|
||||||
|
|
||||||
|
describe('Utils', () => {
|
||||||
|
|
||||||
|
describe('expandItemName()', () => {
|
||||||
|
|
||||||
|
it('should properly expand unquoted params', (done) => {
|
||||||
|
let test_cases = [
|
||||||
|
{
|
||||||
|
name: `CPU $2 time`,
|
||||||
|
key: `system.cpu.util[,user,avg1]`,
|
||||||
|
expected: "CPU user time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `CPU $2 time - $3`,
|
||||||
|
key: `system.cpu.util[,system,avg1]`,
|
||||||
|
expected: "CPU system time - avg1"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(test_cases, test_case => {
|
||||||
|
let expandedName = utils.expandItemName(test_case.name, test_case.key);
|
||||||
|
expect(expandedName).to.equal(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should properly expand quoted params with commas', (done) => {
|
||||||
|
let test_cases = [
|
||||||
|
{
|
||||||
|
name: `CPU $2 time`,
|
||||||
|
key: `system.cpu.util["type=user,value=avg",user]`,
|
||||||
|
expected: "CPU user time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `CPU $1 time`,
|
||||||
|
key: `system.cpu.util["type=user,value=avg","user"]`,
|
||||||
|
expected: "CPU type=user,value=avg time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `CPU $1 time $3`,
|
||||||
|
key: `system.cpu.util["type=user,value=avg",,"user"]`,
|
||||||
|
expected: "CPU type=user,value=avg time user"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `CPU $1 $2 $3`,
|
||||||
|
key: `system.cpu.util["type=user,value=avg",time,"user"]`,
|
||||||
|
expected: "CPU type=user,value=avg time user"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
_.each(test_cases, test_case => {
|
||||||
|
let expandedName = utils.expandItemName(test_case.name, test_case.key);
|
||||||
|
expect(expandedName).to.equal(test_case.expected);
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -12,15 +12,39 @@ export function expandItemName(name, key) {
|
|||||||
|
|
||||||
// extract params from key:
|
// extract params from key:
|
||||||
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
// "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"]
|
||||||
var key_params = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')).split(',');
|
let key_params_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']'));
|
||||||
|
let key_params = splitKeyParams(key_params_str);
|
||||||
|
|
||||||
// replace item parameters
|
// replace item parameters
|
||||||
for (var i = key_params.length; i >= 1; i--) {
|
for (let i = key_params.length; i >= 1; i--) {
|
||||||
name = name.replace('$' + i, key_params[i - 1]);
|
name = name.replace('$' + i, key_params[i - 1]);
|
||||||
}
|
}
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function splitKeyParams(paramStr) {
|
||||||
|
let params = [];
|
||||||
|
let quoted = false;
|
||||||
|
let split_symbol = ',';
|
||||||
|
let param = '';
|
||||||
|
|
||||||
|
_.forEach(paramStr, symbol => {
|
||||||
|
if (symbol === '"' && !quoted) {
|
||||||
|
quoted = true;
|
||||||
|
} else if (symbol === '"' && quoted) {
|
||||||
|
quoted = false;
|
||||||
|
} else if (symbol === split_symbol && !quoted) {
|
||||||
|
params.push(param);
|
||||||
|
param = '';
|
||||||
|
} else {
|
||||||
|
param += symbol;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
params.push(param);
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
// Pattern for testing regex
|
||||||
export var regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
export var regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user