Skip to main content

microsandbox_protocol/
heartbeat.rs

1//! Heartbeat data for the guest agent.
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6//--------------------------------------------------------------------------------------------------
7// Types
8//--------------------------------------------------------------------------------------------------
9
10/// Heartbeat data written to `/.msb/heartbeat.json` inside the guest.
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Heartbeat {
13    /// Monotonic sequence incremented for every heartbeat write.
14    pub heartbeat_seq: u64,
15
16    /// Monotonic sequence incremented for every meaningful activity event.
17    pub activity_seq: u64,
18
19    /// Timestamp of this heartbeat.
20    pub timestamp: DateTime<Utc>,
21
22    /// Timestamp of the last meaningful activity event.
23    pub last_activity: DateTime<Utc>,
24
25    /// Number of currently active exec sessions.
26    pub active_exec_sessions: u32,
27
28    /// Number of currently active filesystem stream sessions.
29    pub active_fs_streams: u32,
30
31    /// Number of currently active TCP stream sessions.
32    pub active_tcp_streams: u32,
33
34    /// Cumulative activity counters.
35    pub activity_counters: ActivityCounters,
36}
37
38/// Cumulative counters for meaningful sandbox activity.
39#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
40pub struct ActivityCounters {
41    /// Meaningful host-to-guest protocol messages.
42    pub host_messages: u64,
43
44    /// Meaningful guest-to-host protocol messages.
45    pub guest_messages: u64,
46
47    /// Bytes emitted by exec stdout, stderr, or PTY output.
48    pub exec_output_bytes: u64,
49
50    /// Bytes moved by filesystem streaming.
51    pub fs_bytes: u64,
52
53    /// Bytes moved by TCP streaming.
54    pub tcp_bytes: u64,
55}