From 9bd68fc58488165a63269d7d151da14a38ddc662 Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Mon, 7 Jul 2025 21:21:57 +0530 Subject: [PATCH 1/9] fix: error response added for the thunderclient call fn --- .../src/client/device_operator.rs | 2 +- .../src/client/plugin_manager.rs | 15 +- .../src/client/thunder_client.rs | 6 +- .../src/client/thunder_client_pool.rs | 10 +- .../src/processors/thunder_analytics.rs | 1 + .../src/processors/thunder_device_info.rs | 253 ++++++++++++++++-- .../processors/thunder_persistent_store.rs | 55 +++- .../src/processors/thunder_rfc.rs | 11 +- .../src/processors/thunder_telemetry.rs | 2 +- 9 files changed, 318 insertions(+), 37 deletions(-) diff --git a/device/thunder_ripple_sdk/src/client/device_operator.rs b/device/thunder_ripple_sdk/src/client/device_operator.rs index 91196f29c..41d376308 100644 --- a/device/thunder_ripple_sdk/src/client/device_operator.rs +++ b/device/thunder_ripple_sdk/src/client/device_operator.rs @@ -28,7 +28,7 @@ pub const DEFAULT_DEVICE_OPERATION_TIMEOUT_SECS: u64 = 5; /// Each Device platform should implement this trait based on the underlying service #[async_trait] pub trait DeviceOperator: Clone { - async fn call(&self, request: DeviceCallRequest) -> DeviceResponseMessage; + async fn call(&self, request: DeviceCallRequest) -> Result; async fn subscribe( &self, diff --git a/device/thunder_ripple_sdk/src/client/plugin_manager.rs b/device/thunder_ripple_sdk/src/client/plugin_manager.rs index 11e12616e..bc3046193 100644 --- a/device/thunder_ripple_sdk/src/client/plugin_manager.rs +++ b/device/thunder_ripple_sdk/src/client/plugin_manager.rs @@ -398,7 +398,7 @@ impl PluginManager { )), }) .await; - if let Ok(plugin_error) = serde_json::from_value::(resp.message) { + if let Ok(plugin_error) = serde_json::from_value::(resp.unwrap().message) { return plugin_error.get_plugin_state(); } PluginState::Activated @@ -406,7 +406,7 @@ impl PluginManager { pub async fn current_plugin_state(&self, callsign: String) -> PluginState { let status_meth = Controller.method(format!("status@{}", callsign).as_str()); - let resp = self + let response = self .thunder_client .clone() .call(DeviceCallRequest { @@ -415,6 +415,17 @@ impl PluginManager { }) .await; + let resp = match response { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return PluginState::Missing; + } + }; + // For an unavailable plugin Thunder responds with a Code and Message if let Ok(plugin_error) = serde_json::from_value::(resp.message.clone()) { return plugin_error.get_plugin_state(); diff --git a/device/thunder_ripple_sdk/src/client/thunder_client.rs b/device/thunder_ripple_sdk/src/client/thunder_client.rs index 23d0ca64f..4ccaa4a82 100644 --- a/device/thunder_ripple_sdk/src/client/thunder_client.rs +++ b/device/thunder_ripple_sdk/src/client/thunder_client.rs @@ -244,7 +244,7 @@ impl ThunderClient { #[async_trait] impl DeviceOperator for ThunderClient { - async fn call(&self, request: DeviceCallRequest) -> DeviceResponseMessage { + async fn call(&self, request: DeviceCallRequest) -> Result { if !self.use_thunder_async { let (tx, rx) = oneshot::channel::(); let message = ThunderMessage::ThunderCallMessage(ThunderCallMessage { @@ -254,7 +254,7 @@ impl DeviceOperator for ThunderClient { }); self.send_message(message).await; - rx.await.unwrap() + rx.await } else { let (tx, rx) = oneshot::channel::(); let async_request = ThunderAsyncRequest::new(DeviceChannelRequest::Call(request)); @@ -262,7 +262,7 @@ impl DeviceOperator for ThunderClient { if let Some(async_client) = &self.thunder_async_client { async_client.send(async_request).await; } - rx.await.unwrap() + rx.await } } diff --git a/device/thunder_ripple_sdk/src/client/thunder_client_pool.rs b/device/thunder_ripple_sdk/src/client/thunder_client_pool.rs index c688eab2b..26f40aa1b 100644 --- a/device/thunder_ripple_sdk/src/client/thunder_client_pool.rs +++ b/device/thunder_ripple_sdk/src/client/thunder_client_pool.rs @@ -289,7 +289,10 @@ mod tests { params: None, }) .await; - assert_eq!(resp.message, "testMethod Request Response".to_string()); + assert_eq!( + resp.unwrap().message, + "testMethod Request Response".to_string() + ); }); } @@ -334,7 +337,10 @@ mod tests { params: None, }) .await; - assert_eq!(resp.message, "testMethod Request Response".to_string()); + assert_eq!( + resp.unwrap().message, + "testMethod Request Response".to_string() + ); // 5. test unsubscribe client diff --git a/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs b/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs index faa093bb9..48e54fd01 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs @@ -59,4 +59,5 @@ pub async fn send_to_analytics_plugin( )), }) .await + .expect("Failed to send analytics event") } diff --git a/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs b/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs index 7092f3692..eba1ecbc8 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs @@ -183,14 +183,23 @@ pub struct ThunderNetworkService; impl ThunderNetworkService { pub async fn has_internet(state: &ThunderState) -> bool { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::Network.method("isConnectedToInternet"), params: None, }) .await; - info!("{}", response.message); + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; let response = response.message.get("connectedToInternet"); if response.is_none() { return false; @@ -251,14 +260,24 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_serial_number(state: &ThunderState) -> String { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getSerialNumber"), params: None, }) .await; - info!("{}", resp.message); + + let resp = match response { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return "".to_string(); + } + }; resp.message["serialNumber"] .as_str() @@ -266,14 +285,25 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn model_info(state: &ThunderState) -> String { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getSystemVersions"), params: None, }) .await; - info!("{}", resp.message); + + let resp = match response { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return "".to_string(); + } + }; + let resp = resp.message.get("stbVersion"); if resp.is_none() { return "NA".to_owned(); @@ -302,20 +332,30 @@ impl ThunderDeviceInfoRequestProcessor { } async fn get_audio(state: &CachedState) -> HashMap { - let response = state + let response_result = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::DisplaySettings.method("getAudioFormat"), params: None, }) .await; - info!("{}", response.message); + let response = match response_result { + Ok(resp) => { + info!("Thunder call response msg: {}", resp.message); + resp + } + Err(e) => { + error!("Thunder call failed: {}", e); + return HashMap::new(); + } + }; + if !check_thunder_response_success(&response) { error!("{}", response.message); return HashMap::new(); } - get_audio_profile_from_value(response.message) + get_audio_profile_from_value(response.message.clone()) } async fn audio(state: CachedState, req: ExtnMessage) -> bool { @@ -336,14 +376,25 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_hdcp_support(state: ThunderState) -> HashMap { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::Hdcp.method("getSettopHDCPSupport"), params: None, }) .await; - info!("{}", response.message); + + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return HashMap::new(); + } + }; + let mut hdcp_response = HashMap::new(); let resp = response.message.get("supportedHDCPVersion"); @@ -398,13 +449,25 @@ impl ThunderDeviceInfoRequestProcessor { async fn get_hdcp_status(state: &CachedState) -> HDCPStatus { let mut response: HDCPStatus = HDCPStatus::default(); - let resp = state + let res = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::Hdcp.method("getHDCPStatus"), params: None, }) .await; + + let resp = match res { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return HDCPStatus::default(); + } + }; + info!("{}", resp.message); if let Ok(thdcp) = serde_json::from_value::(resp.message) { response = thdcp.hdcp_status; @@ -431,13 +494,25 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_hdr(state: ThunderState) -> HashMap { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::DisplaySettings.method("getTVHDRCapabilities"), params: None, }) .await; + + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return HashMap::new(); + } + }; + info!("{}", response.message); let supported_cap: u32 = response.message["capabilities"] .to_string() @@ -469,14 +544,25 @@ impl ThunderDeviceInfoRequestProcessor { pub async fn get_firmware_version(state: &ThunderState) -> FireboltSemanticVersion { let version: FireboltSemanticVersion; - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getSystemVersions"), params: None, }) .await; - info!("{}", resp.message); + + let resp = match response { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return FireboltSemanticVersion::default(); + } + }; + if let Ok(tsv) = serde_json::from_value::(resp.message) { let tsv_split = tsv.receiver_version.split('.'); let tsv_vec: Vec<&str> = tsv_split.collect(); @@ -535,14 +621,25 @@ impl ThunderDeviceInfoRequestProcessor { } async fn available_memory(state: CachedState, req: ExtnMessage) -> bool { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::RDKShell.method("getSystemMemory"), params: None, }) .await; - info!("{}", response.message); + + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; + if check_thunder_response_success(&response) { if let Some(v) = response.message["freeRam"].as_u64() { return Self::respond(state.get_client(), req, ExtnResponse::Value(json!(v))) @@ -555,7 +652,7 @@ impl ThunderDeviceInfoRequestProcessor { } async fn get_timezone_value(state: &ThunderState) -> Result { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getTimeZoneDST"), @@ -563,6 +660,17 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; + let response = match resp { + Ok(res) => { + info!("getTimeZoneDST: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return Err(RippleError::ServiceError); + } + }; + info!("getTimeZoneDST: {}", response.message); if check_thunder_response_success(&response) { if let Ok(v) = serde_json::from_value::(response.message) { @@ -616,7 +724,7 @@ impl ThunderDeviceInfoRequestProcessor { .to_string(), )); - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getTimeZones"), @@ -624,6 +732,17 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return Err(RippleError::ServiceError); + } + }; + if !check_thunder_response_success(&response) { return Err(RippleError::ProcessorError); } @@ -674,13 +793,25 @@ impl ThunderDeviceInfoRequestProcessor { } } async fn voice_guidance_enabled(state: CachedState, request: ExtnMessage) -> bool { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("isttsenabled"), params: None, }) .await; + + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; + if let Some(v) = response.message["isenabled"].as_bool() { return Self::respond(state.get_client(), request, ExtnResponse::Boolean(v)) .await @@ -700,13 +831,25 @@ impl ThunderDeviceInfoRequestProcessor { }) .to_string(), )); - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("enabletts"), params, }) .await; + + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; + if check_thunder_response_success(&response) { return Self::ack(state.get_client(), request).await.is_ok(); } @@ -714,13 +857,25 @@ impl ThunderDeviceInfoRequestProcessor { } async fn voice_guidance_speed(state: CachedState, request: ExtnMessage) -> bool { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("getttsconfiguration"), params: None, }) .await; + + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; + if let Some(rate) = response.message["rate"].as_f64() { return Self::respond( state.get_client(), @@ -734,7 +889,7 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_voice_guidance_speed(state: ThunderState) -> Result { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("getttsconfiguration"), @@ -742,6 +897,17 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return Err(()); + } + }; + if let Some(rate) = response.message["rate"].as_f64() { return Ok(scale_voice_speed_from_thunder_to_firebolt(rate as f32)); } @@ -760,13 +926,25 @@ impl ThunderDeviceInfoRequestProcessor { }) .to_string(), )); - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("setttsconfiguration"), params, }) .await; + + let response = match resp { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; + if check_thunder_response_success(&response) { return Self::ack(state.get_client(), request).await.is_ok(); } @@ -774,7 +952,7 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_power_state(state: &ThunderState) -> Result { - let dev_response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getPowerState"), @@ -782,6 +960,17 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; + let dev_response = match resp { + Ok(res) => { + info!("getPowerState call response msg: {}", res.message); + res + } + Err(e) => { + error!("getPowerState call failed: {}", e); + return Err(RippleError::ServiceError); + } + }; + if let Some(response) = dev_response.message.get("powerState").cloned() { if let Ok(v) = serde_json::from_value(response) { return Ok(v); @@ -804,13 +993,25 @@ impl ThunderDeviceInfoRequestProcessor { } async fn platform_build_info(state: CachedState, msg: ExtnMessage) -> bool { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getSystemVersions"), params: None, }) .await; + + let resp = match response { + Ok(res) => { + info!("getSystemVersions call response msg: {}", res.message); + res + } + Err(e) => { + error!("getSystemVersions call failed: {}", e); + return false; + } + }; + if let Ok(tsv) = serde_json::from_value::(resp.message) { let release_regex = Regex::new(r"([^_]*)_(.*)_(VBN|PROD[^_]*)_(.*)").unwrap(); let non_release_regex = diff --git a/device/thunder_ripple_sdk/src/processors/thunder_persistent_store.rs b/device/thunder_ripple_sdk/src/processors/thunder_persistent_store.rs index cbd605385..d3f2b8345 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_persistent_store.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_persistent_store.rs @@ -106,6 +106,17 @@ impl ThunderStorageRequestProcessor { }) .await; + let response = match response { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return Err(RippleError::ProcessorError); + } + }; + match response.message["success"].as_bool() { Some(success) => Ok(success), None => Err(RippleError::ProcessorError), @@ -147,6 +158,18 @@ impl ThunderStorageRequestProcessor { params, }) .await; + + let response = match response { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; + if response.message.get("success").is_none() || !response.message["success"].as_bool().unwrap_or_default() { @@ -168,6 +191,17 @@ impl ThunderStorageRequestProcessor { }) .await; + let response = match response { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; + if response.message.get("success").is_none() || !response.message["success"].as_bool().unwrap_or_default() { @@ -203,7 +237,17 @@ impl ThunderStorageRequestProcessor { params, }) .await; - info!("{}", response.message); + + let response = match response { + Ok(res) => { + info!("Thunder call response msg: {}", res.message); + res + } + Err(e) => { + error!("Thunder call failed: {}", e); + return Err(RippleError::ProcessorError); + } + }; if let Some(status) = response.message["success"].as_bool() { if status { @@ -270,6 +314,15 @@ impl ThunderStorageRequestProcessor { params, }) .await; + + let response = match response { + Ok(resp) => resp, + Err(e) => { + error!("Thunder call failed: {:?}", e); + return Err(RippleError::InvalidOutput); + } + }; + info!("{}", response.message); match response.message["success"].as_bool() { diff --git a/device/thunder_ripple_sdk/src/processors/thunder_rfc.rs b/device/thunder_ripple_sdk/src/processors/thunder_rfc.rs index d315c99d3..356a064a6 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_rfc.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_rfc.rs @@ -118,10 +118,19 @@ impl ExtnRequestProcessor for ThunderRFCProcessor { params: Some(DeviceChannelParams::Json(rfc_request)), }) .await; + + let response = match resp { + Ok(res) => res, + Err(e) => { + error!("Thunder call failed: {}", e); + return false; + } + }; + Self::respond( state.get_client(), msg, - match serde_json::from_value::(resp.message) { + match serde_json::from_value::(response.message) { Ok(rfc_response) => rfc_response.get_extn_response(&extracted_message), Err(e) => { error!("rfc serialization error {:?}", e); diff --git a/device/thunder_ripple_sdk/src/processors/thunder_telemetry.rs b/device/thunder_ripple_sdk/src/processors/thunder_telemetry.rs index 97011068c..f5a8f3541 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_telemetry.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_telemetry.rs @@ -161,7 +161,7 @@ impl ExtnEventProcessor for ThunderTelemetryProcessor { if let Ok(data) = render_event_data(&extracted_message) { info!("Sending telemetry event: {}", data); - state + let _ = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::Telemetry.unversioned_method("logApplicationEvent"), From 28ccbcf836df0d6708430d9baf0dad3883dbeaa4 Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Thu, 10 Jul 2025 14:02:29 +0530 Subject: [PATCH 2/9] fix: review comments fixed --- .../thunder_ripple_sdk/src/client/device_operator.rs | 7 +++++-- .../thunder_ripple_sdk/src/client/plugin_manager.rs | 12 +++++++++--- .../src/processors/thunder_analytics.rs | 10 ++++++++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/device/thunder_ripple_sdk/src/client/device_operator.rs b/device/thunder_ripple_sdk/src/client/device_operator.rs index 41d376308..c6c442de9 100644 --- a/device/thunder_ripple_sdk/src/client/device_operator.rs +++ b/device/thunder_ripple_sdk/src/client/device_operator.rs @@ -174,11 +174,14 @@ impl DeviceResponseMessage { json_resp: &JsonRpcApiResponse, sub_id: Option, ) -> Option { + let json_value = serde_json::to_value(json_resp).ok(); let mut device_response_msg = None; if let Some(res) = &json_resp.result { device_response_msg = Some(DeviceResponseMessage::new(res.clone(), sub_id)); - } else if let Some(er) = &json_resp.error { - device_response_msg = Some(DeviceResponseMessage::new(er.clone(), sub_id)); + } else if let Some(_er) = &json_resp.error { + if let Some(val) = json_value { + device_response_msg = Some(DeviceResponseMessage::new(val, sub_id)); + } } else if json_resp.clone().method.is_some() { if let Some(params) = &json_resp.params { if let Ok(dev_resp) = serde_json::to_value(params) { diff --git a/device/thunder_ripple_sdk/src/client/plugin_manager.rs b/device/thunder_ripple_sdk/src/client/plugin_manager.rs index bc3046193..1bb81ec95 100644 --- a/device/thunder_ripple_sdk/src/client/plugin_manager.rs +++ b/device/thunder_ripple_sdk/src/client/plugin_manager.rs @@ -398,10 +398,16 @@ impl PluginManager { )), }) .await; - if let Ok(plugin_error) = serde_json::from_value::(resp.unwrap().message) { - return plugin_error.get_plugin_state(); + + match resp { + Ok(resp) => { + if let Ok(plugin_error) = serde_json::from_value::(resp.message) { + return plugin_error.get_plugin_state(); + } + PluginState::Activated + } + Err(_) => PluginState::Missing, } - PluginState::Activated } pub async fn current_plugin_state(&self, callsign: String) -> PluginState { diff --git a/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs b/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs index 48e54fd01..f81f2a7e0 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs @@ -50,7 +50,7 @@ pub async fn send_to_analytics_plugin( ) -> DeviceResponseMessage { let method: String = ThunderPlugin::Analytics.method("sendEvent"); - thunder_state + match thunder_state .get_thunder_client() .call(DeviceCallRequest { method, @@ -59,5 +59,11 @@ pub async fn send_to_analytics_plugin( )), }) .await - .expect("Failed to send analytics event") + { + Ok(response) => response, + Err(_) => DeviceResponseMessage { + message: Value::Null, + sub_id: None, + }, + } } From b23f66adbafd73aee0c97a897b289f4ef8204a6d Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Thu, 10 Jul 2025 14:26:40 +0530 Subject: [PATCH 3/9] chore: tiny log changes --- .../src/client/plugin_manager.rs | 14 +++++++++++--- .../src/client/thunder_client.rs | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/device/thunder_ripple_sdk/src/client/plugin_manager.rs b/device/thunder_ripple_sdk/src/client/plugin_manager.rs index 1bb81ec95..bb398df32 100644 --- a/device/thunder_ripple_sdk/src/client/plugin_manager.rs +++ b/device/thunder_ripple_sdk/src/client/plugin_manager.rs @@ -227,7 +227,7 @@ impl PluginManager { } }); - thunder_client + let resp = thunder_client .clone() .subscribe( DeviceSubscribeRequest { @@ -238,8 +238,16 @@ impl PluginManager { }, sub_tx, ) - .await - .ok(); + .await; + + if let Ok(response) = resp.as_ref() { + if let Some(error) = response.message.get("error") { + error!("Failed to subscribe to statechange, error:{:?}", error); + } else { + info!("Successfully subscribed to statechange"); + } + } + // Spawn command thread tokio::spawn(async move { while let Some(command) = rx.recv().await { diff --git a/device/thunder_ripple_sdk/src/client/thunder_client.rs b/device/thunder_ripple_sdk/src/client/thunder_client.rs index 4ccaa4a82..7721b6031 100644 --- a/device/thunder_ripple_sdk/src/client/thunder_client.rs +++ b/device/thunder_ripple_sdk/src/client/thunder_client.rs @@ -285,7 +285,7 @@ impl DeviceOperator for ThunderClient { self.send_message(msg).await; let result = rx.await; if let Err(ref e) = result { - error!("subscribe: e={:?}", e); + error!("subscribe: error={:?}", e); } result } else if let Some(subscribe_request) = @@ -298,7 +298,7 @@ impl DeviceOperator for ThunderClient { } let result = rx.await; if let Err(ref e) = result { - error!("subscribe: e={:?}", e); + error!("subscribe: error={:?}", e); } result } else { From 1ffb3c56aaea7eb3664230583003e4d43d0e3a9c Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Fri, 25 Jul 2025 17:19:48 +0530 Subject: [PATCH 4/9] fix: modified the error handling of call methods --- .../src/client/device_operator.rs | 2 +- .../src/client/plugin_manager.rs | 39 ++- .../src/client/thunder_client.rs | 7 +- .../src/client/thunder_client_pool.rs | 10 +- .../src/processors/thunder_analytics.rs | 16 +- .../src/processors/thunder_device_info.rs | 306 +++++------------- .../processors/thunder_persistent_store.rs | 58 +--- .../src/processors/thunder_rfc.rs | 13 +- 8 files changed, 132 insertions(+), 319 deletions(-) diff --git a/device/thunder_ripple_sdk/src/client/device_operator.rs b/device/thunder_ripple_sdk/src/client/device_operator.rs index c6c442de9..d823fbe58 100644 --- a/device/thunder_ripple_sdk/src/client/device_operator.rs +++ b/device/thunder_ripple_sdk/src/client/device_operator.rs @@ -28,7 +28,7 @@ pub const DEFAULT_DEVICE_OPERATION_TIMEOUT_SECS: u64 = 5; /// Each Device platform should implement this trait based on the underlying service #[async_trait] pub trait DeviceOperator: Clone { - async fn call(&self, request: DeviceCallRequest) -> Result; + async fn call(&self, request: DeviceCallRequest) -> DeviceResponseMessage; async fn subscribe( &self, diff --git a/device/thunder_ripple_sdk/src/client/plugin_manager.rs b/device/thunder_ripple_sdk/src/client/plugin_manager.rs index bb398df32..86bd2b82d 100644 --- a/device/thunder_ripple_sdk/src/client/plugin_manager.rs +++ b/device/thunder_ripple_sdk/src/client/plugin_manager.rs @@ -407,20 +407,20 @@ impl PluginManager { }) .await; - match resp { - Ok(resp) => { - if let Ok(plugin_error) = serde_json::from_value::(resp.message) { - return plugin_error.get_plugin_state(); - } - PluginState::Activated + if let Some(error) = resp.message.get("error") { + error!("activate_plugin call FAILED response of error:{:?}", error); + return PluginState::Error; + } else { + if let Ok(plugin_error) = serde_json::from_value::(resp.message) { + return plugin_error.get_plugin_state(); } - Err(_) => PluginState::Missing, + PluginState::Activated } } pub async fn current_plugin_state(&self, callsign: String) -> PluginState { let status_meth = Controller.method(format!("status@{}", callsign).as_str()); - let response = self + let resp = self .thunder_client .clone() .call(DeviceCallRequest { @@ -429,20 +429,17 @@ impl PluginManager { }) .await; - let resp = match response { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return PluginState::Missing; + if let Some(error) = resp.message.get("error") { + error!( + "current_plugin_state call FAILED response of error:{:?}", + error + ); + return PluginState::Error; + } else { + // For an unavailable plugin Thunder responds with a Code and Message + if let Ok(plugin_error) = serde_json::from_value::(resp.message.clone()) { + return plugin_error.get_plugin_state(); } - }; - - // For an unavailable plugin Thunder responds with a Code and Message - if let Ok(plugin_error) = serde_json::from_value::(resp.message.clone()) { - return plugin_error.get_plugin_state(); } let status_res: Result, serde_json::Error> = diff --git a/device/thunder_ripple_sdk/src/client/thunder_client.rs b/device/thunder_ripple_sdk/src/client/thunder_client.rs index 7721b6031..8f17094d3 100644 --- a/device/thunder_ripple_sdk/src/client/thunder_client.rs +++ b/device/thunder_ripple_sdk/src/client/thunder_client.rs @@ -244,7 +244,7 @@ impl ThunderClient { #[async_trait] impl DeviceOperator for ThunderClient { - async fn call(&self, request: DeviceCallRequest) -> Result { + async fn call(&self, request: DeviceCallRequest) -> DeviceResponseMessage { if !self.use_thunder_async { let (tx, rx) = oneshot::channel::(); let message = ThunderMessage::ThunderCallMessage(ThunderCallMessage { @@ -253,8 +253,7 @@ impl DeviceOperator for ThunderClient { callback: tx, }); self.send_message(message).await; - - rx.await + rx.await.unwrap() } else { let (tx, rx) = oneshot::channel::(); let async_request = ThunderAsyncRequest::new(DeviceChannelRequest::Call(request)); @@ -262,7 +261,7 @@ impl DeviceOperator for ThunderClient { if let Some(async_client) = &self.thunder_async_client { async_client.send(async_request).await; } - rx.await + rx.await.unwrap() } } diff --git a/device/thunder_ripple_sdk/src/client/thunder_client_pool.rs b/device/thunder_ripple_sdk/src/client/thunder_client_pool.rs index 26f40aa1b..c688eab2b 100644 --- a/device/thunder_ripple_sdk/src/client/thunder_client_pool.rs +++ b/device/thunder_ripple_sdk/src/client/thunder_client_pool.rs @@ -289,10 +289,7 @@ mod tests { params: None, }) .await; - assert_eq!( - resp.unwrap().message, - "testMethod Request Response".to_string() - ); + assert_eq!(resp.message, "testMethod Request Response".to_string()); }); } @@ -337,10 +334,7 @@ mod tests { params: None, }) .await; - assert_eq!( - resp.unwrap().message, - "testMethod Request Response".to_string() - ); + assert_eq!(resp.message, "testMethod Request Response".to_string()); // 5. test unsubscribe client diff --git a/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs b/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs index f81f2a7e0..0a8023a89 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_analytics.rs @@ -15,6 +15,7 @@ // SPDX-License-Identifier: Apache-2.0 // +use ripple_sdk::log::error; use serde::{Deserialize, Serialize}; use serde_json::Value; @@ -50,7 +51,7 @@ pub async fn send_to_analytics_plugin( ) -> DeviceResponseMessage { let method: String = ThunderPlugin::Analytics.method("sendEvent"); - match thunder_state + let resp = thunder_state .get_thunder_client() .call(DeviceCallRequest { method, @@ -58,12 +59,15 @@ pub async fn send_to_analytics_plugin( serde_json::to_string(&metrics_event).unwrap(), )), }) - .await - { - Ok(response) => response, - Err(_) => DeviceResponseMessage { + .await; + + if let Some(error) = resp.message.get("error") { + error!("sendEvent call FAILED response of error:{:?}", error); + DeviceResponseMessage { message: Value::Null, sub_id: None, - }, + } + } else { + resp } } diff --git a/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs b/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs index eba1ecbc8..2a7569d7f 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs @@ -190,21 +190,21 @@ impl ThunderNetworkService { params: None, }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; - let response = response.message.get("connectedToInternet"); - if response.is_none() { + + if let Some(error) = resp.message.get("error") { + error!( + "isConnectedToInternet call FAILED response of error:{:?}", + error + ); return false; } - let v = response.unwrap().as_bool().unwrap_or(false); + + let response = match resp.message.get("connectedToInternet") { + Some(val) => val, + None => return false, + }; + + let v = response.as_bool().unwrap_or(false); let _ = state .get_client() .request_transient(RippleContextUpdateRequest::InternetStatus(v.into())); @@ -260,7 +260,7 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_serial_number(state: &ThunderState) -> String { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getSerialNumber"), @@ -268,16 +268,10 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let resp = match response { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return "".to_string(); - } - }; + if let Some(error) = resp.message.get("error") { + error!("getSerialNumber call FAILED response of error:{:?}", error); + return "".to_string(); + } resp.message["serialNumber"] .as_str() @@ -285,7 +279,7 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn model_info(state: &ThunderState) -> String { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getSystemVersions"), @@ -293,22 +287,19 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let resp = match response { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return "".to_string(); - } - }; - - let resp = resp.message.get("stbVersion"); - if resp.is_none() { - return "NA".to_owned(); + if let Some(error) = resp.message.get("error") { + error!( + "getSystemVersions call FAILED response of error:{:?}", + error + ); + return "".to_string(); } - let resp = resp.unwrap().as_str().unwrap().trim_matches('"'); + + let response = match resp.message.get("stbVersion") { + Some(val) => val, + None => return "NA".to_owned(), + }; + let resp = response.as_str().unwrap().trim_matches('"'); let split_string: Vec<&str> = resp.split('_').collect(); String::from(split_string[0]) } @@ -332,23 +323,13 @@ impl ThunderDeviceInfoRequestProcessor { } async fn get_audio(state: &CachedState) -> HashMap { - let response_result = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::DisplaySettings.method("getAudioFormat"), params: None, }) .await; - let response = match response_result { - Ok(resp) => { - info!("Thunder call response msg: {}", resp.message); - resp - } - Err(e) => { - error!("Thunder call failed: {}", e); - return HashMap::new(); - } - }; if !check_thunder_response_success(&response) { error!("{}", response.message); @@ -376,7 +357,7 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_hdcp_support(state: ThunderState) -> HashMap { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::Hdcp.method("getSettopHDCPSupport"), @@ -384,17 +365,6 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return HashMap::new(); - } - }; - let mut hdcp_response = HashMap::new(); let resp = response.message.get("supportedHDCPVersion"); @@ -449,7 +419,7 @@ impl ThunderDeviceInfoRequestProcessor { async fn get_hdcp_status(state: &CachedState) -> HDCPStatus { let mut response: HDCPStatus = HDCPStatus::default(); - let res = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::Hdcp.method("getHDCPStatus"), @@ -457,18 +427,7 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let resp = match res { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return HDCPStatus::default(); - } - }; - - info!("{}", resp.message); + info!("getHDCPStatus call response msg: {}", resp.message); if let Ok(thdcp) = serde_json::from_value::(resp.message) { response = thdcp.hdcp_status; } @@ -494,7 +453,7 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_hdr(state: ThunderState) -> HashMap { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::DisplaySettings.method("getTVHDRCapabilities"), @@ -502,18 +461,18 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return HashMap::new(); - } - }; + if let Some(error) = response.message.get("error") { + error!( + "getTVHDRCapabilities call FAILED response of error:{:?}", + error + ); + return HashMap::new(); + } - info!("{}", response.message); + info!( + "getTVHDRCapabilities call response msg: {}", + response.message + ); let supported_cap: u32 = response.message["capabilities"] .to_string() .parse() @@ -544,7 +503,7 @@ impl ThunderDeviceInfoRequestProcessor { pub async fn get_firmware_version(state: &ThunderState) -> FireboltSemanticVersion { let version: FireboltSemanticVersion; - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getSystemVersions"), @@ -552,16 +511,13 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let resp = match response { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return FireboltSemanticVersion::default(); - } - }; + if let Some(error) = resp.message.get("error") { + error!( + "getSystemVersions call FAILED response of error:{:?}", + error + ); + return FireboltSemanticVersion::default(); + } if let Ok(tsv) = serde_json::from_value::(resp.message) { let tsv_split = tsv.receiver_version.split('.'); @@ -621,7 +577,7 @@ impl ThunderDeviceInfoRequestProcessor { } async fn available_memory(state: CachedState, req: ExtnMessage) -> bool { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::RDKShell.method("getSystemMemory"), @@ -629,17 +585,6 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; - if check_thunder_response_success(&response) { if let Some(v) = response.message["freeRam"].as_u64() { return Self::respond(state.get_client(), req, ExtnResponse::Value(json!(v))) @@ -647,12 +592,12 @@ impl ThunderDeviceInfoRequestProcessor { .is_ok(); } } - error!("{}", response.message); + error!("getSystemMemory call response msg: {}", response.message); Self::handle_error(state.get_client(), req, RippleError::ProcessorError).await } async fn get_timezone_value(state: &ThunderState) -> Result { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getTimeZoneDST"), @@ -660,18 +605,7 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("getTimeZoneDST: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return Err(RippleError::ServiceError); - } - }; - - info!("getTimeZoneDST: {}", response.message); + info!("getTimeZoneDST call response msg: {}", response.message); if check_thunder_response_success(&response) { if let Ok(v) = serde_json::from_value::(response.message) { return Ok(v.time_zone); @@ -724,7 +658,7 @@ impl ThunderDeviceInfoRequestProcessor { .to_string(), )); - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getTimeZones"), @@ -732,17 +666,6 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return Err(RippleError::ServiceError); - } - }; - if !check_thunder_response_success(&response) { return Err(RippleError::ProcessorError); } @@ -793,7 +716,7 @@ impl ThunderDeviceInfoRequestProcessor { } } async fn voice_guidance_enabled(state: CachedState, request: ExtnMessage) -> bool { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("isttsenabled"), @@ -801,17 +724,6 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; - if let Some(v) = response.message["isenabled"].as_bool() { return Self::respond(state.get_client(), request, ExtnResponse::Boolean(v)) .await @@ -831,7 +743,7 @@ impl ThunderDeviceInfoRequestProcessor { }) .to_string(), )); - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("enabletts"), @@ -839,17 +751,6 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; - if check_thunder_response_success(&response) { return Self::ack(state.get_client(), request).await.is_ok(); } @@ -857,7 +758,7 @@ impl ThunderDeviceInfoRequestProcessor { } async fn voice_guidance_speed(state: CachedState, request: ExtnMessage) -> bool { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("getttsconfiguration"), @@ -865,16 +766,13 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; + if let Some(error) = response.message.get("error") { + error!( + "getttsconfiguration call FAILED response of error:{:?}", + error + ); + return false; + } if let Some(rate) = response.message["rate"].as_f64() { return Self::respond( @@ -889,7 +787,7 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_voice_guidance_speed(state: ThunderState) -> Result { - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("getttsconfiguration"), @@ -897,16 +795,13 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return Err(()); - } - }; + if let Some(error) = response.message.get("error") { + error!( + "getttsconfiguration call FAILED response of error:{:?}", + error + ); + return Err(()); + } if let Some(rate) = response.message["rate"].as_f64() { return Ok(scale_voice_speed_from_thunder_to_firebolt(rate as f32)); @@ -926,7 +821,7 @@ impl ThunderDeviceInfoRequestProcessor { }) .to_string(), )); - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::TextToSpeech.method("setttsconfiguration"), @@ -934,17 +829,6 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let response = match resp { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; - if check_thunder_response_success(&response) { return Self::ack(state.get_client(), request).await.is_ok(); } @@ -952,7 +836,7 @@ impl ThunderDeviceInfoRequestProcessor { } pub async fn get_power_state(state: &ThunderState) -> Result { - let resp = state + let dev_response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getPowerState"), @@ -960,17 +844,6 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let dev_response = match resp { - Ok(res) => { - info!("getPowerState call response msg: {}", res.message); - res - } - Err(e) => { - error!("getPowerState call failed: {}", e); - return Err(RippleError::ServiceError); - } - }; - if let Some(response) = dev_response.message.get("powerState").cloned() { if let Ok(v) = serde_json::from_value(response) { return Ok(v); @@ -993,7 +866,7 @@ impl ThunderDeviceInfoRequestProcessor { } async fn platform_build_info(state: CachedState, msg: ExtnMessage) -> bool { - let response = state + let resp = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getSystemVersions"), @@ -1001,16 +874,13 @@ impl ThunderDeviceInfoRequestProcessor { }) .await; - let resp = match response { - Ok(res) => { - info!("getSystemVersions call response msg: {}", res.message); - res - } - Err(e) => { - error!("getSystemVersions call failed: {}", e); - return false; - } - }; + if let Some(error) = resp.message.get("error") { + error!( + "getSystemVersions call FAILED response of error:{:?}", + error + ); + return false; + } if let Ok(tsv) = serde_json::from_value::(resp.message) { let release_regex = Regex::new(r"([^_]*)_(.*)_(VBN|PROD[^_]*)_(.*)").unwrap(); diff --git a/device/thunder_ripple_sdk/src/processors/thunder_persistent_store.rs b/device/thunder_ripple_sdk/src/processors/thunder_persistent_store.rs index d3f2b8345..676b09c55 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_persistent_store.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_persistent_store.rs @@ -106,17 +106,6 @@ impl ThunderStorageRequestProcessor { }) .await; - let response = match response { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return Err(RippleError::ProcessorError); - } - }; - match response.message["success"].as_bool() { Some(success) => Ok(success), None => Err(RippleError::ProcessorError), @@ -159,17 +148,6 @@ impl ThunderStorageRequestProcessor { }) .await; - let response = match response { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; - if response.message.get("success").is_none() || !response.message["success"].as_bool().unwrap_or_default() { @@ -191,17 +169,6 @@ impl ThunderStorageRequestProcessor { }) .await; - let response = match response { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; - if response.message.get("success").is_none() || !response.message["success"].as_bool().unwrap_or_default() { @@ -238,17 +205,6 @@ impl ThunderStorageRequestProcessor { }) .await; - let response = match response { - Ok(res) => { - info!("Thunder call response msg: {}", res.message); - res - } - Err(e) => { - error!("Thunder call failed: {}", e); - return Err(RippleError::ProcessorError); - } - }; - if let Some(status) = response.message["success"].as_bool() { if status { let value_resp_res = serde_json::from_value(response.message); @@ -315,16 +271,12 @@ impl ThunderStorageRequestProcessor { }) .await; - let response = match response { - Ok(resp) => resp, - Err(e) => { - error!("Thunder call failed: {:?}", e); - return Err(RippleError::InvalidOutput); - } - }; - - info!("{}", response.message); + if let Some(error) = response.message.get("error") { + error!("setValue call FAILED response of error:{:?}", error); + return Err(RippleError::InvalidOutput); + } + info!("setValue call response msg: {}", response.message); match response.message["success"].as_bool() { Some(v) => Ok(v), None => Err(RippleError::InvalidOutput), diff --git a/device/thunder_ripple_sdk/src/processors/thunder_rfc.rs b/device/thunder_ripple_sdk/src/processors/thunder_rfc.rs index 356a064a6..a592cea0c 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_rfc.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_rfc.rs @@ -111,7 +111,7 @@ impl ExtnRequestProcessor for ThunderRFCProcessor { ) -> bool { let flag = extracted_message.flag.clone(); let rfc_request = json!({ "rfcList": vec![flag] }).to_string(); - let resp = state + let response = state .get_thunder_client() .call(DeviceCallRequest { method: ThunderPlugin::System.method("getRFCConfig"), @@ -119,13 +119,10 @@ impl ExtnRequestProcessor for ThunderRFCProcessor { }) .await; - let response = match resp { - Ok(res) => res, - Err(e) => { - error!("Thunder call failed: {}", e); - return false; - } - }; + if let Some(error) = response.message.get("error") { + error!("getRFCConfig call FAILED response of error:{:?}", error); + return false; + } Self::respond( state.get_client(), From 3dcbca8a1bea6012439a7e071ee02e2e5ab4be31 Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Fri, 25 Jul 2025 17:26:06 +0530 Subject: [PATCH 5/9] chore: log modified --- .../broker/thunder/thunder_plugins_status_mgr.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/core/main/src/broker/thunder/thunder_plugins_status_mgr.rs b/core/main/src/broker/thunder/thunder_plugins_status_mgr.rs index f18587cbb..1fb724c11 100644 --- a/core/main/src/broker/thunder/thunder_plugins_status_mgr.rs +++ b/core/main/src/broker/thunder/thunder_plugins_status_mgr.rs @@ -366,7 +366,10 @@ impl StatusManager { if !pending_requests.is_empty() { for pending_request in pending_requests { if expired { - error!("Expired request: {:?}", pending_request); + error!( + "plugin activation timeout for request: {:?}", + pending_request + ); callback .send_error(pending_request, RippleError::ServiceError) .await; @@ -413,7 +416,10 @@ impl StatusManager { for pending_request in pending_requests { if expired { - error!("Expired request: {:?}", pending_request); + error!( + "plugin activation timeout for request: {:?}", + pending_request + ); callback .send_error(pending_request, RippleError::ServiceError) .await; @@ -492,7 +498,10 @@ impl StatusManager { for pending_request in pending_requests { if expired { - error!("Expired request: {:?}", pending_request); + error!( + "plugin activation timeout for request: {:?}", + pending_request + ); callback .send_error(pending_request, RippleError::ServiceError) .await; From 515a1b508be62c36b861fec06272a176f9bb9f95 Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Fri, 25 Jul 2025 17:32:36 +0530 Subject: [PATCH 6/9] fix: clippy fix --- device/thunder_ripple_sdk/src/client/plugin_manager.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device/thunder_ripple_sdk/src/client/plugin_manager.rs b/device/thunder_ripple_sdk/src/client/plugin_manager.rs index 86bd2b82d..63a9e8258 100644 --- a/device/thunder_ripple_sdk/src/client/plugin_manager.rs +++ b/device/thunder_ripple_sdk/src/client/plugin_manager.rs @@ -409,7 +409,7 @@ impl PluginManager { if let Some(error) = resp.message.get("error") { error!("activate_plugin call FAILED response of error:{:?}", error); - return PluginState::Error; + PluginState::Error } else { if let Ok(plugin_error) = serde_json::from_value::(resp.message) { return plugin_error.get_plugin_state(); From e8874842b08c072a74bab19ff1f57a2e99c1b395 Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Fri, 25 Jul 2025 19:38:42 +0530 Subject: [PATCH 7/9] feat: RPPL-3298: Bump concourse From d392a4e90586a7d312272400a97609674ead1ead Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Tue, 29 Jul 2025 21:20:34 +0530 Subject: [PATCH 8/9] fix: reviwe comments fixed --- device/thunder_ripple_sdk/src/client/plugin_manager.rs | 2 ++ device/thunder_ripple_sdk/src/processors/thunder_device_info.rs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/device/thunder_ripple_sdk/src/client/plugin_manager.rs b/device/thunder_ripple_sdk/src/client/plugin_manager.rs index 63a9e8258..2b0ba7c66 100644 --- a/device/thunder_ripple_sdk/src/client/plugin_manager.rs +++ b/device/thunder_ripple_sdk/src/client/plugin_manager.rs @@ -246,6 +246,8 @@ impl PluginManager { } else { info!("Successfully subscribed to statechange"); } + } else if let Err(e) = resp.as_ref() { + error!("Failed to subscribe to statechange, error: {:?}", e); } // Spawn command thread diff --git a/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs b/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs index 2a7569d7f..07ad04e26 100644 --- a/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs +++ b/device/thunder_ripple_sdk/src/processors/thunder_device_info.rs @@ -336,7 +336,7 @@ impl ThunderDeviceInfoRequestProcessor { return HashMap::new(); } - get_audio_profile_from_value(response.message.clone()) + get_audio_profile_from_value(response.message) } async fn audio(state: CachedState, req: ExtnMessage) -> bool { From e65223123203817c7c96a7dd520419d68e54376a Mon Sep 17 00:00:00 2001 From: nnaveen979 Date: Thu, 11 Sep 2025 13:16:36 +0530 Subject: [PATCH 9/9] feat: RPPL-3298: Bump concourse