referit changes
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
)
|
||||
@@ -567,10 +568,15 @@ func (ds *Zabbix) GetVersion(ctx context.Context) (int, error) {
|
||||
}
|
||||
|
||||
func (ds *Zabbix) GetTriggers(ctx context.Context, groupFilter string, hostFilter string) ([]Trigger, error) {
|
||||
ds.logger.Info("GetTriggers called", "groupFilter", groupFilter, "hostFilter", hostFilter)
|
||||
|
||||
hosts, err := ds.GetHosts(ctx, groupFilter, hostFilter)
|
||||
if err != nil {
|
||||
ds.logger.Error("GetHosts failed", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
ds.logger.Info("GetHosts returned", "count", len(hosts))
|
||||
|
||||
if len(hosts) == 0 {
|
||||
return []Trigger{}, nil
|
||||
}
|
||||
@@ -580,23 +586,71 @@ func (ds *Zabbix) GetTriggers(ctx context.Context, groupFilter string, hostFilte
|
||||
hostids = append(hostids, host.ID)
|
||||
}
|
||||
|
||||
params := ZabbixAPIParams{
|
||||
// Get triggers currently in PROBLEM state (always include these)
|
||||
problemParams := ZabbixAPIParams{
|
||||
"output": []string{"triggerid", "description", "priority", "value"},
|
||||
"hostids": hostids,
|
||||
"selectHosts": []string{"hostid", "name"},
|
||||
"selectTags": "extend",
|
||||
"monitored": true,
|
||||
"expandDescription": true,
|
||||
"skipDependent": true, // Only show root cause triggers, not dependent ones
|
||||
"filter": map[string]interface{}{
|
||||
"value": "1",
|
||||
},
|
||||
}
|
||||
|
||||
result, err := ds.Request(ctx, &ZabbixAPIRequest{Method: "trigger.get", Params: params})
|
||||
problemResult, err := ds.Request(ctx, &ZabbixAPIRequest{Method: "trigger.get", Params: problemParams})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var triggers []Trigger
|
||||
err = convertTo(result, &triggers)
|
||||
return triggers, err
|
||||
var problemTriggers []Trigger
|
||||
err = convertTo(problemResult, &problemTriggers)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Get triggers that changed state in the last 24 hours (for alert resolution)
|
||||
oneDayAgo := time.Now().Add(-24 * time.Hour).Unix()
|
||||
recentParams := ZabbixAPIParams{
|
||||
"output": []string{"triggerid", "description", "priority", "value"},
|
||||
"hostids": hostids,
|
||||
"selectHosts": []string{"hostid", "name"},
|
||||
"selectTags": "extend",
|
||||
"monitored": true,
|
||||
"expandDescription": true,
|
||||
"skipDependent": true, // Only show root cause triggers, not dependent ones
|
||||
"lastChangeSince": oneDayAgo,
|
||||
}
|
||||
|
||||
recentResult, err := ds.Request(ctx, &ZabbixAPIRequest{Method: "trigger.get", Params: recentParams})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var recentTriggers []Trigger
|
||||
err = convertTo(recentResult, &recentTriggers)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Merge and deduplicate
|
||||
triggerMap := make(map[string]Trigger)
|
||||
for _, t := range problemTriggers {
|
||||
triggerMap[t.ID] = t
|
||||
}
|
||||
for _, t := range recentTriggers {
|
||||
triggerMap[t.ID] = t
|
||||
}
|
||||
|
||||
triggers := make([]Trigger, 0, len(triggerMap))
|
||||
for _, t := range triggerMap {
|
||||
triggers = append(triggers, t)
|
||||
}
|
||||
|
||||
ds.logger.Info("GetTriggers returning", "problemCount", len(problemTriggers), "recentCount", len(recentTriggers), "totalCount", len(triggers))
|
||||
return triggers, nil
|
||||
}
|
||||
|
||||
func (ds *Zabbix) GetProblems(ctx context.Context, triggerIDs []string) ([]Problem, error) {
|
||||
@@ -605,7 +659,7 @@ func (ds *Zabbix) GetProblems(ctx context.Context, triggerIDs []string) ([]Probl
|
||||
}
|
||||
|
||||
params := ZabbixAPIParams{
|
||||
"output": []string{"eventid", "objectid", "severity", "name"},
|
||||
"output": []string{"eventid", "objectid", "severity", "name", "opdata"},
|
||||
"objectids": triggerIDs,
|
||||
"source": "0",
|
||||
"object": "0",
|
||||
|
||||
@@ -126,5 +126,6 @@ type Problem struct {
|
||||
ObjectID string `json:"objectid"`
|
||||
Severity string `json:"severity"`
|
||||
Name string `json:"name"`
|
||||
Opdata string `json:"opdata"`
|
||||
Tags []Tag `json:"tags,omitempty"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user