forked from nordcloud/go-pingdom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
maintenance.go
148 lines (124 loc) · 3.43 KB
/
maintenance.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
package pingdom
import (
"encoding/json"
"io/ioutil"
"strconv"
)
// MaintenanceService provides an interface to Pingdom maintenance windows.
type MaintenanceService struct {
client *Client
}
// Maintenance is a Pingdom maintenance window.
type Maintenance interface {
PutParams() map[string]string
PostParams() map[string]string
Valid() error
}
// MaintenanceDelete is the set of parameters to a Pingdom maintenance delete request.
type MaintenanceDelete interface {
DeleteParams() map[string]string
ValidDelete() error
}
// List returns the response holding a list of Maintenance windows.
func (cs *MaintenanceService) List(params ...map[string]string) ([]MaintenanceResponse, error) {
param := map[string]string{}
if len(params) != 0 {
for _, m := range params {
for k, v := range m {
param[k] = v
}
}
}
req, err := cs.client.NewRequest("GET", "/maintenance", param)
if err != nil {
return nil, err
}
resp, err := cs.client.client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if err := validateResponse(resp); err != nil {
return nil, err
}
bodyBytes, _ := ioutil.ReadAll(resp.Body)
bodyString := string(bodyBytes)
m := &listMaintenanceJSONResponse{}
err = json.Unmarshal([]byte(bodyString), &m)
return m.Maintenances, err
}
// Read returns a Maintenance for a given ID.
func (cs *MaintenanceService) Read(id int) (*MaintenanceResponse, error) {
req, err := cs.client.NewRequest("GET", "/maintenance/"+strconv.Itoa(id), nil)
if err != nil {
return nil, err
}
m := &maintenanceDetailsJSONResponse{}
_, err = cs.client.Do(req, m)
if err != nil {
return nil, err
}
return m.Maintenance, err
}
// Create creates a new Maintenance.
func (cs *MaintenanceService) Create(maintenance Maintenance) (*MaintenanceResponse, error) {
if err := maintenance.Valid(); err != nil {
return nil, err
}
req, err := cs.client.NewRequest("POST", "/maintenance", maintenance.PostParams())
if err != nil {
return nil, err
}
m := &maintenanceDetailsJSONResponse{}
_, err = cs.client.Do(req, m)
if err != nil {
return nil, err
}
return m.Maintenance, err
}
// Update is used to update an existing Maintenance. Only the 'Description',
// and 'To' fields can be updated.
func (cs *MaintenanceService) Update(id int, maintenance Maintenance) (*PingdomResponse, error) {
if err := maintenance.Valid(); err != nil {
return nil, err
}
req, err := cs.client.NewRequest("PUT", "/maintenance/"+strconv.Itoa(id), maintenance.PutParams())
if err != nil {
return nil, err
}
m := &PingdomResponse{}
_, err = cs.client.Do(req, m)
if err != nil {
return nil, err
}
return m, err
}
// MultiDelete will delete the Maintenance for the given ID.
func (cs *MaintenanceService) MultiDelete(maintenance MaintenanceDelete) (*PingdomResponse, error) {
if err := maintenance.ValidDelete(); err != nil {
return nil, err
}
req, err := cs.client.NewRequest("DELETE", "/maintenance/", maintenance.DeleteParams())
if err != nil {
return nil, err
}
m := &PingdomResponse{}
_, err = cs.client.Do(req, m)
if err != nil {
return nil, err
}
return m, err
}
// Delete will delete the Maintenance for the given ID.
func (cs *MaintenanceService) Delete(id int) (*PingdomResponse, error) {
req, err := cs.client.NewRequest("DELETE", "/maintenance/"+strconv.Itoa(id), nil)
if err != nil {
return nil, err
}
m := &PingdomResponse{}
_, err = cs.client.Do(req, m)
if err != nil {
return nil, err
}
return m, err
}