LingxinMeng 10 місяців тому
батько
коміт
99605d5cea

+ 3 - 1
aarch64/pjisuv/common/config/c_cloud.go

@@ -45,6 +45,7 @@ type trigger struct {
 }
 
 type cloudConfig struct {
+	RefreshCloudConfig    bool          `yaml:"refresh-cloud-config"`
 	CompressBag           bool          `yaml:"compress-bag"`
 	CleanBeforeStart      bool          `yaml:"clean-before-start"`
 	FullCollect           bool          `yaml:"full-collect"`
@@ -57,6 +58,7 @@ type cloudConfig struct {
 	TriggersDir           string        `yaml:"triggers-dir"`
 	TcpPort               string        `yaml:"tcp-port"`
 	RpcPort               string        `yaml:"rpc-port"`
+	TriggersOnline        bool          `yaml:"triggers-online"`
 	Triggers              []trigger     `yaml:"triggers"`
 	Hosts                 []hostStruct  `yaml:"hosts"`
 	Ros                   ros           `yaml:"ros"`
@@ -140,7 +142,7 @@ func InitCloudConfig() {
 	}
 }
 
-// RefreshCloudConfig 初始化业务配置
+// RefreshCloudConfig 刷新配置文件
 func refreshCloudConfig() {
 	// 获取文件的目录
 	_ = util.CreateParentDir(LocalConfig.CloudConfigLocalPath)

+ 3 - 0
aarch64/pjisuv/common/config/yaml/通用-cloud-config.yaml

@@ -1,4 +1,6 @@
 ---
+
+refresh-cloud-config: false
 compress-bag: false
 clean-before-start: false
 monitor:
@@ -20,6 +22,7 @@ disk:
 bag-data-dir: /mnt/media/sda1/cicv-data-closedloop/data/
 bag-copy-dir: /mnt/media/sda1/cicv-data-closedloop/copy/
 time-to-label-json-path: /mnt/media/sda1/cicv-data-closedloop/timeToLabel.json
+triggers-online: false
 triggers-dir: /mnt/media/sda1/cicv-data-closedloop/triggers/
 time-window-send-gap: 6
 tcp-port: 12340

+ 28 - 16
aarch64/pjisuv/master/config/master_trigger_config.go

@@ -182,18 +182,33 @@ var (
 
 func InitTriggerConfig() {
 	c_log.GlobalLogger.Info("主节点加载触发器插件 - 开始。")
-	// 下载所有触发器的文件
-	for _, trigger := range config.PlatformConfig.TaskTriggers {
-		triggerLocalPath := config.CloudConfig.TriggersDir + trigger.TriggerScriptPath
-		_ = util.CreateParentDir(triggerLocalPath)
-		c_log.GlobalLogger.Info("下载触发器插件从 ", trigger.TriggerScriptPath, " 到 ", triggerLocalPath)
-		config.OssMutex.Lock()
-		err := config.OssBucket.GetObjectToFile(trigger.TriggerScriptPath, triggerLocalPath)
-		config.OssMutex.Unlock()
-		if err != nil {
-			c_log.GlobalLogger.Error("下载 oss 上的触发器插件失败:", err)
-			continue
+	var triggerLocalPaths []string
+	if config.CloudConfig.TriggersOnline {
+		for _, trigger := range config.PlatformConfig.TaskTriggers {
+			triggerLocalPath := config.CloudConfig.TriggersDir + trigger.TriggerScriptPath
+			_ = util.CreateParentDir(triggerLocalPath)
+			config.OssMutex.Lock()
+			err := config.OssBucket.GetObjectToFile(trigger.TriggerScriptPath, triggerLocalPath)
+			config.OssMutex.Unlock()
+			if err != nil {
+				c_log.GlobalLogger.Error("下载 oss 上的触发器插件失败:", err)
+				continue
+			}
+			c_log.GlobalLogger.Info("下载触发器插件从 ", trigger.TriggerScriptPath, " 到 ", triggerLocalPath)
+			triggerLocalPaths = append(triggerLocalPaths, triggerLocalPath)
 		}
+	} else {
+		triggerLocalPaths = util.GetSoFilePaths(config.CloudConfig.TriggersDir)
+		for _, path := range triggerLocalPaths {
+			LabelMapTriggerId.Store(util.get, strconv.Itoa(trigger.TriggerId))
+		}
+	}
+	for _, trigger := range config.PlatformConfig.TaskTriggers {
+		LabelMapTriggerId.Store(labelString, strconv.Itoa(trigger.TriggerId))
+		c_log.GlobalLogger.Info("主节点加载触发器插件:【ros topic】=", topic2, ",【触发器label】=", labelString, "【触发器ID】=", trigger.TriggerId)
+	}
+	// 下载所有触发器的文件
+	for _, triggerLocalPath := range triggerLocalPaths {
 		// 载入插件到数组
 		open, err := plugin.Open(triggerLocalPath)
 		if err != nil {
@@ -488,15 +503,12 @@ func InitTriggerConfig() {
 			continue
 		}
 
-		label, err := open.Lookup("Label")
+		_, err = open.Lookup("Label")
 		if err != nil {
 			c_log.GlobalLogger.Error("加载本地插件 ", triggerLocalPath, " 中的 Label 方法失败。", err)
 			continue
 		}
-		labelFunc := label.(func() string)
-		labelString := labelFunc()
-		LabelMapTriggerId.Store(labelString, strconv.Itoa(trigger.TriggerId))
-		c_log.GlobalLogger.Info("主节点加载触发器插件:【ros topic】=", topic2, ",【触发器label】=", labelString, "【触发器ID】=", trigger.TriggerId)
+
 	}
 	c_log.GlobalLogger.Info("一共有", len(config.PlatformConfig.TaskTriggers), "个触发器。")
 }

+ 3 - 1
aarch64/pjisuv/master/main.go

@@ -19,7 +19,9 @@ func init() {
 	commonConfig.InitOssConfig()
 	// 初始化业务逻辑配置信息,配置文件在oss上(第2处配置,在oss文件)
 	commonConfig.InitCloudConfig()
-	go commonConfig.RefreshCloudConfig()
+	if commonConfig.CloudConfig.RefreshCloudConfig {
+		go commonConfig.RefreshCloudConfig()
+	}
 	// 初始化数据闭环平台的配置(第3处配置,在数据闭环平台接口)
 	commonConfig.InitPlatformConfig()
 	// 初始化ros节点

+ 3 - 1
aarch64/pjisuv/slave/main.go

@@ -18,7 +18,9 @@ func init() {
 	commonConfig.InitOssConfig()
 	// 初始化业务逻辑配置信息,配置文件在oss上(第2处配置,在oss文件)
 	commonConfig.InitCloudConfig()
-	go commonConfig.RefreshCloudConfig()
+	if commonConfig.CloudConfig.RefreshCloudConfig {
+		go commonConfig.RefreshCloudConfig()
+	}
 	// 初始化数据闭环平台的配置(第3处配置,在数据闭环平台接口)
 	commonConfig.InitPlatformConfig()
 	// 初始化ros节点

+ 22 - 0
common/util/u_io.go

@@ -9,6 +9,28 @@ import (
 	"strings"
 )
 
+func getFileNameWithoutExtension(absPath string) string {
+	file := filepath.Base(absPath)
+	ext := filepath.Ext(file)
+	return strings.TrimSuffix(file, ext)
+}
+
+func GetSoFilePaths(dir string) []string {
+	var paths []string
+	err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
+		if err == nil && !info.IsDir() && filepath.Ext(path) == ".so" {
+			absPath, _ := filepath.Abs(path)
+			paths = append(paths, absPath)
+		}
+		return nil
+	})
+	if err != nil {
+		fmt.Println("Error:", err)
+		return nil
+	}
+	return paths
+}
+
 // CreateDir 创建目录
 func CreateDir(directory string) {
 	if _, err := os.Stat(directory); os.IsNotExist(err) {