1use serde::Serialize;
4
5fn now_ms() -> u64 {
6 std::time::SystemTime::now()
7 .duration_since(std::time::UNIX_EPOCH)
8 .unwrap_or_default()
9 .as_millis() as u64
10}
11
12#[derive(Debug, Clone, Serialize)]
17#[serde(tag = "type", rename_all = "camelCase")]
18pub enum TransportEvent {
19 #[serde(rename = "pool:hit")]
20 PoolHit {
21 #[serde(rename = "peerId")]
22 peer_id: String,
23 timestamp: u64,
24 },
25 #[serde(rename = "pool:miss")]
26 PoolMiss {
27 #[serde(rename = "peerId")]
28 peer_id: String,
29 timestamp: u64,
30 },
31 #[serde(rename = "pool:evict")]
32 PoolEvict {
33 #[serde(rename = "peerId")]
34 peer_id: String,
35 timestamp: u64,
36 },
37 #[serde(rename = "path:change")]
38 PathChange {
39 #[serde(rename = "peerId")]
40 peer_id: String,
41 addr: String,
42 relay: bool,
43 timestamp: u64,
44 },
45 #[serde(rename = "handle:sweep")]
46 HandleSweep { evicted: u64, timestamp: u64 },
47}
48
49impl TransportEvent {
50 pub fn pool_hit(peer_id: impl Into<String>) -> Self {
51 Self::PoolHit {
52 peer_id: peer_id.into(),
53 timestamp: now_ms(),
54 }
55 }
56 pub fn pool_miss(peer_id: impl Into<String>) -> Self {
57 Self::PoolMiss {
58 peer_id: peer_id.into(),
59 timestamp: now_ms(),
60 }
61 }
62 pub fn pool_evict(peer_id: impl Into<String>) -> Self {
63 Self::PoolEvict {
64 peer_id: peer_id.into(),
65 timestamp: now_ms(),
66 }
67 }
68 pub fn path_change(peer_id: impl Into<String>, addr: impl Into<String>, relay: bool) -> Self {
69 Self::PathChange {
70 peer_id: peer_id.into(),
71 addr: addr.into(),
72 relay,
73 timestamp: now_ms(),
74 }
75 }
76 pub fn handle_sweep(evicted: u64) -> Self {
77 Self::HandleSweep {
78 evicted,
79 timestamp: now_ms(),
80 }
81 }
82}