87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
// Package pool define concurrency call function in ants
|
||
package pool
|
||
|
||
import (
|
||
"fmt"
|
||
"strconv"
|
||
"time"
|
||
|
||
"modelRT/config"
|
||
"modelRT/diagram"
|
||
"modelRT/logger"
|
||
"modelRT/network"
|
||
|
||
"go.uber.org/zap"
|
||
)
|
||
|
||
var AnchorFunc = func(anchorConfig interface{}) {
|
||
logger := logger.GetLoggerInstance()
|
||
var firstTimePolling bool
|
||
|
||
paramConfig, ok := anchorConfig.(config.AnchorParamConfig)
|
||
if !ok {
|
||
logger.Error("conversion model anchor param config type failed")
|
||
return
|
||
}
|
||
|
||
for {
|
||
var beginUnixTime, endUnixTime int64
|
||
if firstTimePolling {
|
||
milliUnixTime := time.Now().UnixMilli()
|
||
endUnixTime = milliUnixTime
|
||
beginUnixTime = milliUnixTime - 1000*60
|
||
firstTimePolling = false
|
||
} else {
|
||
// 判断时间差值是否小于10s,如果小于则重新获取时间
|
||
endUnixTime = time.Now().UnixMilli()
|
||
if endUnixTime-beginUnixTime < 1000*10 {
|
||
time.Sleep(time.Duration(1 * time.Second))
|
||
endUnixTime = time.Now().UnixMilli()
|
||
}
|
||
}
|
||
|
||
pollingAPI := network.APIEndpoint{
|
||
URL: paramConfig.APIURL,
|
||
Method: paramConfig.APIMethod,
|
||
QueryParams: map[string]string{
|
||
"station": paramConfig.StationID,
|
||
"component": paramConfig.ComponentID,
|
||
"point": paramConfig.AnchorName,
|
||
"begin": strconv.FormatInt(beginUnixTime, 10),
|
||
"end": strconv.FormatInt(endUnixTime, 10),
|
||
},
|
||
}
|
||
|
||
if !firstTimePolling {
|
||
beginUnixTime = time.Now().UnixMilli()
|
||
}
|
||
|
||
valueSlice, err := network.PollAPIEndpoints(pollingAPI)
|
||
if err != nil {
|
||
logger.Error("polling real time data from dataRT service failed", zap.Error(err))
|
||
continue
|
||
}
|
||
|
||
for _, value := range valueSlice {
|
||
anchorName, err := diagram.GetAnchorValue(paramConfig.UUID)
|
||
if err != nil {
|
||
logger.Error("can not get anchor value from map by uuid", zap.String("uuid", paramConfig.UUID), zap.Error(err))
|
||
continue
|
||
}
|
||
|
||
if anchorName != paramConfig.AnchorName {
|
||
logger.Error("anchor name not equal param config anchor value", zap.String("map_anchor_name", anchorName), zap.String("param_anchor_name", paramConfig.AnchorName))
|
||
continue
|
||
}
|
||
|
||
upperLimitVal := paramConfig.CompareValUpperLimit
|
||
lowerlimitVal := paramConfig.CompareValLowerLimit
|
||
compareValue := paramConfig.CalculateFunc(value, paramConfig.CalculateParams...)
|
||
if compareValue > upperLimitVal || compareValue < lowerlimitVal {
|
||
// TODO 选择报警方式
|
||
fmt.Println("log warning")
|
||
}
|
||
}
|
||
}
|
||
}
|