-
Notifications
You must be signed in to change notification settings - Fork 89
/
plugins_conditions.go
162 lines (126 loc) · 5.49 KB
/
plugins_conditions.go
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package alerts
import (
"context"
"fmt"
"github.com/newrelic/newrelic-client-go/pkg/errors"
)
// PluginsCondition represents an alert condition for New Relic Plugins.
type PluginsCondition struct {
ID int `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Enabled bool `json:"enabled"`
Entities []string `json:"entities,omitempty"`
Metric string `json:"metric,omitempty"`
MetricDescription string `json:"metric_description,omitempty"`
RunbookURL string `json:"runbook_url,omitempty"`
Terms []ConditionTerm `json:"terms,omitempty"`
ValueFunction string `json:"value_function,omitempty"`
Plugin AlertPlugin `json:"plugin,omitempty"`
}
// AlertPlugin represents a plugin to use with a Plugin alert condition.
type AlertPlugin struct {
ID string `json:"id,omitempty"`
GUID string `json:"guid,omitempty"`
}
// ListPluginsConditions returns alert conditions for New Relic plugins for a given alert policy.
func (a *Alerts) ListPluginsConditions(policyID int) ([]*PluginsCondition, error) {
return a.ListPluginsConditionsWithContext(context.Background(), policyID)
}
// ListPluginsConditionsWithContext returns alert conditions for New Relic plugins for a given alert policy.
func (a *Alerts) ListPluginsConditionsWithContext(ctx context.Context, policyID int) ([]*PluginsCondition, error) {
conditions := []*PluginsCondition{}
queryParams := listPluginsConditionsParams{
PolicyID: policyID,
}
nextURL := a.config.Region().RestURL("/alerts_plugins_conditions.json")
for nextURL != "" {
response := pluginsConditionsResponse{}
resp, err := a.client.GetWithContext(ctx, nextURL, &queryParams, &response)
if err != nil {
return nil, err
}
conditions = append(conditions, response.PluginsConditions...)
paging := a.pager.Parse(resp)
nextURL = paging.Next
}
return conditions, nil
}
// GetPluginsCondition gets information about an alert condition for a plugin
// given a policy ID and plugin ID.
func (a *Alerts) GetPluginsCondition(policyID int, pluginID int) (*PluginsCondition, error) {
return a.GetPluginsConditionWithContext(context.Background(), policyID, pluginID)
}
// GetPluginsConditionWithContext gets information about an alert condition for a plugin
// given a policy ID and plugin ID.
func (a *Alerts) GetPluginsConditionWithContext(ctx context.Context, policyID int, pluginID int) (*PluginsCondition, error) {
conditions, err := a.ListPluginsConditionsWithContext(ctx, policyID)
if err != nil {
return nil, err
}
for _, condition := range conditions {
if condition.ID == pluginID {
return condition, nil
}
}
return nil, errors.NewNotFoundf("no condition found for policy %d and condition ID %d", policyID, pluginID)
}
// CreatePluginsCondition creates an alert condition for a plugin.
func (a *Alerts) CreatePluginsCondition(policyID int, condition PluginsCondition) (*PluginsCondition, error) {
return a.CreatePluginsConditionWithContext(context.Background(), policyID, condition)
}
// CreatePluginsConditionWithContext creates an alert condition for a plugin.
func (a *Alerts) CreatePluginsConditionWithContext(ctx context.Context, policyID int, condition PluginsCondition) (*PluginsCondition, error) {
reqBody := pluginConditionRequestBody{
PluginsCondition: condition,
}
resp := pluginConditionResponse{}
url := fmt.Sprintf("/alerts_plugins_conditions/policies/%d.json", policyID)
_, err := a.client.PostWithContext(ctx, a.config.Region().RestURL(url), nil, &reqBody, &resp)
if err != nil {
return nil, err
}
return &resp.PluginsCondition, nil
}
// UpdatePluginsCondition updates an alert condition for a plugin.
func (a *Alerts) UpdatePluginsCondition(condition PluginsCondition) (*PluginsCondition, error) {
return a.UpdatePluginsConditionWithContext(context.Background(), condition)
}
// UpdatePluginsConditionWithContext updates an alert condition for a plugin.
func (a *Alerts) UpdatePluginsConditionWithContext(ctx context.Context, condition PluginsCondition) (*PluginsCondition, error) {
reqBody := pluginConditionRequestBody{
PluginsCondition: condition,
}
resp := pluginConditionResponse{}
url := fmt.Sprintf("/alerts_plugins_conditions/%d.json", condition.ID)
_, err := a.client.PutWithContext(ctx, a.config.Region().RestURL(url), nil, &reqBody, &resp)
if err != nil {
return nil, err
}
return &resp.PluginsCondition, nil
}
// DeletePluginsCondition deletes a plugin alert condition.
func (a *Alerts) DeletePluginsCondition(id int) (*PluginsCondition, error) {
return a.DeletePluginsConditionWithContext(context.Background(), id)
}
// DeletePluginsConditionWithContext deletes a plugin alert condition.
func (a *Alerts) DeletePluginsConditionWithContext(ctx context.Context, id int) (*PluginsCondition, error) {
resp := pluginConditionResponse{}
url := fmt.Sprintf("/alerts_plugins_conditions/%d.json", id)
_, err := a.client.DeleteWithContext(ctx, a.config.Region().RestURL(url), nil, &resp)
if err != nil {
return nil, err
}
return &resp.PluginsCondition, nil
}
type listPluginsConditionsParams struct {
PolicyID int `url:"policy_id,omitempty"`
}
type pluginsConditionsResponse struct {
PluginsConditions []*PluginsCondition `json:"plugins_conditions,omitempty"`
}
type pluginConditionResponse struct {
PluginsCondition PluginsCondition `json:"plugins_condition,omitempty"`
}
type pluginConditionRequestBody struct {
PluginsCondition PluginsCondition `json:"plugins_condition,omitempty"`
}