1use std::time::Duration;
2
3use crate::time::Instant;
4use crate::{
5 ChannelCloseReason, ChannelDebugContext, ChannelDirection, ChannelId, ChannelResetReason,
6 ConnectionCloseReason, ConnectionId, MethodId, RequestId,
7};
8
9#[derive(Clone, Debug, Default)]
11pub struct VoxDebugSnapshot {
12 pub connections: Vec<ConnectionDebugSnapshot>,
13}
14
15#[derive(Clone, Copy, Debug, PartialEq, Eq)]
16pub enum ConnectionDebugState {
17 Open,
18 Closing,
19 Closed,
20 Unknown,
21}
22
23#[derive(Clone, Copy, Debug, PartialEq, Eq)]
24pub enum DriverTaskStatus {
25 Alive,
26 Dead,
27 Unknown,
28}
29
30#[derive(Clone, Debug)]
31pub struct ConnectionDebugSnapshot {
32 pub connection_id: ConnectionId,
33 pub endpoint: Option<String>,
34 pub surface: Option<String>,
35 pub component: Option<String>,
36 pub state: ConnectionDebugState,
37 pub outstanding_requests: usize,
38 pub requests: Vec<RequestDebugSnapshot>,
39 pub open_channels: Vec<ChannelDebugSnapshot>,
40 pub outbound_queue_depth: Option<usize>,
41 pub outbound_queue_capacity: Option<usize>,
42 pub local_control_queue_depth: Option<usize>,
43 pub local_control_queue_capacity: Option<usize>,
44 pub last_inbound_message_at: Option<Instant>,
45 pub last_outbound_message_at: Option<Instant>,
46 pub last_progress_at: Option<Instant>,
47 pub close_reason: Option<ConnectionCloseReason>,
48 pub driver_task_status: DriverTaskStatus,
49}
50
51#[derive(Clone, Copy, Debug, PartialEq, Eq)]
52pub enum RequestDebugState {
53 Dispatching,
54 WaitingForResponse,
55 Finished,
56 Failed,
57}
58
59#[derive(Clone, Debug)]
60pub struct RequestDebugSnapshot {
61 pub request_id: RequestId,
62 pub service: Option<&'static str>,
63 pub method: Option<&'static str>,
64 pub method_id: MethodId,
65 pub age: Duration,
66 pub state: RequestDebugState,
67 pub response_sender_blocked: Option<bool>,
68 pub associated_channels: Vec<ChannelId>,
69}
70
71#[derive(Clone, Copy, Debug, PartialEq, Eq)]
72pub enum ChannelReceiverState {
73 Present,
74 Dropped,
75 Closed,
76 Reset,
77 Unknown,
78}
79
80#[derive(Clone, Debug)]
81pub struct ChannelDebugSnapshot {
82 pub connection_id: ConnectionId,
83 pub channel_id: ChannelId,
84 pub direction: ChannelDirection,
85 pub debug: Option<ChannelDebugContext>,
86 pub initial_credit: u32,
87 pub available_send_credit: Option<u32>,
88 pub inbound_queue_len: Option<usize>,
89 pub inbound_queue_capacity: Option<usize>,
90 pub outbound_runtime_queue_len: Option<usize>,
91 pub outbound_runtime_queue_capacity: Option<usize>,
92 pub send_waiters_count: Option<usize>,
93 pub receiver_state: ChannelReceiverState,
94 pub last_item_sent_at: Option<Instant>,
95 pub last_item_received_at: Option<Instant>,
96 pub last_item_consumed_at: Option<Instant>,
97 pub last_credit_granted_at: Option<Instant>,
98 pub last_credit_received_at: Option<Instant>,
99 pub last_credit_granted_amount: Option<u32>,
100 pub last_credit_received_amount: Option<u32>,
101 pub pending_local_grant_credit: u32,
102 pub total_credit_granted: u64,
103 pub total_credit_received: u64,
104 pub current_permit_count: Option<u32>,
105 pub zero_credit_with_blocked_senders: bool,
106 pub sent: u64,
107 pub sends_started: u64,
108 pub sends_completed: u64,
109 pub sends_waited_for_credit: u64,
110 pub try_send_full_credit: u64,
111 pub try_send_full_runtime_queue: u64,
112 pub closed: u64,
113 pub reset: u64,
114 pub dropped: u64,
115 pub items_received: u64,
116 pub items_consumed: u64,
117 pub credit_granted: u64,
118 pub credit_received: u64,
119 pub close_reason: Option<ChannelCloseReason>,
120 pub reset_reason: Option<ChannelResetReason>,
121}