Allow to use names with dot in template queries, fixes #254
This commit is contained in:
2
dist/datasource-zabbix/datasource.js
vendored
2
dist/datasource-zabbix/datasource.js
vendored
@@ -483,7 +483,7 @@ System.register(['lodash', 'app/core/utils/datemath', './utils', './migrations',
|
|||||||
var parts = [];
|
var parts = [];
|
||||||
|
|
||||||
// Split query. Query structure: group.host.app.item
|
// Split query. Query structure: group.host.app.item
|
||||||
_.each(query.split('.'), function (part) {
|
_.each(utils.splitTemplateQuery(query), function (part) {
|
||||||
part = _this5.replaceTemplateVars(part, {});
|
part = _this5.replaceTemplateVars(part, {});
|
||||||
|
|
||||||
// Replace wildcard to regex
|
// Replace wildcard to regex
|
||||||
|
|||||||
2
dist/datasource-zabbix/datasource.js.map
vendored
2
dist/datasource-zabbix/datasource.js.map
vendored
File diff suppressed because one or more lines are too long
35
dist/datasource-zabbix/utils.js
vendored
35
dist/datasource-zabbix/utils.js
vendored
@@ -56,13 +56,7 @@ System.register(['lodash', 'moment'], function (_export, _context) {
|
|||||||
|
|
||||||
params.push(param);
|
params.push(param);
|
||||||
return params;
|
return params;
|
||||||
}
|
}function containsMacro(itemName) {
|
||||||
|
|
||||||
///////////
|
|
||||||
// MACRO //
|
|
||||||
///////////
|
|
||||||
|
|
||||||
function containsMacro(itemName) {
|
|
||||||
return MACRO_PATTERN.test(itemName);
|
return MACRO_PATTERN.test(itemName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,6 +93,33 @@ System.register(['lodash', 'moment'], function (_export, _context) {
|
|||||||
return macro;
|
return macro;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Split template query to parts of zabbix entities
|
||||||
|
* group.host.app.item -> [group, host, app, item]
|
||||||
|
* {group}{host.com} -> [group, host.com]
|
||||||
|
*/
|
||||||
|
function splitTemplateQuery(query) {
|
||||||
|
var splitPattern = /{[^{}]*}/g;
|
||||||
|
var split = void 0;
|
||||||
|
|
||||||
|
if (isContainsBraces(query)) {
|
||||||
|
var result = query.match(splitPattern);
|
||||||
|
split = _.map(result, function (part) {
|
||||||
|
return _.trim(part, '{}');
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
split = query.split('.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return split;
|
||||||
|
}
|
||||||
|
|
||||||
|
_export('splitTemplateQuery', splitTemplateQuery);
|
||||||
|
|
||||||
|
function isContainsBraces(query) {
|
||||||
|
return query.includes('{') && query.includes('}');
|
||||||
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
// 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
2
dist/test/datasource-zabbix/datasource.js
vendored
2
dist/test/datasource-zabbix/datasource.js
vendored
@@ -375,7 +375,7 @@ var ZabbixAPIDatasource = function () {
|
|||||||
var parts = [];
|
var parts = [];
|
||||||
|
|
||||||
// Split query. Query structure: group.host.app.item
|
// Split query. Query structure: group.host.app.item
|
||||||
_lodash2.default.each(query.split('.'), function (part) {
|
_lodash2.default.each(utils.splitTemplateQuery(query), function (part) {
|
||||||
part = _this5.replaceTemplateVars(part, {});
|
part = _this5.replaceTemplateVars(part, {});
|
||||||
|
|
||||||
// Replace wildcard to regex
|
// Replace wildcard to regex
|
||||||
|
|||||||
30
dist/test/datasource-zabbix/utils.js
vendored
30
dist/test/datasource-zabbix/utils.js
vendored
@@ -7,6 +7,7 @@ exports.regexPattern = undefined;
|
|||||||
exports.expandItemName = expandItemName;
|
exports.expandItemName = expandItemName;
|
||||||
exports.containsMacro = containsMacro;
|
exports.containsMacro = containsMacro;
|
||||||
exports.replaceMacro = replaceMacro;
|
exports.replaceMacro = replaceMacro;
|
||||||
|
exports.splitTemplateQuery = splitTemplateQuery;
|
||||||
exports.isRegex = isRegex;
|
exports.isRegex = isRegex;
|
||||||
exports.isTemplateVariable = isTemplateVariable;
|
exports.isTemplateVariable = isTemplateVariable;
|
||||||
exports.buildRegex = buildRegex;
|
exports.buildRegex = buildRegex;
|
||||||
@@ -78,10 +79,6 @@ function splitKeyParams(paramStr) {
|
|||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////
|
|
||||||
// MACRO //
|
|
||||||
///////////
|
|
||||||
|
|
||||||
var MACRO_PATTERN = /{\$[A-Z0-9_\.]+}/g;
|
var MACRO_PATTERN = /{\$[A-Z0-9_\.]+}/g;
|
||||||
|
|
||||||
function containsMacro(itemName) {
|
function containsMacro(itemName) {
|
||||||
@@ -117,6 +114,31 @@ function escapeMacro(macro) {
|
|||||||
return macro;
|
return macro;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Split template query to parts of zabbix entities
|
||||||
|
* group.host.app.item -> [group, host, app, item]
|
||||||
|
* {group}{host.com} -> [group, host.com]
|
||||||
|
*/
|
||||||
|
function splitTemplateQuery(query) {
|
||||||
|
var splitPattern = /{[^{}]*}/g;
|
||||||
|
var split = void 0;
|
||||||
|
|
||||||
|
if (isContainsBraces(query)) {
|
||||||
|
var result = query.match(splitPattern);
|
||||||
|
split = _lodash2.default.map(result, function (part) {
|
||||||
|
return _lodash2.default.trim(part, '{}');
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
split = query.split('.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return split;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isContainsBraces(query) {
|
||||||
|
return query.includes('{') && query.includes('}');
|
||||||
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
// Pattern for testing regex
|
||||||
var regexPattern = exports.regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
var regexPattern = exports.regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
||||||
|
|
||||||
|
|||||||
@@ -302,7 +302,7 @@ class ZabbixAPIDatasource {
|
|||||||
let parts = [];
|
let parts = [];
|
||||||
|
|
||||||
// Split query. Query structure: group.host.app.item
|
// Split query. Query structure: group.host.app.item
|
||||||
_.each(query.split('.'), part => {
|
_.each(utils.splitTemplateQuery(query), part => {
|
||||||
part = this.replaceTemplateVars(part, {});
|
part = this.replaceTemplateVars(part, {});
|
||||||
|
|
||||||
// Replace wildcard to regex
|
// Replace wildcard to regex
|
||||||
|
|||||||
@@ -52,10 +52,6 @@ function splitKeyParams(paramStr) {
|
|||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////
|
|
||||||
// MACRO //
|
|
||||||
///////////
|
|
||||||
|
|
||||||
const MACRO_PATTERN = /{\$[A-Z0-9_\.]+}/g;
|
const MACRO_PATTERN = /{\$[A-Z0-9_\.]+}/g;
|
||||||
|
|
||||||
export function containsMacro(itemName) {
|
export function containsMacro(itemName) {
|
||||||
@@ -91,6 +87,31 @@ function escapeMacro(macro) {
|
|||||||
return macro;
|
return macro;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Split template query to parts of zabbix entities
|
||||||
|
* group.host.app.item -> [group, host, app, item]
|
||||||
|
* {group}{host.com} -> [group, host.com]
|
||||||
|
*/
|
||||||
|
export function splitTemplateQuery(query) {
|
||||||
|
let splitPattern = /{[^{}]*}/g;
|
||||||
|
let split;
|
||||||
|
|
||||||
|
if (isContainsBraces(query)) {
|
||||||
|
let result = query.match(splitPattern);
|
||||||
|
split = _.map(result, part => {
|
||||||
|
return _.trim(part, '{}');
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
split = query.split('.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return split;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isContainsBraces(query) {
|
||||||
|
return query.includes('{') && query.includes('}');
|
||||||
|
}
|
||||||
|
|
||||||
// Pattern for testing regex
|
// Pattern for testing regex
|
||||||
export const regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
export const regexPattern = /^\/(.*)\/([gmi]*)$/m;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user