Skip to content

Commit

Permalink
Fix item tag filter, #1594
Browse files Browse the repository at this point in the history
  • Loading branch information
alexanderzobnin committed Mar 23, 2023
1 parent fc1d809 commit 24285a9
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 20 deletions.
29 changes: 16 additions & 13 deletions pkg/zabbix/methods.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package zabbix

import (
"context"
"regexp"
"strconv"
"strings"

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -376,18 +382,15 @@ 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 {
tagParam := map[string]string{
"tag": res[i][1],
"value": res[i][2],
"operator": "1",
}
tagsParams = append(tagsParams, tagParam)
tagsParams := make([]map[string]string, 0)
for _, tagStr := range allTags {
tag := parseItemTag(tagStr)
tagParam := map[string]string{
"tag": tag.Tag,
"value": tag.Value,
"operator": "1",
}
tagsParams = append(tagsParams, tagParam)
}
params["tags"] = tagsParams
params["evaltype"] = 2
Expand Down
14 changes: 14 additions & 0 deletions pkg/zabbix/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
10 changes: 6 additions & 4 deletions src/datasource/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 24285a9

Please sign in to comment.