forked from signalfx/signalfx-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
alertmuting.go
129 lines (100 loc) · 3.43 KB
/
alertmuting.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
package signalfx
import (
"bytes"
"context"
"encoding/json"
"io"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"github.com/signalfx/signalfx-go/alertmuting"
)
// AlertMutingRuleAPIURL is the base URL for interacting with alert muting rules.
const AlertMutingRuleAPIURL = "/v2/alertmuting"
// CreateAlertMutingRule creates an alert muting rule.
func (c *Client) CreateAlertMutingRule(ctx context.Context, muteRequest *alertmuting.CreateUpdateAlertMutingRuleRequest) (*alertmuting.AlertMutingRule, error) {
payload, err := json.Marshal(muteRequest)
if err != nil {
return nil, err
}
resp, err := c.doRequest(ctx, "POST", AlertMutingRuleAPIURL, nil, bytes.NewReader(payload))
if err != nil {
return nil, err
}
defer resp.Body.Close()
if err = newResponseError(resp, http.StatusCreated); err != nil {
return nil, err
}
finalRule := &alertmuting.AlertMutingRule{}
err = json.NewDecoder(resp.Body).Decode(finalRule)
_, _ = io.Copy(ioutil.Discard, resp.Body)
return finalRule, err
}
// DeleteAlertMutingRule deletes an alert muting rule.
func (c *Client) DeleteAlertMutingRule(ctx context.Context, name string) error {
resp, err := c.doRequest(ctx, "DELETE", AlertMutingRuleAPIURL+"/"+name, nil, nil)
if err != nil {
return err
}
defer resp.Body.Close()
if err = newResponseError(resp, http.StatusNoContent); err != nil {
return err
}
_, _ = io.Copy(ioutil.Discard, resp.Body)
return nil
}
// GetAlertMutingRule gets an alert muting rule.
func (c *Client) GetAlertMutingRule(ctx context.Context, id string) (*alertmuting.AlertMutingRule, error) {
resp, err := c.doRequest(ctx, "GET", AlertMutingRuleAPIURL+"/"+id, nil, nil)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if err = newResponseError(resp, http.StatusOK); err != nil {
return nil, err
}
finalRule := &alertmuting.AlertMutingRule{}
err = json.NewDecoder(resp.Body).Decode(finalRule)
_, _ = io.Copy(ioutil.Discard, resp.Body)
return finalRule, err
}
// UpdateAlertMutingRule updates an alert muting rule.
func (c *Client) UpdateAlertMutingRule(ctx context.Context, id string, muteRequest *alertmuting.CreateUpdateAlertMutingRuleRequest) (*alertmuting.AlertMutingRule, error) {
payload, err := json.Marshal(muteRequest)
if err != nil {
return nil, err
}
resp, err := c.doRequest(ctx, "PUT", AlertMutingRuleAPIURL+"/"+id, nil, bytes.NewReader(payload))
if err != nil {
return nil, err
}
defer resp.Body.Close()
if err = newResponseError(resp, http.StatusOK); err != nil {
return nil, err
}
finalRule := &alertmuting.AlertMutingRule{}
err = json.NewDecoder(resp.Body).Decode(finalRule)
_, _ = io.Copy(ioutil.Discard, resp.Body)
return finalRule, err
}
// SearchAlertMutingRules searches for alert muting rules given a query string in `name`.
func (c *Client) SearchAlertMutingRules(ctx context.Context, include string, limit int, query string, offset int) (*alertmuting.SearchResult, error) {
params := url.Values{}
params.Add("include", include)
params.Add("limit", strconv.Itoa(limit))
params.Add("query", query)
params.Add("offset", strconv.Itoa(offset))
resp, err := c.doRequest(ctx, "GET", AlertMutingRuleAPIURL, params, nil)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if err = newResponseError(resp, http.StatusOK); err != nil {
return nil, err
}
finalRules := &alertmuting.SearchResult{}
err = json.NewDecoder(resp.Body).Decode(finalRules)
_, _ = io.Copy(ioutil.Discard, resp.Body)
return finalRules, err
}