1
0
mirror of https://github.com/IceWhaleTech/CasaOS.git synced 2025-07-06 23:37:26 +02:00
Files
CasaOS/common/notify.go

90 lines
2.1 KiB
Go
Raw Normal View History

2022-09-08 10:55:20 +01:00
package common
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"net/http"
"os"
"path/filepath"
"strings"
)
const (
CasaOSURLFilename = "casaos.url"
2022-09-15 08:13:07 +01:00
APICasaOSNotify = "/v1/notify"
2022-09-08 10:55:20 +01:00
)
type NotifyService interface {
SendNotify(path string, message map[string]interface{}) error
2022-09-15 08:13:07 +01:00
SendSystemStatusNotify(message map[string]interface{}) error
2022-09-08 10:55:20 +01:00
}
type notifyService struct {
address string
}
func (n *notifyService) SendNotify(path string, message map[string]interface{}) error {
2022-09-15 08:13:07 +01:00
url := strings.TrimSuffix(n.address, "/") + APICasaOSNotify + "/" + path
2022-09-08 10:55:20 +01:00
body, err := json.Marshal(message)
if err != nil {
return err
}
response, err := http.Post(url, "application/json", bytes.NewBuffer(body))
if err != nil {
return err
}
2022-09-16 04:47:42 +01:00
if response.StatusCode != http.StatusOK {
2022-09-08 10:55:20 +01:00
return errors.New("failed to send notify (status code: " + fmt.Sprint(response.StatusCode) + ")")
}
return nil
}
2022-09-15 08:13:07 +01:00
// disk: "sys_disk":{"size":56866869248,"avail":5855485952,"health":true,"used":48099700736}
// usb: "sys_usb":[{"name": "sdc","size": 7747397632,"model": "DataTraveler_2.0","avail": 7714418688,"children": null}]
func (n *notifyService) SendSystemStatusNotify(message map[string]interface{}) error {
url := strings.TrimSuffix(n.address, "/") + APICasaOSNotify + "/system_status"
fmt.Println(url)
2022-09-13 07:22:24 +01:00
body, err := json.Marshal(message)
if err != nil {
return err
}
response, err := http.Post(url, "application/json", bytes.NewBuffer(body))
if err != nil {
return err
}
2022-09-16 04:47:42 +01:00
if response.StatusCode != http.StatusOK {
2022-09-13 07:22:24 +01:00
return errors.New("failed to send notify (status code: " + fmt.Sprint(response.StatusCode) + ")")
}
return nil
}
2022-09-08 10:55:20 +01:00
func NewNotifyService(runtimePath string) (NotifyService, error) {
casaosAddressFile := filepath.Join(runtimePath, CasaOSURLFilename)
buf, err := os.ReadFile(casaosAddressFile)
if err != nil {
return nil, err
}
address := string(buf)
response, err := http.Get(address + "/ping")
if err != nil {
return nil, err
}
if response.StatusCode != 200 {
return nil, errors.New("failed to ping casaos service")
}
return &notifyService{
address: address,
}, nil
}