diff --git a/pkg/zabbix/methods.go b/pkg/zabbix/methods.go index 524b581..0b7a236 100644 --- a/pkg/zabbix/methods.go +++ b/pkg/zabbix/methods.go @@ -557,3 +557,60 @@ func (ds *Zabbix) GetVersion(ctx context.Context) (int, error) { versionNum, err := strconv.Atoi(version) return versionNum, err } + +func (ds *Zabbix) GetTriggers(ctx context.Context, groupFilter string, hostFilter string) ([]Trigger, error) { + hosts, err := ds.GetHosts(ctx, groupFilter, hostFilter) + if err != nil { + return nil, err + } + if len(hosts) == 0 { + return []Trigger{}, nil + } + + hostids := make([]string, 0) + for _, host := range hosts { + hostids = append(hostids, host.ID) + } + + params := ZabbixAPIParams{ + "output": []string{"triggerid", "description", "priority", "value"}, + "hostids": hostids, + "selectHosts": []string{"hostid", "name"}, + "selectTags": "extend", + "monitored": true, + "expandDescription": true, + } + + result, err := ds.Request(ctx, &ZabbixAPIRequest{Method: "trigger.get", Params: params}) + if err != nil { + return nil, err + } + + var triggers []Trigger + err = convertTo(result, &triggers) + return triggers, err +} + +func (ds *Zabbix) GetProblems(ctx context.Context, triggerIDs []string) ([]Problem, error) { + if len(triggerIDs) == 0 { + return []Problem{}, nil + } + + params := ZabbixAPIParams{ + "output": []string{"eventid", "objectid", "severity", "name"}, + "objectids": triggerIDs, + "source": "0", + "object": "0", + "recent": true, + "selectTags": "extend", + } + + result, err := ds.Request(ctx, &ZabbixAPIRequest{Method: "problem.get", Params: params}) + if err != nil { + return nil, err + } + + var problems []Problem + err = convertTo(result, &problems) + return problems, err +}