Skip to main content

cell_model/
ops.rs

1// SPDX-License-Identifier: MIT
2// Copyright (c) 2025 Leif Rydenfalk – https://github.com/Leif-Rydenfalk/cell
3
4use 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    /// Basic liveness check
13    Ping,
14    /// Request internal status (uptime, stats)
15    Status,
16    /// Request Metrics Snapshot
17    Metrics,
18    /// Graceful Shutdown
19    Shutdown,
20    /// Fetch the source code of this cell for remote client generation
21    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}