forked from sensu/sensu-go
/
silenced.go
102 lines (88 loc) · 2.48 KB
/
silenced.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
package client
import (
"encoding/json"
corev2 "github.com/sensu/sensu-go/api/core/v2"
"github.com/sensu/sensu-go/types"
)
var silencedPath = createNSBasePath(coreAPIGroup, coreAPIVersion, "silenced")
// CreateSilenced creates a new silenced entry.
func (client *RestClient) CreateSilenced(silenced *types.Silenced) error {
b, err := json.Marshal(silenced)
if err != nil {
return err
}
path := silencedPath(silenced.Namespace)
res, err := client.R().SetBody(b).Post(path)
if err != nil {
return err
}
if res.StatusCode() >= 400 {
return UnmarshalError(res)
}
return nil
}
// DeleteSilenced deletes a silenced entry.
func (client *RestClient) DeleteSilenced(namespace, name string) error {
return client.Delete(silencedPath(namespace, name))
}
// ListSilenceds fetches all silenced entries from configured Sensu instance
func (client *RestClient) ListSilenceds(namespace, sub, check string, options *ListOptions) ([]corev2.Silenced, error) {
if sub != "" && check != "" {
name, err := types.SilencedName(sub, check)
if err != nil {
return nil, err
}
silenced, err := client.FetchSilenced(name)
if err != nil {
return nil, err
}
return []corev2.Silenced{*silenced}, nil
}
path := silencedPath(namespace)
request := client.R()
ApplyListOptions(request, options)
if sub != "" {
path = silencedPath(namespace, "subscriptions", sub)
} else if check != "" {
path = silencedPath(namespace, "checks", check)
}
resp, err := request.Get(path)
if err != nil {
return nil, err
}
if resp.StatusCode() >= 400 {
return nil, UnmarshalError(resp)
}
var result []types.Silenced
err = json.Unmarshal(resp.Body(), &result)
return result, err
}
// FetchSilenced fetches a silenced entry from configured Sensu instance
func (client *RestClient) FetchSilenced(name string) (*types.Silenced, error) {
path := silencedPath(client.config.Namespace(), name)
resp, err := client.R().Get(path)
if err != nil {
return nil, err
}
if resp.StatusCode() >= 400 {
return nil, UnmarshalError(resp)
}
var result types.Silenced
return &result, json.Unmarshal(resp.Body(), &result)
}
// UpdateSilenced updates a silenced entry from configured Sensu instance
func (client *RestClient) UpdateSilenced(s *types.Silenced) error {
b, err := json.Marshal(s)
if err != nil {
return err
}
path := silencedPath(s.Namespace, s.Name)
resp, err := client.R().SetBody(b).Put(path)
if err != nil {
return err
}
if resp.StatusCode() >= 400 {
return UnmarshalError(resp)
}
return nil
}