1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
use crate::statement::Consistency;
use std::collections::HashMap;
use std::net::IpAddr;
use std::num::NonZeroU32;
use std::time::Duration;
use uuid::Uuid;
use crate::cql_to_rust::{FromRow, FromRowError};
use crate::frame::response::result::Row;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TracingInfo {
pub client: Option<IpAddr>,
pub command: Option<String>,
pub coordinator: Option<IpAddr>,
pub duration: Option<i32>,
pub parameters: Option<HashMap<String, String>>,
pub request: Option<String>,
pub started_at: Option<chrono::Duration>,
pub events: Vec<TracingEvent>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TracingEvent {
pub event_id: Uuid,
pub activity: Option<String>,
pub source: Option<IpAddr>,
pub source_elapsed: Option<i32>,
pub thread: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct GetTracingConfig {
pub attempts: NonZeroU32,
pub interval: Duration,
pub consistency: Consistency,
}
impl Default for GetTracingConfig {
fn default() -> GetTracingConfig {
GetTracingConfig {
attempts: NonZeroU32::new(5).unwrap(),
interval: Duration::from_millis(3),
consistency: Consistency::One,
}
}
}
pub(crate) const TRACES_SESSION_QUERY_STR: &str =
"SELECT client, command, coordinator, duration, parameters, request, started_at \
FROM system_traces.sessions WHERE session_id = ?";
pub(crate) const TRACES_EVENTS_QUERY_STR: &str =
"SELECT event_id, activity, source, source_elapsed, thread \
FROM system_traces.events WHERE session_id = ?";
impl FromRow for TracingInfo {
fn from_row(row: Row) -> Result<TracingInfo, FromRowError> {
let (client, command, coordinator, duration, parameters, request, started_at) =
<(
Option<IpAddr>,
Option<String>,
Option<IpAddr>,
Option<i32>,
Option<HashMap<String, String>>,
Option<String>,
Option<chrono::Duration>,
)>::from_row(row)?;
Ok(TracingInfo {
client,
command,
coordinator,
duration,
parameters,
request,
started_at,
events: Vec::new(),
})
}
}
impl FromRow for TracingEvent {
fn from_row(row: Row) -> Result<TracingEvent, FromRowError> {
let (event_id, activity, source, source_elapsed, thread) = <(
Uuid,
Option<String>,
Option<IpAddr>,
Option<i32>,
Option<String>,
)>::from_row(row)?;
Ok(TracingEvent {
event_id,
activity,
source,
source_elapsed,
thread,
})
}
}