-
Notifications
You must be signed in to change notification settings - Fork 51
/
alertmuting.go
140 lines (112 loc) · 3.75 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
130
131
132
133
134
135
136
137
138
139
140
package signalfx
import (
"bytes"
"context"
"encoding/json"
"fmt"
"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 resp != nil {
defer resp.Body.Close()
}
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusCreated {
message, _ := ioutil.ReadAll(resp.Body)
return nil, fmt.Errorf("Bad status %d: %s", resp.StatusCode, message)
}
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 resp != nil {
defer resp.Body.Close()
}
if err != nil {
return err
}
if resp.StatusCode != http.StatusNoContent {
message, _ := ioutil.ReadAll(resp.Body)
return fmt.Errorf("Unexpected status code: %d: %s", resp.StatusCode, message)
}
_, _ = 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 resp != nil {
defer resp.Body.Close()
}
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
message, _ := ioutil.ReadAll(resp.Body)
return nil, fmt.Errorf("Bad status %d: %s", resp.StatusCode, message)
}
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 resp != nil {
defer resp.Body.Close()
}
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
message, _ := ioutil.ReadAll(resp.Body)
return nil, fmt.Errorf("Bad status %d: %s", resp.StatusCode, message)
}
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, name string, offset int) (*alertmuting.SearchResult, error) {
params := url.Values{}
params.Add("include", include)
params.Add("limit", strconv.Itoa(limit))
params.Add("name", name)
params.Add("offset", strconv.Itoa(offset))
resp, err := c.doRequest(ctx, "GET", AlertMutingRuleAPIURL, params, nil)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return nil, err
}
finalRules := &alertmuting.SearchResult{}
err = json.NewDecoder(resp.Body).Decode(finalRules)
_, _ = io.Copy(ioutil.Discard, resp.Body)
return finalRules, err
}