Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 47 additions & 31 deletions api/notifications.go
Original file line number Diff line number Diff line change
@@ -1,96 +1,112 @@
package api

import (
"errors"
"fmt"
"log"
"strconv"
)

func (api *API) CreateNotification(instanceID int, params map[string]interface{}) (map[string]interface{}, error) {
data := make(map[string]interface{})
failed := make(map[string]interface{})
log.Printf("[DEBUG] go-api::notification::create instance ID: %v, params: %v", instanceID, params)
path := fmt.Sprintf("/api/instances/%d/alarms/recipients", instanceID)
var (
data map[string]interface{}
failed map[string]interface{}
path = fmt.Sprintf("/api/instances/%d/alarms/recipients", instanceID)
)

log.Printf("[DEBUG] go-api::notification::create path: %s", path)
response, err := api.sling.New().Post(path).BodyJSON(params).Receive(&data, &failed)
log.Printf("[DEBUG] go-api::notification::create data: %v", data)

if err != nil {
return nil, err
}
if response.StatusCode != 201 {
return nil, fmt.Errorf("CreateNotification failed, status: %v, message: %s", response.StatusCode, failed)
return nil, fmt.Errorf("create notification failed, status: %d, message: %s",
response.StatusCode, failed)
}

if v, ok := data["id"]; ok {
data["id"] = strconv.FormatFloat(v.(float64), 'f', 0, 64)
log.Printf("[DEBUG] go-api::notification::create id set: %v", data["id"])
} else {
msg := fmt.Sprintf("go-api::notification::create Invalid notification identifier: %v", data["id"])
log.Printf("[ERROR] %s", msg)
return nil, errors.New(msg)
return nil, fmt.Errorf("create notification invalid identifier: %v", data["id"])
}

return data, err
}

func (api *API) ReadNotification(instanceID int, recipientID string) (map[string]interface{}, error) {
data := make(map[string]interface{})
failed := make(map[string]interface{})
log.Printf("[DEBUG] go-api::notification::read instance ID: %v, recipient ID: %v", instanceID, recipientID)
path := fmt.Sprintf("/api/instances/%v/alarms/recipients/%v", instanceID, recipientID)
var (
data map[string]interface{}
failed map[string]interface{}
path = fmt.Sprintf("/api/instances/%d/alarms/recipients/%s", instanceID, recipientID)
)

log.Printf("[DEBUG] go-api::notification::read path: %s", path)
response, err := api.sling.New().Path(path).Receive(&data, &failed)
log.Printf("[DEBUG] go-api::notification::read data: %v", data)

if err != nil {
return nil, err
}
if response.StatusCode != 200 {
return nil, fmt.Errorf("ReadNotification failed, status: %v, message: %s", response.StatusCode, failed)
return nil, fmt.Errorf("read notification failed, status: %v, message: %s",
response.StatusCode, failed)
}

return data, err
}

func (api *API) ReadNotifications(instanceID int) ([]map[string]interface{}, error) {
var data []map[string]interface{}
failed := make(map[string]interface{})
log.Printf("[DEBUG] go-api::ReadNotifications::read instance ID: %v", instanceID)
path := fmt.Sprintf("/api/instances/%d/alarms/recipients", instanceID)
var (
data []map[string]interface{}
failed map[string]interface{}
path = fmt.Sprintf("/api/instances/%d/alarms/recipients", instanceID)
)

log.Printf("[DEBUG] go-api::ReadNotifications::read path: %s", path)
response, err := api.sling.New().Path(path).Receive(&data, &failed)
log.Printf("[DEBUG] go-api::ReadNotifications::read data: %v", data)

if err != nil {
return nil, err
}
if response.StatusCode != 200 {
return nil, fmt.Errorf("ReadNotifications failed, status: %v, message: %s", response.StatusCode, failed)
return nil, fmt.Errorf("read notification failed, status: %d, message: %s",
response.StatusCode, failed)
}

return data, err
}

func (api *API) UpdateNotification(instanceID int, params map[string]interface{}) error {
failed := make(map[string]interface{})
log.Printf("[DEBUG] go-api::notification::update instance id: %v, params: %v", instanceID, params)
path := fmt.Sprintf("/api/instances/%d/alarms/recipients/%v", instanceID, params["id"])
func (api *API) UpdateNotification(instanceID int, recipientID string, params map[string]interface{}) error {
var (
failed map[string]interface{}
path = fmt.Sprintf("/api/instances/%d/alarms/recipients/%s", instanceID, recipientID)
)

log.Printf("[DEBUG] go-api::notification::update path: %s", path)
response, err := api.sling.New().Put(path).BodyJSON(params).Receive(nil, &failed)

if response.StatusCode != 200 {
return fmt.Errorf("UpdateNotification failed, status: %v, message: %s", response.StatusCode, failed)
return fmt.Errorf("update notification failed, status: %d, message: %s",
response.StatusCode, failed)
}

return err
}

func (api *API) DeleteNotification(instanceID int, params map[string]interface{}) error {
failed := make(map[string]interface{})
log.Printf("[DEBUG] go-api::notification::delete instance id: %v, params: %v", instanceID, params)
path := fmt.Sprintf("/api/instances/%v/alarms/recipients/%v", instanceID, params["id"])
response, err := api.sling.New().Delete(path).BodyJSON(params).Receive(nil, &failed)
func (api *API) DeleteNotification(instanceID int, recipientID string) error {
var (
failed map[string]interface{}
path = fmt.Sprintf("/api/instances/%d/alarms/recipients/%s", instanceID, recipientID)
)

log.Printf("[DEBUG] go-api::notification::delete path: %s", path)
response, err := api.sling.New().Delete(path).Receive(nil, &failed)

if response.StatusCode != 204 {
return fmt.Errorf("DeleteNotification failed, status: %v, message: %s", response.StatusCode, failed)
return fmt.Errorf("delete notification failed, status: %d, message: %s",
response.StatusCode, failed)
}

return err
Expand Down