package main import ( "fmt" ) type Rule struct { Name string DataType string TopicName string } func generateRuleCode1(rules []Rule) string { code := "" for i, rule := range rules { ifPart := "if" if i > 0 { ifPart = "} else if" } code += fmt.Sprintf(` %s %s == topic2 { // %d if f, ok1 := rule.(func(data *%s) string); ok1 { %s = append(%s, f) goto JudgeDone } log(triggerLocalPath) continue `, ifPart, rule.TopicName, i+1, rule.DataType, rule.Name, rule.Name) } code += "}" return code } func generateRuleCode2(rules []Rule) string { code := "" for _, rule := range rules { code += fmt.Sprintf(` if topic == masterConfig.%s && len(masterConfig.%s) > 0 { subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{ Node: commonConfig.RosNode, Topic: topic, Callback: func(data *%s) { subscribersTimeMutexes[i].Lock() if time.Since(subscribersTimes[i]).Seconds() > triggerInterval { subscribersMutexes[i].Lock() faultHappenTime := commonUtil.GetNowTimeCustom() // 获取当前故障发生时间 lastTimeWindow := entity.GetLastTimeWindow() // 获取最后一个时间窗口 var faultLabel string for _, f := range masterConfig.%s { faultLabel = f(data) if faultLabel != "" { if !canCollect() { break } subscribersTimes[i] = time.Now() c_log.GlobalLogger.Errorf("触发事件【xxx】,开始采集。", faultLabel) saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow) break } } subscribersMutexes[i].Unlock() } subscribersTimeMutexes[i].Unlock() }, }) if err == nil { create = true } }`, rule.TopicName, rule.Name, rule.DataType, rule.Name) } code += "}" return code } func main() { rules := []Rule{ {"Rule1", "std_msgs.Int16MultiArray", "Topic1"}, {"Rule2", "geometry_msgs.PoseStamped", "Topic2"}, {"Rule3", "dynamic_reconfigure.ConfigDescription", "Topic3"}, {"Rule4", "dynamic_reconfigure.Config", "Topic4"}, {"Rule5", "std_msgs.String", "Topic5"}, {"Rule6", "geometry_msgs.PoseWithCovarianceStamped", "Topic6"}, {"Rule7", "std_msgs.String", "Topic7"}, {"Rule8", "std_msgs.String", "Topic8"}, {"Rule9", "std_msgs.Bool", "Topic9"}, {"Rule10", "std_msgs.Int8", "Topic10"}, {"Rule11", "std_msgs.Int8", "Topic11"}, {"Rule12", "sensor_msgs.PointCloud2", "Topic12"}, {"Rule13", "sensor_msgs.BatteryState", "Topic13"}, {"Rule14", "std_msgs.Int16", "Topic14"}, {"Rule15", "visualization_msgs.Marker", "Topic15"}, {"Rule16", "std_msgs.String", "Topic16"}, {"Rule17", "sensor_msgs.CameraInfo", "Topic17"}, {"Rule18", "sensor_msgs.Image", "Topic18"}, {"Rule19", "sensor_msgs.CompressedImage", "Topic19"}, {"Rule20", "dynamic_reconfigure.ConfigDescription", "Topic20"}, {"Rule21", "dynamic_reconfigure.Config", "Topic21"}, {"Rule22", "sensor_msgs.CompressedImage", "Topic22"}, {"Rule23", "dynamic_reconfigure.ConfigDescription", "Topic23"}, {"Rule24", "dynamic_reconfigure.Config", "Topic24"}, {"Rule25", "theora_image_transport.Packet", "Topic25"}, {"Rule26", "dynamic_reconfigure.ConfigDescription", "Topic26"}, {"Rule27", "dynamic_reconfigure.Config", "Topic27"}, {"Rule28", "sensor_msgs.PointCloud2", "Topic28"}, {"Rule29", "sensor_msgs.CameraInfo", "Topic29"}, {"Rule30", "sensor_msgs.Image", "Topic30"}, {"Rule31", "sensor_msgs.CompressedImage", "Topic31"}, {"Rule32", "dynamic_reconfigure.ConfigDescription", "Topic32"}, {"Rule33", "dynamic_reconfigure.Config", "Topic33"}, {"Rule34", "sensor_msgs.CompressedImage", "Topic34"}, {"Rule35", "dynamic_reconfigure.ConfigDescription", "Topic35"}, {"Rule36", "dynamic_reconfigure.Config", "Topic36"}, {"Rule37", "theora_image_transport.Packet", "Topic37"}, {"Rule38", "dynamic_reconfigure.ConfigDescription", "Topic38"}, {"Rule39", "dynamic_reconfigure.Config", "Topic39"}, {"Rule40", "geometry_msgs.PoseStamped", "Topic40"}, {"Rule41", "geometry_msgs.PoseStamped", "Topic41"}, {"Rule42", "nav_msgs.Path", "Topic42"}, {"Rule43", "std_msgs.Int8", "Topic43"}, {"Rule44", "std_msgs.Bool", "Topic44"}, {"Rule45", "nav_msgs.Path", "Topic45"}, {"Rule46", "geometry_msgs.PoseStamped", "Topic46"}, {"Rule47", "geometry_msgs.PoseStamped", "Topic47"}, {"Rule48", "geometry_msgs.PoseStamped", "Topic48"}, {"Rule49", "std_msgs.String", "Topic49"}, {"Rule50", "visualization_msgs.MarkerArray", "Topic50"}, {"Rule51", "geometry_msgs.PolygonStamped", "Topic51"}, {"Rule52", "nav_msgs.OccupancyGrid", "Topic52"}, {"Rule53", "nav_msgs.OccupancyGrid", "Topic53"}, {"Rule54", "nav_msgs.OccupancyGrid", "Topic54"}, {"Rule55", "std_msgs.Float32", "Topic55"}, {"Rule56", "std_msgs.Int32", "Topic56"}, {"Rule57", "nav_msgs.Path", "Topic57"}, {"Rule58", "clean_msg.ErrorInfo", "Topic58"}, {"Rule59", "nav_msgs.OccupancyGrid", "Topic59"}, {"Rule60", "nav_msgs.OccupancyGrid", "Topic60"}, {"Rule61", "nav_msgs.OccupancyGrid", "Topic61"}, {"Rule62", "nav_msgs.OccupancyGrid", "Topic62"}, {"Rule63", "nav_msgs.OccupancyGrid", "Topic63"}, {"Rule64", "nav_msgs.OccupancyGrid", "Topic64"}, {"Rule65", "std_msgs.String", "Topic65"}, {"Rule66", "std_msgs.Bool", "Topic66"}, {"Rule67", "std_msgs.Bool", "Topic67"}, {"Rule68", "geometry_msgs.PolygonStamped", "Topic68"}, {"Rule69", "geometry_msgs.PointStamped", "Topic69"}, {"Rule70", "std_msgs.String", "Topic70"}, {"Rule71", "geometry_msgs.Twist", "Topic71"}, {"Rule72", "geometry_msgs.Twist", "Topic72"}, {"Rule73", "nav_msgs.Path", "Topic73"}, {"Rule74", "common_msgs.CreateMapInfo", "Topic74"}, {"Rule75", "geometry_msgs.Twist", "Topic75"}, {"Rule76", "common_msgs.SensorStatus", "Topic76"}, {"Rule77", "geometry_msgs.PoseArray", "Topic77"}, {"Rule78", "nav_msgs.Path", "Topic78"}, {"Rule79", "common_msgs.IdentifierObjsInfo", "Topic79"}, {"Rule80", "common_msgs.McuDiagnostic", "Topic80"}, {"Rule81", "diagnostic_msgs.DiagnosticArray", "Topic81"}, {"Rule82", "std_msgs.Int8", "Topic82"}, {"Rule83", "std_msgs.Int16", "Topic83"}, {"Rule84", "geometry_msgs.Vector3Stamped", "Topic84"}, {"Rule85", "sensor_msgs.LaserScan", "Topic85"}, {"Rule86", "sensor_msgs.PointCloud2", "Topic86"}, {"Rule87", "std_msgs.String", "Topic87"}, {"Rule88", "std_msgs.String", "Topic88"}, {"Rule89", "std_msgs.String", "Topic89"}, {"Rule90", "std_msgs.Int32", "Topic90"}, {"Rule91", "common_msgs.TaskInfo", "Topic91"}, {"Rule92", "common_msgs.MapInfo", "Topic92"}, {"Rule93", "nav_msgs.Path", "Topic93"}, {"Rule94", "common_msgs.VideoStream", "Topic94"}, {"Rule95", "sensor_msgs.PointCloud2", "Topic95"}, {"Rule96", "nav_msgs.Path", "Topic96"}, {"Rule97", "sensor_msgs.PointCloud2", "Topic97"}, {"Rule98", "sensor_msgs.PointCloud2", "Topic98"}, {"Rule99", "sensor_msgs.PointCloud2", "Topic99"}, {"Rule100", "geometry_msgs.PointStamped", "Topic100"}, {"Rule101", "nav_msgs.Path", "Topic101"}, {"Rule102", "geometry_msgs.PoseStamped", "Topic102"}, {"Rule103", "geometry_msgs.PoseWithCovarianceStamped", "Topic103"}, {"Rule104", "geometry_msgs.Pose", "Topic104"}, {"Rule105", "std_msgs.String", "Topic105"}, {"Rule106", "std_msgs.String", "Topic106"}, {"Rule107", "std_msgs.String", "Topic107"}, {"Rule108", "std_msgs.String", "Topic108"}, {"Rule109", "std_msgs.Float64", "Topic109"}, {"Rule110", "std_msgs.String", "Topic110"}, {"Rule111", "std_msgs.String", "Topic111"}, {"Rule112", "sensor_msgs.Imu", "Topic112"}, {"Rule113", "std_msgs.String", "Topic113"}, {"Rule114", "std_msgs.Int8", "Topic114"}, {"Rule115", "std_msgs.Int16", "Topic115"}, {"Rule116", "std_msgs.String", "Topic116"}, {"Rule117", "std_msgs.String", "Topic117"}, {"Rule118", "geometry_msgs.PoseWithCovarianceStamped", "Topic118"}, {"Rule119", "sensor_msgs.JointState", "Topic119"}, {"Rule120", "std_msgs.String", "Topic120"}, {"Rule121", "cartographer_ros_msgs.LandmarkList", "Topic121"}, {"Rule122", "nav_msgs.Odometry", "Topic122"}, {"Rule123", "sensor_msgs.LaserScan", "Topic123"}, {"Rule124", "std_msgs.String", "Topic124"}, {"Rule125", "nav_msgs.Path", "Topic125"}, {"Rule126", "std_msgs.String", "Topic126"}, {"Rule127", "std_msgs.String", "Topic127"}, {"Rule128", "std_msgs.String", "Topic128"}, {"Rule129", "std_msgs.String", "Topic129"}, {"Rule130", "geometry_msgs.PoseWithCovarianceStamped", "Topic130"}, {"Rule131", "std_msgs.String", "Topic131"}, {"Rule132", "std_msgs.String", "Topic132"}, {"Rule133", "common_msgs.LocateInfo", "Topic133"}, {"Rule134", "std_msgs.Bool", "Topic134"}, {"Rule135", "std_msgs.Float64MultiArray", "Topic135"}, {"Rule136", "std_msgs.String", "Topic136"}, {"Rule137", "std_msgs.String", "Topic137"}, {"Rule138", "nav_msgs.OccupancyGrid", "Topic138"}, {"Rule139", "std_msgs.String", "Topic139"}, {"Rule140", "nav_msgs.Path", "Topic140"}, {"Rule141", "std_msgs.String", "Topic141"}, {"Rule142", "std_msgs.String", "Topic142"}, {"Rule143", "nav_msgs.MapMetaData", "Topic143"}, {"Rule144", "nav_msgs.Path", "Topic144"}, {"Rule145", "geometry_msgs.PoseStamped", "Topic145"}, {"Rule146", "nav_msgs.OccupancyGrid", "Topic146"}, {"Rule147", "nav_msgs.OccupancyGrid", "Topic147"}, {"Rule148", "std_msgs.String", "Topic148"}, {"Rule149", "std_msgs.String", "Topic149"}, {"Rule150", "std_msgs.String", "Topic150"}, {"Rule151", "std_msgs.String", "Topic151"}, {"Rule152", "std_msgs.Bool", "Topic152"}, {"Rule153", "sensor_msgs.CameraInfo", "Topic153"}, {"Rule154", "sensor_msgs.Image", "Topic154"}, {"Rule155", "sensor_msgs.CompressedImage", "Topic155"}, {"Rule156", "dynamic_reconfigure.ConfigDescription", "Topic156"}, {"Rule157", "dynamic_reconfigure.Config", "Topic157"}, {"Rule158", "sensor_msgs.CompressedImage", "Topic158"}, {"Rule159", "dynamic_reconfigure.ConfigDescription", "Topic159"}, {"Rule160", "dynamic_reconfigure.Config", "Topic160"}, {"Rule161", "theora_image_transport.Packet", "Topic161"}, {"Rule162", "dynamic_reconfigure.ConfigDescription", "Topic162"}, {"Rule163", "dynamic_reconfigure.Config", "Topic163"}, {"Rule164", "sensor_msgs.CameraInfo", "Topic164"}, {"Rule165", "sensor_msgs.Image", "Topic165"}, {"Rule166", "sensor_msgs.CompressedImage", "Topic166"}, {"Rule167", "dynamic_reconfigure.ConfigDescription", "Topic167"}, {"Rule168", "dynamic_reconfigure.Config", "Topic168"}, {"Rule169", "sensor_msgs.CompressedImage", "Topic169"}, {"Rule170", "dynamic_reconfigure.ConfigDescription", "Topic170"}, {"Rule171", "dynamic_reconfigure.Config", "Topic171"}, {"Rule172", "theora_image_transport.Packet", "Topic172"}, {"Rule173", "dynamic_reconfigure.ConfigDescription", "Topic173"}, {"Rule174", "dynamic_reconfigure.Config", "Topic174"}, {"Rule175", "sensor_msgs.PointCloud2", "Topic175"}, {"Rule176", "sensor_msgs.CameraInfo", "Topic176"}, {"Rule177", "sensor_msgs.Image", "Topic177"}, {"Rule178", "sensor_msgs.CompressedImage", "Topic178"}, {"Rule179", "dynamic_reconfigure.ConfigDescription", "Topic179"}, {"Rule180", "dynamic_reconfigure.Config", "Topic180"}, {"Rule181", "sensor_msgs.CompressedImage", "Topic181"}, {"Rule182", "dynamic_reconfigure.ConfigDescription", "Topic182"}, {"Rule183", "dynamic_reconfigure.Config", "Topic183"}, {"Rule184", "theora_image_transport.Packet", "Topic184"}, {"Rule185", "dynamic_reconfigure.ConfigDescription", "Topic185"}, {"Rule186", "dynamic_reconfigure.Config", "Topic186"}, {"Rule187", "sensor_msgs.CameraInfo", "Topic187"}, {"Rule188", "sensor_msgs.Image", "Topic188"}, {"Rule189", "sensor_msgs.CompressedImage", "Topic189"}, {"Rule190", "dynamic_reconfigure.ConfigDescription", "Topic190"}, {"Rule191", "dynamic_reconfigure.Config", "Topic191"}, {"Rule192", "sensor_msgs.CompressedImage", "Topic192"}, {"Rule193", "dynamic_reconfigure.ConfigDescription", "Topic193"}, {"Rule194", "dynamic_reconfigure.Config", "Topic194"}, {"Rule195", "theora_image_transport.Packet", "Topic195"}, {"Rule196", "dynamic_reconfigure.ConfigDescription", "Topic196"}, {"Rule197", "dynamic_reconfigure.Config", "Topic197"}, {"Rule198", "sensor_msgs.PointCloud2", "Topic198"}, {"Rule199", "geometry_msgs.PoseStamped", "Topic199"}, {"Rule200", "geometry_msgs.PoseStamped", "Topic200"}, {"Rule201", "std_msgs.UInt8", "Topic201"}, {"Rule202", "nav_msgs.Odometry", "Topic202"}, {"Rule203", "std_msgs.String", "Topic203"}, {"Rule204", "std_msgs.String", "Topic204"}, {"Rule205", "nav_msgs.Odometry", "Topic205"}, {"Rule206", "sensor_msgs.Imu", "Topic206"}, {"Rule207", "sensor_msgs.PointCloud2", "Topic207"}, {"Rule208", "geometry_msgs.PoseArray", "Topic208"}, {"Rule209", "sensor_msgs.PointCloud2", "Topic209"}, {"Rule210", "sensor_msgs.LaserScan", "Topic210"}, {"Rule211", "geometry_msgs.PoseWithCovarianceStamped", "Topic211"}, {"Rule212", "geometry_msgs.Vector3Stamped", "Topic212"}, {"Rule213", "std_msgs.String", "Topic213"}, {"Rule214", "common_msgs.FunctionAreas", "Topic214"}, {"Rule215", "std_msgs.Bool", "Topic215"}, {"Rule216", "nav_msgs.Path", "Topic216"}, {"Rule217", "std_msgs.Float64MultiArray", "Topic217"}, {"Rule218", "std_msgs.String", "Topic218"}, {"Rule219", "std_msgs.String", "Topic219"}, {"Rule220", "std_msgs.String", "Topic220"}, {"Rule221", "geometry_msgs.PoseStamped", "Topic221"}, {"Rule222", "geometry_msgs.PoseWithCovarianceStamped", "Topic222"}, {"Rule223", "std_msgs.String", "Topic223"}, {"Rule224", "std_msgs.String", "Topic224"}, {"Rule225", "localization_monitor.RobotStatus", "Topic225"}, {"Rule226", "std_msgs.Float64MultiArray", "Topic226"}, {"Rule227", "std_msgs.String", "Topic227"}, {"Rule228", "actionlib_msgs.GoalID", "Topic228"}, {"Rule229", "ipa_building_msgs.MapSegmentationActionFeedback", "Topic229"}, {"Rule230", "ipa_building_msgs.MapSegmentationActionGoal", "Topic230"}, {"Rule231", "dynamic_reconfigure.ConfigDescription", "Topic231"}, {"Rule232", "dynamic_reconfigure.Config", "Topic232"}, {"Rule233", "ipa_building_msgs.MapSegmentationActionResult", "Topic233"}, {"Rule234", "nav_msgs.OccupancyGrid", "Topic234"}, {"Rule235", "actionlib_msgs.GoalStatusArray", "Topic235"}, {"Rule236", "rosgraph_msgs.Log", "Topic236"}, {"Rule237", "rosgraph_msgs.Log", "Topic237"}, {"Rule238", "nav_msgs.Path", "Topic238"}, {"Rule239", "geometry_msgs.Vector3Stamped", "Topic239"}, {"Rule240", "sensor_msgs.LaserScan", "Topic240"}, {"Rule241", "sensor_msgs.LaserScan", "Topic241"}, {"Rule242", "sensor_msgs.LaserScan", "Topic242"}, {"Rule243", "sensor_msgs.LaserScan", "Topic243"}, {"Rule244", "sensor_msgs.LaserScan", "Topic244"}, {"Rule245", "sensor_msgs.PointCloud2", "Topic245"}, {"Rule246", "sensor_msgs.PointCloud2", "Topic246"}, {"Rule247", "visualization_msgs.MarkerArray", "Topic247"}, {"Rule248", "common_msgs.SensorTask", "Topic248"}, {"Rule249", "std_msgs.String", "Topic249"}, {"Rule250", "geometry_msgs.Vector3Stamped", "Topic250"}, {"Rule251", "common_msgs.SonarList", "Topic251"}, {"Rule252", "nav_msgs.Odometry", "Topic252"}, {"Rule253", "sensor_msgs.LaserScan", "Topic253"}, {"Rule254", "std_msgs.Bool", "Topic254"}, {"Rule255", "sensor_msgs.LaserScan", "Topic255"}, {"Rule256", "std_msgs.String", "Topic256"}, {"Rule257", "std_msgs.Bool", "Topic257"}, {"Rule258", "sensor_msgs.CameraInfo", "Topic258"}, {"Rule259", "common_msgs.SysInfo", "Topic259"}, {"Rule260", "sensor_msgs.Image", "Topic260"}, {"Rule261", "sensor_msgs.CompressedImage", "Topic261"}, {"Rule262", "dynamic_reconfigure.ConfigDescription", "Topic262"}, {"Rule263", "dynamic_reconfigure.Config", "Topic263"}, {"Rule264", "sensor_msgs.CompressedImage", "Topic264"}, {"Rule265", "dynamic_reconfigure.ConfigDescription", "Topic265"}, {"Rule266", "dynamic_reconfigure.Config", "Topic266"}, {"Rule267", "theora_image_transport.Packet", "Topic267"}, {"Rule268", "dynamic_reconfigure.ConfigDescription", "Topic268"}, {"Rule269", "dynamic_reconfigure.Config", "Topic269"}, {"Rule270", "std_msgs.Bool", "Topic270"}, {"Rule271", "geometry_msgs.PoseStamped", "Topic271"}, {"Rule272", "geometry_msgs.Vector3Stamped", "Topic272"}, {"Rule273", "common_msgs.TaskFeedbackInfo", "Topic273"}, {"Rule274", "common_msgs.Points", "Topic274"}, {"Rule275", "tf2_msgs.TFMessage", "Topic275"}, {"Rule276", "std_msgs.String", "Topic276"}, {"Rule277", "tf2_msgs.TFMessage", "Topic277"}, {"Rule278", "nav_msgs.Path", "Topic278"}, {"Rule279", "common_msgs.UpLoadFileList", "Topic279"}, {"Rule280", "sensor_msgs.Range", "Topic280"}, {"Rule281", "sensor_msgs.LaserScan", "Topic281"}, {"Rule282", "sensor_msgs.LaserScan", "Topic282"}, {"Rule283", "sensor_msgs.LaserScan", "Topic283"}, {"Rule284", "sensor_msgs.LaserScan", "Topic284"}, } code := generateRuleCode2(rules) fmt.Println(code) }