Fix item tag filter, #1594
This commit is contained in:
@@ -2,7 +2,6 @@ package zabbix
|
||||
|
||||
import (
|
||||
"context"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@@ -243,8 +242,15 @@ func (ds *Zabbix) GetItemTags(ctx context.Context, groupFilter string, hostFilte
|
||||
allItems, err = ds.GetAllItems(ctx, hostids, nil, itemType, showDisabled, "")
|
||||
|
||||
var allTags []ItemTag
|
||||
tagsMap := make(map[string]ItemTag)
|
||||
for _, item := range allItems {
|
||||
allTags = append(allTags, item.Tags...)
|
||||
for _, itemTag := range item.Tags {
|
||||
tagStr := itemTagToString(itemTag)
|
||||
tagsMap[tagStr] = itemTag
|
||||
}
|
||||
}
|
||||
for _, t := range tagsMap {
|
||||
allTags = append(allTags, t)
|
||||
}
|
||||
|
||||
return filterTags(allTags, tagFilter)
|
||||
@@ -376,19 +382,16 @@ func (ds *Zabbix) GetAllItems(ctx context.Context, hostids []string, appids []st
|
||||
params["selectTags"] = "extend"
|
||||
if len(itemTagFilter) > 0 {
|
||||
allTags := strings.Split(itemTagFilter, ",")
|
||||
re := regexp.MustCompile(`(?m).*?([a-zA-Z0-9\s\-_]*):\s*([a-zA-Z0-9\-_\/:]*)`)
|
||||
var tagsParams []map[string]string
|
||||
for i := 0; i < len(allTags); i++ {
|
||||
res := re.FindAllStringSubmatch(allTags[i], -1)
|
||||
for i := range res {
|
||||
tagsParams := make([]map[string]string, 0)
|
||||
for _, tagStr := range allTags {
|
||||
tag := parseItemTag(tagStr)
|
||||
tagParam := map[string]string{
|
||||
"tag": res[i][1],
|
||||
"value": res[i][2],
|
||||
"tag": tag.Tag,
|
||||
"value": tag.Value,
|
||||
"operator": "1",
|
||||
}
|
||||
tagsParams = append(tagsParams, tagParam)
|
||||
}
|
||||
}
|
||||
params["tags"] = tagsParams
|
||||
params["evaltype"] = 2
|
||||
}
|
||||
|
||||
@@ -100,3 +100,17 @@ func itemTagToString(tag ItemTag) string {
|
||||
return tag.Tag
|
||||
}
|
||||
}
|
||||
|
||||
func parseItemTag(tagStr string) ItemTag {
|
||||
tag := ItemTag{}
|
||||
firstIdx := strings.Index(tagStr, ":")
|
||||
if firstIdx > 0 {
|
||||
tag.Tag = strings.TrimSpace(tagStr[:firstIdx])
|
||||
if firstIdx < len(tagStr)-1 {
|
||||
tag.Value = strings.TrimSpace(tagStr[firstIdx+1:])
|
||||
}
|
||||
} else {
|
||||
tag.Tag = strings.TrimSpace(tagStr)
|
||||
}
|
||||
return tag
|
||||
}
|
||||
|
||||
@@ -433,10 +433,12 @@ export function parseTags(tagStr: string): any[] {
|
||||
// Parses string representation of tag into the object
|
||||
export function parseItemTag(tagStr: string): ZBXItemTag {
|
||||
const itemTag: ZBXItemTag = { tag: '', value: '' };
|
||||
const tagParts = tagStr.split(': ');
|
||||
itemTag.tag = tagParts[0];
|
||||
if (tagParts[1]) {
|
||||
itemTag.value = tagParts[1];
|
||||
const firstIdx = tagStr.indexOf(':');
|
||||
if (firstIdx > 0) {
|
||||
itemTag.tag = tagStr.slice(0, firstIdx).trim();
|
||||
itemTag.value = tagStr.slice(Math.min(firstIdx + 1, tagStr.length)).trim();
|
||||
} else {
|
||||
itemTag.tag = tagStr.trim();
|
||||
}
|
||||
return itemTag;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import { ShowProblemTypes, ZBXProblem, ZBXTrigger } from '../../../types';
|
||||
import { APIExecuteScriptResponse, JSONRPCError, ZBXScript } from './types';
|
||||
import { BackendSrvRequest, getBackendSrv } from '@grafana/runtime';
|
||||
import { rangeUtil } from '@grafana/data';
|
||||
import { parseItemTag } from '../../../utils';
|
||||
|
||||
const DEFAULT_ZABBIX_VERSION = '3.0.0';
|
||||
|
||||
@@ -206,10 +207,9 @@ export class ZabbixAPIConnector {
|
||||
if (itemTagFilter) {
|
||||
const allTags = itemTagFilter.split(',');
|
||||
let tagsParam = [];
|
||||
const regex = /.*?([a-zA-Z0-9\s\-_]*):\s*([a-zA-Z0-9\-_\/:]*)/;
|
||||
for (let i = 0; i < allTags.length; i++) {
|
||||
const matches = allTags[i].match(regex);
|
||||
tagsParam.push({ tag: matches[1].replace('/', ''), value: matches[2].trim(), operator: '1' });
|
||||
const tag = parseItemTag(allTags[i]);
|
||||
tagsParam.push({ tag: tag.tag, value: tag.value, operator: '1' });
|
||||
}
|
||||
params.tags = tagsParam;
|
||||
// Use OR eval type
|
||||
|
||||
Reference in New Issue
Block a user