diff --git a/common/notify.go b/common/notify.go index 4a003d0..c36cea0 100644 --- a/common/notify.go +++ b/common/notify.go @@ -18,6 +18,7 @@ const ( type NotifyService interface { SendNotify(path string, message map[string]interface{}) error + SendSystemNotify(message map[string]interface{}) error } type notifyService struct { address string @@ -41,7 +42,24 @@ func (n *notifyService) SendNotify(path string, message map[string]interface{}) return nil } +func (n *notifyService) SendSystemNotify(message map[string]interface{}) error { + url := strings.TrimSuffix(n.address, "/") + "/" + APICasaOSNotify + 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 + } + + if response.StatusCode != http.StatusCreated { + return errors.New("failed to send notify (status code: " + fmt.Sprint(response.StatusCode) + ")") + } + return nil + +} func NewNotifyService(runtimePath string) (NotifyService, error) { casaosAddressFile := filepath.Join(runtimePath, CasaOSURLFilename) diff --git a/route/route.go b/route/route.go index 39d011b..0bfcbfc 100644 --- a/route/route.go +++ b/route/route.go @@ -244,6 +244,8 @@ func InitRouter() *gin.Engine { v1NotifyGroup.Use() { v1NotifyGroup.POST("/:path", v1.PostNotifyMssage) + //merge to system + v1NotifyGroup.POST("", v1.PostSystemNotyfiy) } } return r diff --git a/route/v1/notiry.go b/route/v1/notiry.go index c818aab..54e86fd 100644 --- a/route/v1/notiry.go +++ b/route/v1/notiry.go @@ -14,3 +14,9 @@ func PostNotifyMssage(c *gin.Context) { service.MyService.Notify().SendNotify(path, message) c.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS)}) } +func PostSystemNotyfiy(c *gin.Context) { + message := make(map[string]interface{}) + c.ShouldBind(&message) + service.MyService.Notify().SettingSystemTempData(message) + c.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS)}) +} diff --git a/service/notify.go b/service/notify.go index 154d45a..fe93d83 100644 --- a/service/notify.go +++ b/service/notify.go @@ -38,14 +38,21 @@ type NotifyServer interface { SendAllHardwareStatusBySocket(disk model2.Summary, list []model2.DriveUSB, mem map[string]interface{}, cpu map[string]interface{}, netList []model2.IOCountersStat) SendStorageBySocket(message notify.StorageMessage) SendNotify(path string, message map[string]interface{}) + SettingSystemTempData(message map[string]interface{}) } type notifyServer struct { - db *gorm.DB + db *gorm.DB + SystemTempMap map[string]interface{} +} + +func (i *notifyServer) SettingSystemTempData(message map[string]interface{}) { + for k, v := range message { + i.SystemTempMap[k] = v + } } func (i *notifyServer) SendNotify(path string, message map[string]interface{}) { - msg := gosf.Message{} msg.Body = message msg.Success = true @@ -77,9 +84,6 @@ func (i *notifyServer) SendStorageBySocket(message notify.StorageMessage) { func (i *notifyServer) SendAllHardwareStatusBySocket(disk model2.Summary, list []model2.DriveUSB, mem map[string]interface{}, cpu map[string]interface{}, netList []model2.IOCountersStat) { body := make(map[string]interface{}) - body["sys_disk"] = disk - - body["sys_usb"] = list body["sys_mem"] = mem @@ -87,6 +91,10 @@ func (i *notifyServer) SendAllHardwareStatusBySocket(disk model2.Summary, list [ body["sys_net"] = netList + for k, v := range i.SystemTempMap { + body[k] = v + } + msg := gosf.Message{} msg.Body = body msg.Success = true @@ -470,5 +478,5 @@ func SendMeg() { // } func NewNotifyService(db *gorm.DB) NotifyServer { - return ¬ifyServer{db: db} + return ¬ifyServer{db: db, SystemTempMap: make(map[string]interface{})} }