diff --git a/crates/extensions/tedge_config_manager/src/actor.rs b/crates/extensions/tedge_config_manager/src/actor.rs index 2ca875ad433..9301d0712fa 100644 --- a/crates/extensions/tedge_config_manager/src/actor.rs +++ b/crates/extensions/tedge_config_manager/src/actor.rs @@ -45,6 +45,7 @@ fan_in_message_type!(ConfigOutput[MqttMessage, ConfigDownloadRequest]: Debug); pub struct ConfigManagerActor { config: ConfigManagerConfig, + plugin_config: PluginConfig, pending_downloads: HashMap, mqtt_publisher: LoggingSender, messages: SimpleMessageBox, @@ -82,6 +83,7 @@ impl Actor for ConfigManagerActor { impl ConfigManagerActor { pub fn new( config: ConfigManagerConfig, + plugin_config: PluginConfig, mqtt_publisher: LoggingSender, messages: SimpleMessageBox, http_proxy: ClientMessageBox, @@ -89,6 +91,7 @@ impl ConfigManagerActor { ) -> Self { ConfigManagerActor { config, + plugin_config, pending_downloads: HashMap::new(), mqtt_publisher, messages, @@ -191,8 +194,9 @@ impl ConfigManagerActor { &mut self, request: &ConfigSnapshotCmdPayload, ) -> Result { - let plugin_config = PluginConfig::new(&self.config.plugin_config_path); - let file_entry = plugin_config.get_file_entry_from_type(&request.config_type)?; + let file_entry = self + .plugin_config + .get_file_entry_from_type(&request.config_type)?; let config_content = std::fs::read_to_string(&file_entry.path)?; @@ -256,8 +260,9 @@ impl ConfigManagerActor { topic: &Topic, request: &ConfigUpdateCmdPayload, ) -> Result<(), ConfigManagementError> { - let plugin_config = PluginConfig::new(&self.config.plugin_config_path); - let file_entry = plugin_config.get_file_entry_from_type(&request.config_type)?; + let file_entry = self + .plugin_config + .get_file_entry_from_type(&request.config_type)?; let download_request = DownloadRequest::new(&request.tedge_url, Path::new(&file_entry.path)) @@ -330,17 +335,13 @@ impl ConfigManagerActor { } async fn reload_supported_config_types(&mut self) -> Result<(), ChannelError> { - let plugin_config: PluginConfig = - PluginConfig::new(self.config.plugin_config_path.as_path()); - self.publish_supported_config_types(&plugin_config).await + self.plugin_config = PluginConfig::new(self.config.plugin_config_path.as_path()); + self.publish_supported_config_types().await } /// updates the config types - async fn publish_supported_config_types( - &mut self, - plugin_config: &PluginConfig, - ) -> Result<(), ChannelError> { - let mut config_types = plugin_config.get_all_file_types(); + async fn publish_supported_config_types(&mut self) -> Result<(), ChannelError> { + let mut config_types = self.plugin_config.get_all_file_types(); config_types.sort(); let payload = json!({ "types": config_types }).to_string(); for topic in self.config.config_reload_topics.patterns.iter() { diff --git a/crates/extensions/tedge_config_manager/src/lib.rs b/crates/extensions/tedge_config_manager/src/lib.rs index e4dbf222341..6ae2e87fcba 100644 --- a/crates/extensions/tedge_config_manager/src/lib.rs +++ b/crates/extensions/tedge_config_manager/src/lib.rs @@ -37,6 +37,7 @@ use tedge_utils::file::FileError; /// This is an actor builder. pub struct ConfigManagerBuilder { config: ConfigManagerConfig, + plugin_config: PluginConfig, box_builder: SimpleMessageBoxBuilder, mqtt_publisher: DynSender, http_proxy: ClientMessageBox, @@ -57,6 +58,8 @@ impl ConfigManagerBuilder { ) -> Result { Self::init(&config)?; + let plugin_config = PluginConfig::new(config.plugin_config_path.as_path()); + let box_builder = SimpleMessageBoxBuilder::new("Config Manager", 16); let mqtt_publisher = mqtt.connect_consumer( @@ -76,6 +79,7 @@ impl ConfigManagerBuilder { Ok(ConfigManagerBuilder { config, + plugin_config, box_builder, mqtt_publisher, http_proxy, @@ -129,6 +133,7 @@ impl Builder for ConfigManagerBuilder { Ok(ConfigManagerActor::new( self.config, + self.plugin_config, mqtt_publisher, message_box, self.http_proxy,