|
@@ -1,5 +1,5 @@
|
|
|
use std::collections::HashMap;
|
|
use std::collections::HashMap;
|
|
|
-use std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
|
|
|
+use std::sync::atomic::{AtomicI64, AtomicU64, Ordering};
|
|
|
use rust_decimal::Decimal;
|
|
use rust_decimal::Decimal;
|
|
|
use serde_json::Value;
|
|
use serde_json::Value;
|
|
|
use anyhow::Result;
|
|
use anyhow::Result;
|
|
@@ -11,7 +11,7 @@ pub struct DataManager {
|
|
|
pub asks_map: HashMap<String, HashMap<Decimal, Decimal>>,
|
|
pub asks_map: HashMap<String, HashMap<Decimal, Decimal>>,
|
|
|
pub bids_map: HashMap<String, HashMap<Decimal, Decimal>>,
|
|
pub bids_map: HashMap<String, HashMap<Decimal, Decimal>>,
|
|
|
|
|
|
|
|
- pub delay_total: AtomicU64,
|
|
|
|
|
|
|
+ pub delay_total: AtomicI64,
|
|
|
pub delay_count: AtomicU64,
|
|
pub delay_count: AtomicU64,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -26,13 +26,13 @@ impl DataManager {
|
|
|
klines_map,
|
|
klines_map,
|
|
|
asks_map,
|
|
asks_map,
|
|
|
bids_map,
|
|
bids_map,
|
|
|
- delay_total: AtomicU64::new(0),
|
|
|
|
|
|
|
+ delay_total: AtomicI64::new(0),
|
|
|
delay_count: AtomicU64::new(0),
|
|
delay_count: AtomicU64::new(0),
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- pub fn record_latency(&self, received_at: i64, origin_timestamp: u64) {
|
|
|
|
|
- if let Some(delay) = (received_at as u64).checked_sub(origin_timestamp) {
|
|
|
|
|
|
|
+ pub fn record_latency(&self, received_at: i64, origin_timestamp: i64) {
|
|
|
|
|
+ if let Some(delay) = received_at.checked_sub(origin_timestamp) {
|
|
|
self.delay_total.fetch_add(delay, Ordering::Relaxed); // 原子加
|
|
self.delay_total.fetch_add(delay, Ordering::Relaxed); // 原子加
|
|
|
self.delay_count.fetch_add(1, Ordering::Relaxed); // 原子加
|
|
self.delay_count.fetch_add(1, Ordering::Relaxed); // 原子加
|
|
|
} else {
|
|
} else {
|
|
@@ -41,7 +41,7 @@ impl DataManager {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 获取当前的统计数据
|
|
// 获取当前的统计数据
|
|
|
- pub fn get_delay_stats(&self) -> (u64, u64) {
|
|
|
|
|
|
|
+ pub fn get_delay_stats(&self) -> (i64, u64) {
|
|
|
let total = self.delay_total.load(Ordering::Relaxed);
|
|
let total = self.delay_total.load(Ordering::Relaxed);
|
|
|
let count = self.delay_count.load(Ordering::Relaxed);
|
|
let count = self.delay_count.load(Ordering::Relaxed);
|
|
|
(total, count)
|
|
(total, count)
|