From f4f346aceb4c14300f7b61d9b1f056c5708597c2 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 10 Sep 2021 16:23:55 +0300 Subject: [PATCH] Fix filtering items by tag set with variable, closes #1283 --- src/datasource-zabbix/zabbix/zabbix.ts | 34 ++++++++++++++++++++------ 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/datasource-zabbix/zabbix/zabbix.ts b/src/datasource-zabbix/zabbix/zabbix.ts index ec53e03..3c818ff 100644 --- a/src/datasource-zabbix/zabbix/zabbix.ts +++ b/src/datasource-zabbix/zabbix/zabbix.ts @@ -292,14 +292,7 @@ export class Zabbix implements ZabbixConnector { if (this.isZabbix54OrHigher()) { items = await this.zabbixAPI.getItems(apps.hostids, undefined, options.itemtype); if (itemTagFilter) { - items = items.filter(item => { - if (item.tags) { - const tags: ZBXItemTag[] = item.tags.map(t => utils.itemTagToString(t)); - return tags.includes(itemTagFilter); - } else { - return false; - } - }); + items = filterItemsByTag(items, itemTagFilter); } } else { if (apps.appFilterEmpty) { @@ -578,3 +571,28 @@ function getHostIds(items) { }); return _.uniq(_.flatten(hostIds)); } + +function filterItemsByTag(items: any[], itemTagFilter: string) { + if (utils.isRegex(itemTagFilter)) { + const filterPattern = utils.buildRegex(itemTagFilter); + return items.filter((item) => { + if (item.tags) { + const tags: string[] = item.tags.map(t => utils.itemTagToString(t)); + return tags.some((tag) => { + return filterPattern.test(tag); + }); + } else { + return false; + } + }); + } else { + return items.filter(item => { + if (item.tags) { + const tags: string[] = item.tags.map(t => utils.itemTagToString(t)); + return tags.includes(itemTagFilter); + } else { + return false; + } + }); + } +}