package tasks
|
|
import (
|
"context"
|
"encoding/json"
|
"time"
|
"vamicro/report-service/models"
|
|
"vamicro/report-service/util"
|
|
"basic.com/valib/logger.git"
|
)
|
|
var (
|
devCtx, statCtx context.Context
|
devCancel, statCancel context.CancelFunc
|
)
|
|
func Start(chMsg chan []byte) {
|
// 启动设备信息上报
|
go deviceInfoReport()
|
|
// 启动设备状态信息上报
|
go deviceStateReport()
|
|
// 实时报警数据上报
|
go aiResultReport(chMsg)
|
}
|
|
func ResetDeviceInfoReport() {
|
devCancel()
|
}
|
|
func ResetDeviceStateReport() {
|
statCancel()
|
}
|
|
func deviceInfoReport() {
|
logger.Info("start device info report task")
|
devCtx, devCancel = context.WithCancel(context.Background())
|
|
for {
|
select {
|
case <-devCtx.Done():
|
logger.Info("deviceInfoReport exit")
|
go deviceInfoReport()
|
|
return
|
default:
|
logger.Info("deviceInfoReport")
|
|
time.Sleep(time.Duration(models.IntervalConfig.DevInfo) * time.Second)
|
}
|
}
|
}
|
|
func deviceStateReport() {
|
logger.Info("start device state report task")
|
statCtx, statCancel = context.WithCancel(context.Background())
|
|
for {
|
select {
|
case <-statCtx.Done():
|
logger.Info("deviceStateReport exit")
|
go deviceStateReport()
|
|
return
|
default:
|
logger.Info("deviceStateReport")
|
time.Sleep(time.Duration(models.IntervalConfig.DevState) * time.Second)
|
}
|
}
|
}
|
|
func aiResultReport(chMsg chan []byte) {
|
for {
|
select {
|
case msg := <-chMsg:
|
go handleRuleMsg(msg)
|
default:
|
time.Sleep(time.Millisecond * 100)
|
}
|
}
|
}
|
|
func handleRuleMsg(msg []byte) {
|
var ruleMsg = util.RuleMessage{}
|
err := json.Unmarshal(msg, &ruleMsg)
|
if err != nil {
|
logger.Warn("Unmarshal rule msg err", err)
|
return
|
}
|
|
logger.Info("Recive rule message:", ruleMsg.BaseInfo.CamName, " ", ruleMsg.BaseInfo.TaskName)
|
}
|