浏览代码

Merge remote-tracking branch 'origin/dev' into dev

gepangpang 2 年之前
父节点
当前提交
f54eb8c9a2
共有 5 个文件被更改,包括 56 次插入57 次删除
  1. 24 21
      global/src/log_utils.rs
  2. 10 1
      src/main.rs
  3. 5 5
      src/quant_libs.rs
  4. 3 3
      standard/src/kucoin_swap.rs
  5. 14 27
      strategy/src/strategy.rs

+ 24 - 21
global/src/log_utils.rs

@@ -59,31 +59,34 @@ impl<S> Layer<S> for ReportingLayer
             };
             event.record(&mut visitor);
 
-            let msg = format!("account={}, msg={}", self.account_name.clone(), visitor.message);
-            tokio::spawn(async move {
-                let encoded_str = base64::encode(msg.clone());
-                let mut request_json_data = HashMap::new();
-                request_json_data.insert("serverName", "As");
-                request_json_data.insert("data", encoded_str.as_str());
-
-                let res = Client::new().post("https://hhh.liangjiang.cc/api/log/addError?key=d64a8sc874sa8c4as5")
-                    .json(&request_json_data)
-                    .send()
-                    .await;
-
-                match res {
-                    Ok(_resp) => {
-                        // let body = _resp.text().await.unwrap();
-                    }
-                    Err(err) => {
-                        warn!("log的error监听器发送远端报错失败:{:?}", err);
-                    }
-                }
-            });
+            let msg = format!("account={}, type=error, msg={}", self.account_name.clone(), visitor.message);
+            send_remote_err_log(msg)
         }
     }
 }
 
+pub fn send_remote_err_log(msg: String) {
+    tokio::spawn(async move {
+        let encoded_str = base64::encode(msg.clone());
+        let mut request_json_data = HashMap::new();
+        request_json_data.insert("serverName", "As");
+        request_json_data.insert("data", encoded_str.as_str());
+
+        let res = Client::new().post("https://hhh.liangjiang.cc/api/log/addError?key=d64a8sc874sa8c4as5")
+            .json(&request_json_data)
+            .send()
+            .await;
+
+        match res {
+            Ok(_resp) => {
+                // let body = _resp.text().await.unwrap();
+            }
+            Err(err) => {
+                warn!("log的error监听器发送远端报错失败:{:?}", err);
+            }
+        }
+    });
+}
 
 pub fn init_log_with_debug() {
     let _ = final_init(tracing::Level::DEBUG.as_str(), 0, "test".to_string());

+ 10 - 1
src/main.rs

@@ -5,8 +5,9 @@ mod quant_libs;
 use std::sync::Arc;
 use std::sync::atomic::{AtomicBool, Ordering};
 use std::time::Duration;
-use tracing::{info};
+use tracing::{info, warn};
 use tracing_appender::non_blocking::WorkerGuard;
+use global::log_utils::send_remote_err_log;
 use global::params::Params;
 
 // 日志级别配置
@@ -42,6 +43,14 @@ async fn main() {
     // 日志级别配置
     let _guard = log_level_init(params.log_level.clone(), params.port.clone(), params.account_name.clone());
     info!("配置读取成功:{:?}。", params);
+    // panic错误捕获
+    let account_name_clone = params.account_name.clone();
+    std::panic::set_hook(Box::new(move |panic_info| {
+        let msg = format!("account={}, type=panic, msg={:?}, location={:?}",
+                          account_name_clone, panic_info.to_string(), panic_info.location());
+        warn!("{}", msg);
+        send_remote_err_log(msg);
+    }));
     // 主进程控制
     let running = Arc::new(AtomicBool::new(true));
     // ws退出程序

+ 5 - 5
src/quant_libs.rs

@@ -85,16 +85,16 @@ pub async fn init(params: Params, ws_running: Arc<AtomicBool>, running: Arc<Atom
         }
     });
 
