pub struct SessionSummaryData {Show 17 fields
pub session_duration_s: Option<i32>,
pub delivery_latency_p50_ms: Option<i32>,
pub delivery_latency_p99_ms: Option<i32>,
pub messages_sent: Option<i32>,
pub messages_delivered: Option<i32>,
pub messages_failed: Option<i32>,
pub transport_time_ms: Option<TransportTimeMs>,
pub routing_switches: Option<i32>,
pub routing_escalations: Option<i32>,
pub escalation_reasons: Option<EscalationReasons>,
pub mls_decryption_failures_by_kind: Option<Value>,
pub mls_session_ready_latency_p50_ms: Option<i32>,
pub mls_encryption_used_count: Option<i32>,
pub relay_duration_s: Option<i32>,
pub relay_battery_at_demote: Option<Vec<i16>>,
pub battery_start: Option<i16>,
pub battery_end: Option<i16>,
}Expand description
mesh_session_summary (plan §2.2 + §2.4) — one row per session, emitted on
app-background. The nested transport_time_ms/escalation_reasons objects
are flattened into columns server-side; mls_decryption_failures_by_kind
is stored as JSONB as-is.
The client populates six of these: session_duration_s,
routing_switches, routing_escalations, escalation_reasons,
mls_session_ready_latency_p50_ms, mls_encryption_used_count. Those six
land in eleven columns — escalation_reasons flattens into six — of
which the aggregation job reads ten and has no other source for any of
them (pipeline.rs step 3e, app_plane.rs). session_duration_s is the
eleventh and the exception: stored, but read by neither plane today.
That exception is load-bearing, because session_duration_s changed
meaning in SDK 0.26.0. It was the span since the session opened, restated
by every summary of that session; it is now the span since the previous
summary, so a session’s rows have to be summed to recover its length.
Nothing reads the column yet, which is what made the change safe to make
unversioned, and a reader added later must treat rows from before 0.26.0
as totals rather than deltas.
The rest stay nullable and absent by design, not by omission: each has a
second source the job already reads (mesh_metrics_rollup or a typed
raw_* table), so a value here would duplicate a populated column rather
than fill an empty one.
Fields§
§session_duration_s: Option<i32>§delivery_latency_p50_ms: Option<i32>§delivery_latency_p99_ms: Option<i32>§messages_sent: Option<i32>§messages_delivered: Option<i32>§messages_failed: Option<i32>§transport_time_ms: Option<TransportTimeMs>§routing_switches: Option<i32>§routing_escalations: Option<i32>§escalation_reasons: Option<EscalationReasons>§mls_decryption_failures_by_kind: Option<Value>§mls_session_ready_latency_p50_ms: Option<i32>§mls_encryption_used_count: Option<i32>§relay_duration_s: Option<i32>§relay_battery_at_demote: Option<Vec<i16>>§battery_start: Option<i16>§battery_end: Option<i16>