main.rs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. mod json_db_utils;
  2. mod control_c;
  3. mod server;
  4. mod listener_tools;
  5. mod binance_usdt_swap_data_listener;
  6. mod gate_usdt_swap_data_listener;
  7. mod coinex_usdt_swap_data_listener;
  8. mod msv;
  9. mod rank;
  10. use std::sync::Arc;
  11. use std::sync::atomic::{AtomicBool, Ordering};
  12. use std::time::Duration;
  13. use tracing::{info, warn};
  14. use tracing_appender_timezone::non_blocking::WorkerGuard;
  15. // 日志级别配置
  16. fn log_level_init(log_str: String, port: u32, app_name: String) -> WorkerGuard {
  17. info!("日志级别读取成功:{}。", log_str);
  18. global::log_utils::final_init(log_str.as_str(), port, app_name)
  19. }
  20. #[tokio::main(flavor = "multi_thread")]
  21. async fn main() {
  22. // 日志级别配置
  23. let _ = log_level_init("info".to_string(), 28888, "micro_rank".to_string());
  24. // 掌控全局的关闭
  25. let running = Arc::new(AtomicBool::new(true));
  26. // 初始化数据服务器
  27. server::run_server(28888, running.clone());
  28. // ctrl c退出检查程序
  29. control_c::exit_handler(running.clone());
  30. // 启动各交易所的数据监听器
  31. binance_usdt_swap_data_listener::run_listener(running.clone()).await;
  32. gate_usdt_swap_data_listener::run_listener(running.clone()).await;
  33. coinex_usdt_swap_data_listener::run_listener(running.clone()).await;
  34. // panic错误捕获,panic级别的错误直接退出
  35. // let panic_running = running.clone();
  36. std::panic::set_hook(Box::new(move |panic_info| {
  37. let msg = format!("type=panic, msg={:?}, location={:?}", panic_info.to_string(), panic_info.location());
  38. warn!("{}", msg);
  39. // panic_running.store(false, Ordering::Relaxed);
  40. }));
  41. // 每一秒检查一次程序是否结束
  42. while running.load(Ordering::Relaxed) {
  43. tokio::time::sleep(Duration::from_secs(1)).await;
  44. }
  45. }