|
@@ -1892,7 +1892,51 @@ func ProduceWindow() {
|
|
|
create = true
|
|
|
}
|
|
|
}
|
|
|
+ // 38
|
|
|
+ if topic == masterConfig.TopicOfFaultInfo &&
|
|
|
+ (len(masterConfig.RuleOfFaultInfo1) > 0 ||
|
|
|
+ len(masterConfig.RuleOfFaultInfo3) > 0) {
|
|
|
+ subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|
|
|
+ Node: commonConfig.RosNode,
|
|
|
+ Topic: topic,
|
|
|
+ Callback: func(data *pjisuv_msgs.FaultVec) {
|
|
|
+ subscribersTimeMutexes[i].Lock()
|
|
|
+ if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
|
|
|
+ subscribersMutexes[i].Lock()
|
|
|
+ faultHappenTime := util.GetNowTimeCustom() // 获取当前故障发生时间
|
|
|
+ lastTimeWindow := commonEntity.GetLastTimeWindow() // 获取最后一个时间窗口
|
|
|
+ faultLabel := ""
|
|
|
+ if len(masterConfig.RuleOfFaultInfo1) > 0 {
|
|
|
+ for _, f := range masterConfig.RuleOfFaultInfo1 {
|
|
|
+ faultLabel = f(data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ goto TriggerSuccess
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(masterConfig.RuleOfFaultInfo3) > 0 {
|
|
|
+ for _, f := range masterConfig.RuleOfFaultInfo3 {
|
|
|
+ faultLabel = f(shareVars, data)
|
|
|
+ if faultLabel != "" {
|
|
|
+ saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
|
|
|
+ subscribersTimes[i] = time.Now()
|
|
|
+ goto TriggerSuccess
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ TriggerSuccess:
|
|
|
+ subscribersMutexes[i].Unlock()
|
|
|
+ }
|
|
|
+ subscribersTimeMutexes[i].Unlock()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ if err == nil {
|
|
|
+ create = true
|
|
|
+ }
|
|
|
+ }
|
|
|
// 39 有共享变量的订阅者必须被创建
|
|
|
if topic == masterConfig.TopicOfPjVehicleFdbPub {
|
|
|
subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
|