فهرست منبع

bin/darkfid2: Add some debug stanzas.

parazyd 4 سال پیش
والد
کامیت
18dc8cf00b
1فایلهای تغییر یافته به همراه37 افزوده شده و 7 حذف شده
  1. 37 7
      src/bin/darkfid2.rs

+ 37 - 7
src/bin/darkfid2.rs

@@ -1,8 +1,13 @@
 use async_std::sync::Arc;
 use async_std::sync::Arc;
+use log::*;
 use std::path::PathBuf;
 use std::path::PathBuf;
 
 
 use clap::clap_app;
 use clap::clap_app;
 use serde_json::{json, Value};
 use serde_json::{json, Value};
+use simplelog::{
+    CombinedLogger, Config as SimLogConfig, ConfigBuilder, LevelFilter, TermLogger, TerminalMode,
+    WriteLogger,
+};
 use tokio::io::{AsyncReadExt, AsyncWriteExt};
 use tokio::io::{AsyncReadExt, AsyncWriteExt};
 use tokio::net::TcpListener;
 use tokio::net::TcpListener;
 
 
@@ -52,6 +57,8 @@ impl Darkfid {
             ));
             ));
         }
         }
 
 
+        debug!(target: "RPC", "--> {:#?}", serde_json::to_string(&req).unwrap());
+
         match req.method.as_str() {
         match req.method.as_str() {
             Some("say_hello") => return self.say_hello(req.id, req.params).await,
             Some("say_hello") => return self.say_hello(req.id, req.params).await,
             Some("create_wallet") => return self.create_wallet(req.id, req.params).await,
             Some("create_wallet") => return self.create_wallet(req.id, req.params).await,
@@ -189,33 +196,54 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
     let darkfid = Darkfid::new(args.clone().is_present("verbose"), config_path)?;
     let darkfid = Darkfid::new(args.clone().is_present("verbose"), config_path)?;
     // TODO: TLS
     // TODO: TLS
     let listener = TcpListener::bind(darkfid.clone().config.rpc_url).await?;
     let listener = TcpListener::bind(darkfid.clone().config.rpc_url).await?;
+    debug!(target: "RPC SERVER", "Listening on {}", darkfid.clone().config.rpc_url);
+
+    let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build();
+    let debug_level = if args.is_present("verbose") {
+        LevelFilter::Debug
+    } else {
+        LevelFilter::Off
+    };
+
+    let log_path = darkfid.clone().config.log_path;
+    CombinedLogger::init(vec![
+        TermLogger::new(debug_level, logger_config, TerminalMode::Mixed).unwrap(),
+        WriteLogger::new(
+            LevelFilter::Debug,
+            SimLogConfig::default(),
+            std::fs::File::create(log_path).unwrap(),
+        ),
+    ])
+    .unwrap();
 
 
     loop {
     loop {
-        let (mut socket, _) = listener.accept().await?;
+        debug!(target: "RPC SERVER", "waiting for client");
 
 
-        println!("Accepted client");
+        let (mut socket, _) = listener.accept().await?;
         let darkfid = darkfid.clone();
         let darkfid = darkfid.clone();
 
 
+        debug!(target: "RPC SERVER", "accepted client");
+
         tokio::spawn(async move {
         tokio::spawn(async move {
             let mut buf = [0; 2048];
             let mut buf = [0; 2048];
 
 
             loop {
             loop {
                 let n = match socket.read(&mut buf).await {
                 let n = match socket.read(&mut buf).await {
                     Ok(n) if n == 0 => {
                     Ok(n) if n == 0 => {
-                        println!("Closed connection");
+                        debug!(target: "RPC SERVER", "closed connection");
                         return;
                         return;
                     }
                     }
                     Ok(n) => n,
                     Ok(n) => n,
                     Err(e) => {
                     Err(e) => {
-                        eprintln!("failed to read from socket; err = {:?}", e);
+                        debug!(target: "RPC SERVER", "failed to read from socket; err = {:?}", e);
                         return;
                         return;
                     }
                     }
                 };
                 };
 
 
                 let r: JsonRequest = match serde_json::from_slice(&buf[0..n]) {
                 let r: JsonRequest = match serde_json::from_slice(&buf[0..n]) {
                     Ok(r) => r,
                     Ok(r) => r,
-                    Err(_) => {
-                        eprintln!("received invalid json");
+                    Err(e) => {
+                        debug!(target: "RPC SERVER", "received invalid json; err = {:?}", e);
                         return;
                         return;
                     }
                     }
                 };
                 };
@@ -223,9 +251,11 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
                 let reply = darkfid.clone().handle_request(r).await;
                 let reply = darkfid.clone().handle_request(r).await;
                 let j = serde_json::to_string(&reply).unwrap();
                 let j = serde_json::to_string(&reply).unwrap();
 
 
+                debug!(target: "RPC", "<-- {:#?}", j);
+
                 // Write the data back
                 // Write the data back
                 if let Err(e) = socket.write_all(j.as_bytes()).await {
                 if let Err(e) = socket.write_all(j.as_bytes()).await {
-                    eprintln!("failed to writeto socket; err = {:?}", e);
+                    debug!(target: "RPC SERVER", "failed to write to socket; err = {:?}", e);
                     return;
                     return;
                 }
                 }
             }
             }