diff --git a/script/research/raft-tool/src/main.rs b/script/research/raft-tool/src/main.rs index 4d1d0b192..49a0e7604 100644 --- a/script/research/raft-tool/src/main.rs +++ b/script/research/raft-tool/src/main.rs @@ -4,27 +4,27 @@ use darkfi::{ raft::DataStore, util::{ expand_path, - serial::{SerialDecodable, SerialEncodable}, + serial::{deserialize, SerialDecodable, SerialEncodable}, }, Result, }; #[derive(Debug)] -struct Log { - _term: u64, - _msg: Vec, +pub struct Info { + pub logs: Vec>, + pub commits: Vec, + pub voted_for: Vec>, + pub terms: Vec, } #[derive(Debug)] -struct NodeId(Vec); +pub struct Log { + pub term: u64, + pub msg: T, +} #[derive(Debug)] -struct Info { - _logs: Vec, - _commits: Vec, - _voted_for: Vec>, - _terms: Vec, -} +pub struct NodeId(Vec); #[derive(Debug, SerialEncodable, SerialDecodable)] struct EncryptedTask { @@ -42,13 +42,55 @@ struct Privmsg { message: String, } -#[async_std::main] -async fn main() -> Result<()> { - // Load datastore, uncomment desired bin structures - // Taud - //let db_path = expand_path(&"~/.config/darkfi/tau/tau.db").unwrap(); - //let datastore = DataStore::::new(&db_path.to_str().unwrap())?; - // Ircd +fn extract_taud() -> Result { + let db_path = expand_path(&"~/.config/darkfi/tau/tau.db").unwrap(); + let datastore = DataStore::::new(&db_path.to_str().unwrap())?; + + println!("Extracting db from: {:?}", db_path); + + // Retrieve all data trees + let sled_logs = datastore.logs.get_all()?; + let sled_commits = datastore.commits.get_all()?; + let sled_voted_for = datastore.voted_for.get_all()?; + let sled_terms = datastore.current_term.get_all()?; + + // Parse retrieved data trees + println!("Data extracted, parsing to viewable form..."); + + // Logs + let mut logs = vec![]; + for log in sled_logs { + logs.push(Log { term: log.term, msg: deserialize(&log.msg)? }); + } + + // Commits + let mut commits = vec![]; + for commit in &sled_commits { + commits + .push(EncryptedTask { nonce: commit.nonce.clone(), payload: commit.payload.clone() }); + } + + // Voted for + let mut voted_for = vec![]; + for vote in sled_voted_for { + match vote { + Some(v) => voted_for.push(Some(NodeId(v.0.clone()))), + None => voted_for.push(None), + } + } + + // Terms + let mut terms = vec![]; + for term in sled_terms { + terms.push(term); + } + + let info = Info:: { logs, commits, voted_for, terms }; + let info_string = format!("{:#?}", info); + Ok(info_string) +} + +fn extract_ircd() -> Result { let db_path = expand_path(&"~/.config/darkfi/ircd/ircd.db").unwrap(); let datastore = DataStore::::new(&db_path.to_str().unwrap())?; println!("Extracting db from: {:?}", db_path); @@ -65,16 +107,12 @@ async fn main() -> Result<()> { // Logs let mut logs = vec![]; for log in sled_logs { - logs.push(Log { _term: log.term, _msg: log.msg }); + logs.push(Log { term: log.term, msg: deserialize(&log.msg)? }); } // Commits let mut commits = vec![]; for commit in &sled_commits { - /* - commits - .push(EncryptedTask { nonce: commit.nonce.clone(), payload: commit.payload.clone() }); - */ commits.push(Privmsg { id: commit.id, nickname: commit.nickname.clone(), @@ -98,18 +136,16 @@ async fn main() -> Result<()> { terms.push(term); } - /* - let info = Info:: { - _logs: logs, - _commits: commits, - _voted_for: voted_for, - _terms: terms, - }; - */ - let info = - Info:: { _logs: logs, _commits: commits, _voted_for: voted_for, _terms: terms }; + let info = Info:: { logs, commits, voted_for, terms }; let info_string = format!("{:#?}", info); + Ok(info_string) +} + +#[async_std::main] +async fn main() -> Result<()> { + let info_string = extract_taud()?; + // Generating file let file_path = "raft_db"; println!("Data parsed, writing to file {:?}", file_path);