Преглед изворни кода

dnetview: deserialize log to RingBuffer

Parse the incoming log as a RingBuffer and stop dnetview from
crashing. This is a partial intergration of the /net upgrade: f3659261dc0

There is a bug where message logs are showing as empty.
lunar-mining пре 3 година
родитељ
комит
d38e27d4f0
2 измењених фајлова са 20 додато и 9 уклоњено
  1. 20 7
      bin/dnetview/src/parser.rs
  2. 0 2
      bin/dnetview/src/view.rs

+ 20 - 7
bin/dnetview/src/parser.rs

@@ -24,7 +24,7 @@ use serde_json::Value;
 use smol::Executor;
 use smol::Executor;
 use url::Url;
 use url::Url;
 
 
-use darkfi::util::{async_util, time::NanoTimestamp};
+use darkfi::util::{async_util, ringbuffer::RingBuffer, time::NanoTimestamp};
 
 
 use crate::{
 use crate::{
     config::{DnvConfig, Node, NodeType},
     config::{DnvConfig, Node, NodeType},
@@ -368,13 +368,20 @@ impl DataParser {
                             let id = make_connect_id(&id)?;
                             let id = make_connect_id(&id)?;
                             let state = "state".to_string();
                             let state = "state".to_string();
                             let parent = parent.clone();
                             let parent = parent.clone();
-                            let msg_values = info2.unwrap().get("log").unwrap().as_array().unwrap();
+
                             let mut msg_log: Vec<(NanoTimestamp, String, String)> = Vec::new();
                             let mut msg_log: Vec<(NanoTimestamp, String, String)> = Vec::new();
-                            for msg in msg_values {
+                            let log_buffer: RingBuffer<(NanoTimestamp, String, String)> =
+                                serde_json::from_value(info2.unwrap().get("log").unwrap().clone())
+                                    .unwrap();
+
+                            debug!(target: "dnetview", "Inbound log: {:?}", log_buffer);
+
+                            for (time, txt1, txt2) in log_buffer.iter() {
                                 let msg: (NanoTimestamp, String, String) =
                                 let msg: (NanoTimestamp, String, String) =
-                                    serde_json::from_value(msg.clone())?;
+                                    (time.clone(), txt1.to_string(), txt2.to_string());
                                 msg_log.push(msg);
                                 msg_log.push(msg);
                             }
                             }
+
                             let is_empty = false;
                             let is_empty = false;
                             let last_msg = info2
                             let last_msg = info2
                                 .unwrap()
                                 .unwrap()
@@ -540,13 +547,19 @@ impl DataParser {
                             let state = &slot["state"];
                             let state = &slot["state"];
                             let state = state.as_str().unwrap().to_string();
                             let state = state.as_str().unwrap().to_string();
                             let parent = parent.clone();
                             let parent = parent.clone();
-                            let msg_values = channel["log"].as_array().unwrap();
+
                             let mut msg_log: Vec<(NanoTimestamp, String, String)> = Vec::new();
                             let mut msg_log: Vec<(NanoTimestamp, String, String)> = Vec::new();
-                            for msg in msg_values {
+                            let log_buffer: RingBuffer<(NanoTimestamp, String, String)> =
+                                serde_json::from_value(channel["log"].clone()).unwrap();
+
+                            debug!(target: "dnetview", "Outbound log: {:?}", log_buffer);
+
+                            for (time, txt1, txt2) in log_buffer.iter() {
                                 let msg: (NanoTimestamp, String, String) =
                                 let msg: (NanoTimestamp, String, String) =
-                                    serde_json::from_value(msg.clone())?;
+                                    (time.clone(), txt1.to_string(), txt2.to_string());
                                 msg_log.push(msg);
                                 msg_log.push(msg);
                             }
                             }
+
                             let is_empty = false;
                             let is_empty = false;
                             let last_msg = channel["last_msg"].as_str().unwrap().to_string();
                             let last_msg = channel["last_msg"].as_str().unwrap().to_string();
                             let last_status = channel["last_status"].as_str().unwrap().to_string();
                             let last_status = channel["last_status"].as_str().unwrap().to_string();

+ 0 - 2
bin/dnetview/src/view.rs

@@ -34,8 +34,6 @@ use crate::{
     model::{NodeInfo, SelectableObject},
     model::{NodeInfo, SelectableObject},
 };
 };
 
 
-//use log::debug;
-
 type MsgLog = Vec<(NanoTimestamp, String, String)>;
 type MsgLog = Vec<(NanoTimestamp, String, String)>;
 type MsgMap = HashMap<String, MsgLog>;
 type MsgMap = HashMap<String, MsgLog>;