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}