1use alloc::string::String;
5use alloc::vec::Vec;
6use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
7use serde::{Deserialize, Serialize};
8
9#[derive(Archive, RkyvSerialize, RkyvDeserialize, Serialize, Deserialize, Debug, Clone)]
10#[archive(check_bytes)]
11pub enum OpsRequest {
12 Ping,
14 Status,
16 Metrics,
18 Shutdown,
20 GetSource,
22}
23
24#[derive(Archive, RkyvSerialize, RkyvDeserialize, Serialize, Deserialize, Debug, Clone)]
25#[archive(check_bytes)]
26pub enum OpsResponse {
27 Pong,
28 Status {
29 name: String,
30 uptime_secs: u64,
31 memory_usage: u64,
32 consensus_role: String,
33 },
34 Metrics(MetricsSnapshot),
35 ShutdownAck,
36 Source {
37 bytes: Vec<u8>,
38 },
39}
40
41#[derive(Archive, RkyvSerialize, RkyvDeserialize, Serialize, Deserialize, Debug, Clone)]
42#[archive(check_bytes)]
43pub struct MetricsSnapshot {
44 pub requests_total: u64,
45 pub requests_success: u64,
46 pub requests_failed: u64,
47 pub latency_histogram: Vec<u64>,
48 pub connections_active: u64,
49 pub bytes_sent: u64,
50 pub bytes_received: u64,
51}