use crate::frame::value::CqlTimestamp;
use itertools::Itertools;
use scylla_cql::frame::value::CqlTimeuuid;
use scylla_macros::DeserializeRow;
use std::collections::HashMap;
use std::net::IpAddr;
#[derive(Debug, DeserializeRow, Clone, PartialEq, Eq)]
#[scylla(crate = "crate")]
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<CqlTimestamp>,
#[scylla(skip)]
pub events: Vec<TracingEvent>,
}
#[derive(Debug, DeserializeRow, Clone, PartialEq, Eq)]
#[scylla(crate = "crate")]
pub struct TracingEvent {
pub event_id: CqlTimeuuid,
pub activity: Option<String>,
pub source: Option<IpAddr>,
pub source_elapsed: Option<i32>,
pub thread: Option<String>,
}
impl TracingInfo {
pub fn nodes(&self) -> Vec<IpAddr> {
self.events
.iter()
.filter_map(|e| e.source)
.unique()
.collect()
}
}
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 = ?";