Skip to main content

vox_types/
debug_snapshot.rs

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// r[impl rpc.debug.snapshot]
10#[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}