-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmonitors.go
More file actions
63 lines (52 loc) · 1.83 KB
/
monitors.go
File metadata and controls
63 lines (52 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package flashduty
import (
"context"
"fmt"
"net/http"
)
// QueryMonitorRuleStatusInput contains parameters for querying monitor rule status
type QueryMonitorRuleStatusInput struct {
// Deprecated: /monit/rule/counter/status does not currently accept request filters.
TeamID int64
}
// MonitorRuleFolderStatus contains monitor rule counts for a single folder family.
type MonitorRuleFolderStatus struct {
FolderID int64 `json:"folder_id"`
FolderName string `json:"folder_name,omitempty"`
RuleTotal int64 `json:"rule_total"`
TriggeredRuleCount int64 `json:"triggered_rule_count"`
}
// QueryMonitorRuleStatusOutput contains monitor rule status summaries.
type QueryMonitorRuleStatusOutput struct {
Statuses []MonitorRuleFolderStatus `json:"statuses"`
}
// QueryMonitorRuleStatus queries monitor rule status counts grouped by folder family.
func (c *Client) QueryMonitorRuleStatus(ctx context.Context, input *QueryMonitorRuleStatusInput) (*QueryMonitorRuleStatusOutput, error) {
if input == nil {
input = &QueryMonitorRuleStatusInput{}
}
requestBody := map[string]any{}
resp, err := c.makeRequest(ctx, "POST", "/monit/rule/counter/status", requestBody)
if err != nil {
return nil, fmt.Errorf("failed to query monitor rule status: %w", err)
}
defer func() { _ = resp.Body.Close() }()
if resp.StatusCode != http.StatusOK {
return nil, handleAPIError(c.logger, resp)
}
var result struct {
Error *DutyError `json:"error,omitempty"`
Data []MonitorRuleFolderStatus `json:"data,omitempty"`
}
if err := parseResponse(c.logger, resp, &result); err != nil {
return nil, err
}
if result.Error != nil {
return nil, result.Error
}
statuses := []MonitorRuleFolderStatus{}
if result.Data != nil {
statuses = result.Data
}
return &QueryMonitorRuleStatusOutput{Statuses: statuses}, nil
}