|
1 | 1 | package api
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "errors" |
5 | 4 | "fmt"
|
6 | 5 | "log"
|
7 | 6 | "strconv"
|
8 | 7 | "time"
|
9 | 8 | )
|
10 | 9 |
|
11 |
| -func (api *API) CreateAlarm(instanceID int, params map[string]interface{}) (map[string]interface{}, error) { |
12 |
| - data := make(map[string]interface{}) |
13 |
| - failed := make(map[string]interface{}) |
14 |
| - log.Printf("[DEBUG] go-api::alarm::create instance ID: %v, params: %v", instanceID, params) |
15 |
| - path := fmt.Sprintf("/api/instances/%d/alarms", instanceID) |
16 |
| - response, err := api.sling.New().Post(path).BodyJSON(params).Receive(&data, &failed) |
17 |
| - log.Printf("[DEBUG] go-api::alarm::create data: %v", data) |
| 10 | +func (api *API) CreateAlarm(instanceID int, params map[string]any) (map[string]any, error) { |
| 11 | + var ( |
| 12 | + data map[string]any |
| 13 | + failed map[string]any |
| 14 | + path = fmt.Sprintf("/api/instances/%d/alarms", instanceID) |
| 15 | + ) |
18 | 16 |
|
| 17 | + log.Printf("[DEBUG] api::alarms#create path: %s", path) |
| 18 | + response, err := api.sling.New().Post(path).BodyJSON(params).Receive(&data, &failed) |
19 | 19 | if err != nil {
|
20 | 20 | return nil, err
|
21 | 21 | }
|
22 |
| - if response.StatusCode != 201 { |
23 |
| - return nil, fmt.Errorf("CreateAlarm failed, status: %v, message: %s", response.StatusCode, failed) |
24 |
| - } |
25 | 22 |
|
26 |
| - if id, ok := data["id"]; ok { |
27 |
| - data["id"] = strconv.FormatFloat(id.(float64), 'f', 0, 64) |
28 |
| - log.Printf("[DEBUG] go-api::alarm::create id set: %v", data["id"]) |
29 |
| - } else { |
30 |
| - msg := fmt.Sprintf("go-api::instance::create Invalid alarm identifier: %v", data["id"]) |
31 |
| - log.Printf("[ERROR] %s", msg) |
32 |
| - return nil, errors.New(msg) |
| 23 | + switch response.StatusCode { |
| 24 | + case 201: |
| 25 | + log.Printf("[DEBUG] api::alarms#create data: %v", data) |
| 26 | + if id, ok := data["id"]; ok { |
| 27 | + data["id"] = strconv.FormatFloat(id.(float64), 'f', 0, 64) |
| 28 | + } else { |
| 29 | + return nil, fmt.Errorf("create alarm failed, invalid alarm identifier: %v", data["id"]) |
| 30 | + } |
| 31 | + return data, err |
| 32 | + default: |
| 33 | + return nil, |
| 34 | + fmt.Errorf("create alarm failed, status: %d, message: %s", response.StatusCode, failed) |
33 | 35 | }
|
34 |
| - |
35 |
| - return data, err |
36 | 36 | }
|
37 | 37 |
|
38 |
| -func (api *API) ReadAlarm(instanceID int, alarmID string) (map[string]interface{}, error) { |
39 |
| - data := make(map[string]interface{}) |
40 |
| - failed := make(map[string]interface{}) |
41 |
| - log.Printf("[DEBUG] go-api::alarm::read instance ID: %v, alarm ID: %v", instanceID, alarmID) |
42 |
| - path := fmt.Sprintf("/api/instances/%v/alarms/%v", instanceID, alarmID) |
43 |
| - response, err := api.sling.New().Get(path).Receive(&data, &failed) |
44 |
| - log.Printf("[DEBUG] go-api::alarm::read data : %v", data) |
| 38 | +func (api *API) ReadAlarm(instanceID int, alarmID string) (map[string]any, error) { |
| 39 | + var ( |
| 40 | + data map[string]any |
| 41 | + failed map[string]any |
| 42 | + path = fmt.Sprintf("/api/instances/%d/alarms/%s", instanceID, alarmID) |
| 43 | + ) |
45 | 44 |
|
| 45 | + log.Printf("[DEBUG] api::alarms#read path: %s", path) |
| 46 | + response, err := api.sling.New().Get(path).Receive(&data, &failed) |
46 | 47 | if err != nil {
|
47 | 48 | return nil, err
|
48 | 49 | }
|
49 |
| - if response.StatusCode != 200 { |
50 |
| - return nil, fmt.Errorf("ReadAlarm failed, status: %v, message: %s", response.StatusCode, failed) |
51 |
| - } |
52 | 50 |
|
53 |
| - return data, err |
| 51 | + switch response.StatusCode { |
| 52 | + case 200: |
| 53 | + log.Printf("[DEBUG] api::alarms#read data : %v", data) |
| 54 | + return data, err |
| 55 | + default: |
| 56 | + return nil, |
| 57 | + fmt.Errorf("read alarm failed, status: %d, message: %s", response.StatusCode, failed) |
| 58 | + } |
54 | 59 | }
|
55 | 60 |
|
56 |
| -func (api *API) ReadAlarms(instanceID int) ([]map[string]interface{}, error) { |
57 |
| - var data []map[string]interface{} |
58 |
| - failed := make(map[string]interface{}) |
59 |
| - log.Printf("[DEBUG] go-api::alarm::read instance ID: %v", instanceID) |
60 |
| - path := fmt.Sprintf("/api/instances/%d/alarms", instanceID) |
61 |
| - response, err := api.sling.New().Get(path).Receive(&data, &failed) |
62 |
| - log.Printf("[DEBUG] go-api::alarm::read data: %v", data) |
| 61 | +func (api *API) ListAlarms(instanceID int) ([]map[string]any, error) { |
| 62 | + var ( |
| 63 | + data []map[string]any |
| 64 | + failed map[string]any |
| 65 | + path = fmt.Sprintf("/api/instances/%d/alarms", instanceID) |
| 66 | + ) |
63 | 67 |
|
| 68 | + log.Printf("[DEBUG] api::alarms#list path: %s", path) |
| 69 | + response, err := api.sling.New().Get(path).Receive(&data, &failed) |
64 | 70 | if err != nil {
|
65 | 71 | return nil, err
|
66 | 72 | }
|
67 |
| - if response.StatusCode != 200 { |
68 |
| - return nil, fmt.Errorf("Alarms::ReadAlarms failed, status: %v, message: %s", response.StatusCode, failed) |
69 |
| - } |
70 | 73 |
|
71 |
| - return data, err |
| 74 | + switch response.StatusCode { |
| 75 | + case 200: |
| 76 | + log.Printf("[DEBUG] api::alarms#list data: %v", data) |
| 77 | + return data, err |
| 78 | + default: |
| 79 | + return nil, |
| 80 | + fmt.Errorf("list alarms failed, status: %d, message: %s", response.StatusCode, failed) |
| 81 | + } |
72 | 82 | }
|
73 | 83 |
|
74 |
| -func (api *API) UpdateAlarm(instanceID int, params map[string]interface{}) error { |
75 |
| - failed := make(map[string]interface{}) |
76 |
| - log.Printf("[DEBUG] go-api::alarm::update instance ID: %v, params: %v", instanceID, params) |
77 |
| - path := fmt.Sprintf("/api/instances/%v/alarms/%v", instanceID, params["id"]) |
78 |
| - response, err := api.sling.New().Put(path).BodyJSON(params).Receive(nil, &failed) |
| 84 | +func (api *API) UpdateAlarm(instanceID int, params map[string]any) error { |
| 85 | + var ( |
| 86 | + failed map[string]any |
| 87 | + path = fmt.Sprintf("/api/instances/%d/alarms/%s", instanceID, params["id"].(string)) |
| 88 | + ) |
79 | 89 |
|
| 90 | + log.Printf("[DEBUG] api::alarms#update path: %s", path) |
| 91 | + response, err := api.sling.New().Put(path).BodyJSON(params).Receive(nil, &failed) |
80 | 92 | if err != nil {
|
81 | 93 | return err
|
82 | 94 | }
|
83 |
| - if response.StatusCode != 201 { |
84 |
| - return fmt.Errorf("Alarms::UpdateAlarm failed, status: %v, message: %s", response.StatusCode, failed) |
85 |
| - } |
86 | 95 |
|
87 |
| - return err |
| 96 | + switch response.StatusCode { |
| 97 | + case 201: |
| 98 | + return nil |
| 99 | + default: |
| 100 | + return fmt.Errorf("update alarm failed, status: %d, message: %s", response.StatusCode, failed) |
| 101 | + } |
88 | 102 | }
|
89 | 103 |
|
90 |
| -func (api *API) DeleteAlarm(instanceID int, params map[string]interface{}) error { |
91 |
| - failed := make(map[string]interface{}) |
92 |
| - log.Printf("[DEBUG] go-api::alarm::delete instance id: %v, params: %v", instanceID, params) |
93 |
| - path := fmt.Sprintf("/api/instances/%v/alarms/%v", instanceID, params["id"]) |
94 |
| - response, _ := api.sling.New().Delete(path).BodyJSON(params).Receive(nil, &failed) |
| 104 | +func (api *API) DeleteAlarm(instanceID int, alarmID string) error { |
| 105 | + var ( |
| 106 | + failed map[string]any |
| 107 | + path = fmt.Sprintf("/api/instances/%d/alarms/%s", instanceID, alarmID) |
| 108 | + ) |
95 | 109 |
|
96 |
| - if response.StatusCode != 204 { |
97 |
| - return fmt.Errorf("Alarm::DeleteAlarm failed, status: %v, message: %s", response.StatusCode, failed) |
| 110 | + log.Printf("[DEBUG] api::alarms::delete path: %s", path) |
| 111 | + response, err := api.sling.New().Delete(path).Receive(nil, &failed) |
| 112 | + if err != nil { |
| 113 | + return err |
98 | 114 | }
|
99 | 115 |
|
100 |
| - return api.waitUntilAlarmDeletion(instanceID, params["id"].(string)) |
| 116 | + switch response.StatusCode { |
| 117 | + case 204: |
| 118 | + return api.waitUntilAlarmDeletion(instanceID, alarmID) |
| 119 | + default: |
| 120 | + return fmt.Errorf("delete alarm failed, status: %d, message: %s", response.StatusCode, failed) |
| 121 | + } |
101 | 122 | }
|
102 | 123 |
|
103 |
| -func (api *API) waitUntilAlarmDeletion(instanceID int, id string) error { |
104 |
| - log.Printf("[DEBUG] go-api::alarm::waitUntilAlarmDeletion waiting") |
105 |
| - data := make(map[string]interface{}) |
106 |
| - failed := make(map[string]interface{}) |
| 124 | +func (api *API) waitUntilAlarmDeletion(instanceID int, alarmID string) error { |
| 125 | + var ( |
| 126 | + data map[string]any |
| 127 | + failed map[string]any |
| 128 | + ) |
| 129 | + |
| 130 | + log.Printf("[DEBUG] api::alarms#waitUntilAlarmDeletion waiting") |
107 | 131 | for {
|
108 |
| - path := fmt.Sprintf("/api/instances/%v/alarms/%v", instanceID, id) |
| 132 | + path := fmt.Sprintf("/api/instances/%d/alarms/%s", instanceID, alarmID) |
109 | 133 | response, err := api.sling.New().Path(path).Receive(&data, &failed)
|
110 |
| - |
111 | 134 | if err != nil {
|
112 |
| - log.Printf("[DEBUG] go-api::alarm::waitUntilAlarmDeletion error: %v", err) |
| 135 | + log.Printf("[DEBUG] api::alarms#waitUntilAlarmDeletion error: %v", err) |
113 | 136 | return err
|
114 | 137 | }
|
115 |
| - if response.StatusCode == 404 { |
116 |
| - log.Print("[DEBUG] go-api::alarm::waitUntilAlarmDeletion deleted") |
| 138 | + |
| 139 | + switch response.StatusCode { |
| 140 | + case 404: |
| 141 | + log.Print("[DEBUG] api::alarms#waitUntilAlarmDeletion deleted") |
117 | 142 | return nil
|
118 | 143 | }
|
119 | 144 |
|
|
0 commit comments