Fix filtering items by tag set with variable, closes #1283

This commit is contained in:
Alexander Zobnin
2021-09-10 16:23:55 +03:00
parent d389e00865
commit f4f346aceb

View File

@@ -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;
}
});
}
}