2024-05-17 18:30:33 +08:00
|
|
|
|
// Copyright 2021 GoEdge goedge.cdn@gmail.com. All rights reserved.
|
2021-04-29 16:48:47 +08:00
|
|
|
|
|
|
|
|
|
|
package monitor
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"encoding/json"
|
|
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
2023-03-10 15:14:14 +08:00
|
|
|
|
teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
|
2021-04-29 16:48:47 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeNode/internal/events"
|
|
|
|
|
|
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
|
|
|
|
|
"github.com/TeaOSLab/EdgeNode/internal/rpc"
|
2024-05-11 09:23:54 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeNode/internal/utils/goman"
|
2021-04-29 16:48:47 +08:00
|
|
|
|
"github.com/iwind/TeaGo/maps"
|
|
|
|
|
|
"time"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
var SharedValueQueue = NewValueQueue()
|
|
|
|
|
|
|
|
|
|
|
|
func init() {
|
2023-03-10 15:14:14 +08:00
|
|
|
|
if !teaconst.IsMain {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-09-16 15:58:10 +08:00
|
|
|
|
events.On(events.EventLoaded, func() {
|
2021-12-08 15:17:45 +08:00
|
|
|
|
goman.New(func() {
|
|
|
|
|
|
SharedValueQueue.Start()
|
|
|
|
|
|
})
|
2021-04-29 16:48:47 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ValueQueue 数据记录队列
|
|
|
|
|
|
type ValueQueue struct {
|
|
|
|
|
|
valuesChan chan *ItemValue
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func NewValueQueue() *ValueQueue {
|
|
|
|
|
|
return &ValueQueue{
|
|
|
|
|
|
valuesChan: make(chan *ItemValue, 1024),
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Start 启动队列
|
|
|
|
|
|
func (this *ValueQueue) Start() {
|
|
|
|
|
|
// 这里单次循环就行,因为Loop里已经使用了Range通道
|
|
|
|
|
|
err := this.Loop()
|
|
|
|
|
|
if err != nil {
|
2021-11-10 21:51:56 +08:00
|
|
|
|
remotelogs.ErrorObject("MONITOR_QUEUE", err)
|
2021-04-29 16:48:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Add 添加数据
|
|
|
|
|
|
func (this *ValueQueue) Add(item string, value maps.Map) {
|
|
|
|
|
|
valueJSON, err := json.Marshal(value)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
remotelogs.Error("MONITOR_QUEUE", "marshal value error: "+err.Error())
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
select {
|
|
|
|
|
|
case this.valuesChan <- &ItemValue{
|
|
|
|
|
|
Item: item,
|
|
|
|
|
|
ValueJSON: valueJSON,
|
|
|
|
|
|
CreatedAt: time.Now().Unix(),
|
|
|
|
|
|
}:
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Loop 单次循环
|
|
|
|
|
|
func (this *ValueQueue) Loop() error {
|
|
|
|
|
|
rpcClient, err := rpc.SharedRPC()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for value := range this.valuesChan {
|
2022-08-24 20:04:46 +08:00
|
|
|
|
_, err = rpcClient.NodeValueRPC.CreateNodeValue(rpcClient.Context(), &pb.CreateNodeValueRequest{
|
2021-04-29 16:48:47 +08:00
|
|
|
|
Item: value.Item,
|
|
|
|
|
|
ValueJSON: value.ValueJSON,
|
|
|
|
|
|
CreatedAt: value.CreatedAt,
|
|
|
|
|
|
})
|
|
|
|
|
|
if err != nil {
|
2021-11-10 21:51:56 +08:00
|
|
|
|
if rpc.IsConnError(err) {
|
|
|
|
|
|
remotelogs.Warn("MONITOR", err.Error())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
remotelogs.Error("MONITOR", err.Error())
|
|
|
|
|
|
}
|
2021-07-06 20:06:57 +08:00
|
|
|
|
continue
|
2021-04-29 16:48:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|