scylla/observability/
tracing.rs1use crate::value::CqlTimestamp;
2use crate::DeserializeRow;
3use itertools::Itertools;
4use scylla_cql::value::CqlTimeuuid;
5use std::collections::HashMap;
6use std::net::IpAddr;
7
8#[derive(Debug, DeserializeRow, Clone, PartialEq, Eq)]
11#[scylla(crate = "crate")]
12pub struct TracingInfo {
13 pub client: Option<IpAddr>,
14 pub command: Option<String>,
15 pub coordinator: Option<IpAddr>,
16 pub duration: Option<i32>,
17 pub parameters: Option<HashMap<String, String>>,
18 pub request: Option<String>,
19 pub started_at: Option<CqlTimestamp>,
21
22 #[scylla(skip)]
23 pub events: Vec<TracingEvent>,
24}
25
26#[derive(Debug, DeserializeRow, Clone, PartialEq, Eq)]
28#[scylla(crate = "crate")]
29pub struct TracingEvent {
30 pub event_id: CqlTimeuuid,
31 pub activity: Option<String>,
32 pub source: Option<IpAddr>,
33 pub source_elapsed: Option<i32>,
34 pub thread: Option<String>,
35}
36
37impl TracingInfo {
38 pub fn nodes(&self) -> Vec<IpAddr> {
40 self.events
41 .iter()
42 .filter_map(|e| e.source)
43 .unique()
44 .collect()
45 }
46}
47
48pub(crate) const TRACES_SESSION_QUERY_STR: &str =
50 "SELECT client, command, coordinator, duration, parameters, request, started_at \
51 FROM system_traces.sessions WHERE session_id = ?";
52
53pub(crate) const TRACES_EVENTS_QUERY_STR: &str =
55 "SELECT event_id, activity, source, source_elapsed, thread \
56 FROM system_traces.events WHERE session_id = ?";