-    let error_handler_quant_arc = quant_arc.clone();
+    let _error_handler_quant_arc = quant_arc.clone();
     tokio::spawn(async move {
         loop {
             tokio::time::sleep(Duration::from_millis(1)).await;
 
             match error_receiver.recv().await {
-                Some(error) => {
-                    let mut quant = error_handler_quant_arc.lock().await;
-                    error!("main: 订单出现错误{:?}", error);
-                    quant.strategy._print_summary();
+                Some(_error) => {
+                    // let mut quant = _error_handler_quant_arc.lock().await;
+                    // error!("main: 订单出现错误{:?}", _error);
+                    // quant.strategy._print_summary();
                 },
                 None => {
                     error!("Error channel has been closed!");

+ 3 - 3
standard/src/kucoin_swap.rs

@@ -539,9 +539,9 @@ impl Platform for KucoinSwap {
                                 Ok(order) => {
                                     result_sd.send(order).await.unwrap();
                                 }
-                                Err(query_err) => {
-                                    error!(?query_err);
-                                    error!("撤单失败,而且查单也失败了,kucoin_swap,oid={}, cid={}。", order_id.clone(), custom_id.clone());
+                                Err(_query_err) => {
+                                    // error!(?_query_err);
+                                    // error!("撤单失败,而且查单也失败了,kucoin_swap,oid={}, cid={}。", order_id.clone(), custom_id.clone());
                                 }
                             }
                             err_sd.send(error).await.unwrap();

+ 14 - 27
strategy/src/strategy.rs

@@ -400,30 +400,17 @@ impl Strategy {
         let o_num = self.local_orders.len();
 
         let mut msg = String::new();
-        msg.push_str("当前状态 >>>>>>>>>>>>>>>>>>\n");
-        msg.push_str(format!("--品种 {}\n", self.params.pair).as_str());
-        msg.push_str(format!("--现价 {:?}, 定价 {:?}, 偏差 {:?}%\n", self.mp, self.ref_price, price_bias).as_str());
-        msg.push_str(format!("--净值 {:?}\n", self.equity).as_str());
-        msg.push_str(format!("--Cash {:?}\n", self.cash).as_str());
-        msg.push_str(format!("--Coin(价值) {:?}\n", value).as_str());
-        msg.push_str(format!("--推算利润 {:?}\n", self.local_profit).as_str());
-        msg.push_str(format!("      盈亏 {:?}%\n", self.profit).as_str());
-        msg.push_str(format!("      做多杠杆 {:?}%\n", long_pos_leverage).as_str());
-        msg.push_str(format!("      做多浮盈 {:?}%\n", self.long_pos_bias).as_str());
-        msg.push_str(format!("      做空杠杆 {:?}%\n", short_pos_leverage).as_str());
-        msg.push_str(format!("      做空浮盈 {:?}%\n", self.short_pos_bias).as_str());
-        msg.push_str(format!("--杠杆 {:?}, 动态{:?}, 最大{:?}\n", self.lever_rate, self.adjust_lever_rate, self.max_pos_rate).as_str());
-        msg.push_str(format!("--请求 {:?}, 上限{:?}次/10秒\n", self._req_num_per_window, self.limit_order_requests_num).as_str());
-        msg.push_str(format!("--日化 {:?}%\n", self.daily_return).as_str());
-        msg.push_str(format!("--当前参数\n").as_str());
-        msg.push_str(format!("      开仓 {:?}\n", self.trade_open_dist).as_str());
-        msg.push_str(format!("      平仓 {:?}\n", self.trade_close_dist).as_str());
-        msg.push_str(format!("      方向 {:?}\n", self.post_side).as_str());
-        msg.push_str(format!("      参考 {:?}\n", self.ref_name[self.ref_index]).as_str());
-        msg.push_str(format!("      模式 {:?}\n", self.maker_mode).as_str());
-        msg.push_str(format!("      预测 {:?}\n", self.predict).as_str());
-        msg.push_str(format!("      预估24H成交额 {:?}万\n", self.trade_vol_24h_w).as_str());
-        msg.push_str(format!("--挂单列表,共{:?}单\n", o_num).as_str());
+        msg.push_str("当前状态: ");
+        msg.push_str(format!("[品种 {}, 现价 {:?}, 定价 {:?}, 偏差 {:?}%, 杠杆 {:?}, 动态{:?}, 最大{:?}, 预测 {:?}, 预估24H成交额 {:?}万], ",
+                             self.params.pair, self.mp, self.ref_price, price_bias, self.lever_rate,
+                             self.adjust_lever_rate, self.max_pos_rate, self.predict, self.trade_vol_24h_w).as_str());
+        msg.push_str(format!("[净值 {:?}, Cash {:?}, Coin(价值) {:?}, 日化 {:?}%], ", self.equity, self.cash, value, self.daily_return).as_str());
+        msg.push_str(format!("[推算利润 {:?}, 盈亏 {:?}%, 做多杠杆 {:?}%, 做多浮盈 {:?}%, 做空杠杆 {:?}%, 做空浮盈 {:?}%], ",
+                             self.local_profit, self.profit, long_pos_leverage, self.long_pos_bias, short_pos_leverage, self.short_pos_bias).as_str());
+        msg.push_str(format!("[请求 {:?}, 上限{:?}次/10秒], ", self._req_num_per_window, self.limit_order_requests_num).as_str());
+        msg.push_str(format!("[当前参数, 开仓 {:?}, 平仓 {:?}, 方向 {:?}, 参考 {:?}, 模式 {:?}], ",
+                             self.trade_open_dist, self.trade_close_dist, self.post_side, self.ref_name[self.ref_index], self.maker_mode).as_str());
+        msg.push_str(format!("[挂单列表,共{:?}单, ", o_num).as_str());
         for (_, order) in &self.local_orders {
             let mut order_value = order.amount * self.mp;
             let mut order_lever_rate = if self.equity.gt(&Decimal::ZERO) {
@@ -437,11 +424,11 @@ impl Strategy {
             order_lever_rate.rescale(3);
             order_bias.rescale(3);
 
-            msg.push_str(format!("      {:?} {:?} {:?} ", order.symbol, order.client_id, order.side).as_str());
-            msg.push_str(format!("杠杆{:?}X 价值{:?}U 价格{:?} 偏离{:?}%\n", order_lever_rate, order_value, order.price, order_bias).as_str());
+            msg.push_str(format!("[{:?} {:?} {:?}, 杠杆{:?}X 价值{:?}U 价格{:?} 偏离{:?}%]",
+                                 order.symbol, order.client_id, order.side, order_lever_rate, order_value, order.price, order_bias).as_str());
         }
 
-        msg.push_str(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
+        msg.push_str("]");
         info!("{}", msg);
     }