mirror of
https://gitee.com/winc-link/hummingbird.git
synced 2025-04-21 17:02:43 +00:00
93 lines
2.9 KiB
Go
93 lines
2.9 KiB
Go
/*******************************************************************************
|
|
* Copyright 2017.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
* in compliance with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
* or implied. See the License for the specific language governing permissions and limitations under
|
|
* the License.
|
|
*******************************************************************************/
|
|
|
|
package webapi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/kirinlabs/HttpRequest"
|
|
"github.com/winc-link/hummingbird/internal/models"
|
|
"github.com/winc-link/hummingbird/internal/pkg/di"
|
|
"github.com/winc-link/hummingbird/internal/pkg/logger"
|
|
"time"
|
|
)
|
|
|
|
type WebApiClient struct {
|
|
lc logger.LoggingClient
|
|
p *di.Container
|
|
}
|
|
|
|
type WebApiTemplate struct {
|
|
Product struct {
|
|
ProductId string `json:"product_id"`
|
|
ProductName string `json:"product_name"`
|
|
} `json:"product"`
|
|
Device struct {
|
|
DeviceId string `json:"device_id"`
|
|
DeviceName string `json:"device_name"`
|
|
} `json:"device"`
|
|
Rule struct {
|
|
RuleId string `json:"rule_id"`
|
|
RuleName string `json:"rule_name"`
|
|
AlertLevel string `json:"alert_level"`
|
|
Trigger string `json:"trigger,omitempty"`
|
|
TriggerTime int64 `json:"trigger_time,omitempty"`
|
|
} `json:"rule"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
func (d *WebApiClient) generateWebApiTemplate(rule models.AlertRule, device models.Device, product models.Product, message map[string]interface{}) WebApiTemplate {
|
|
var temp WebApiTemplate
|
|
msg, _ := json.Marshal(message)
|
|
temp.Message = string(msg)
|
|
temp.Product.ProductId = product.Id
|
|
temp.Product.ProductName = product.Name
|
|
temp.Device.DeviceId = device.Id
|
|
temp.Device.DeviceName = device.Name
|
|
temp.Rule.RuleId = rule.Id
|
|
temp.Rule.RuleName = rule.Name
|
|
temp.Rule.AlertLevel = string(rule.AlertLevel)
|
|
if len(rule.SubRule) > 0 {
|
|
temp.Rule.Trigger = string(rule.SubRule[0].Trigger)
|
|
temp.Rule.TriggerTime = time.Now().UnixMilli()
|
|
}
|
|
|
|
return temp
|
|
}
|
|
|
|
func NewWebApiClient(lc logger.LoggingClient, p *di.Container) *WebApiClient {
|
|
return &WebApiClient{
|
|
lc: lc,
|
|
p: p,
|
|
}
|
|
}
|
|
|
|
func (d *WebApiClient) Send(webhook string, header []map[string]string, rule models.AlertRule, device models.Device, product models.Product, messages map[string]interface{}) {
|
|
if webhook == "" {
|
|
return
|
|
}
|
|
req := HttpRequest.NewRequest()
|
|
req.JSON()
|
|
d.lc.Infof("webapi send header:", header)
|
|
context, _ := json.Marshal(d.generateWebApiTemplate(rule, device, product, messages))
|
|
for _, m := range header {
|
|
req.SetHeaders(m)
|
|
}
|
|
_, err := req.Post(webhook, context)
|
|
if err != nil {
|
|
d.lc.Errorf("webapi send alert message error:", err.Error())
|
|
}
|
|
d.lc.Info("webapi send message")
|
|
}
|