Skip to main content

canic_core/dto/
runtime.rs

1use crate::dto::prelude::*;
2
3pub const RUNTIME_INTROSPECTION_SCHEMA_VERSION: u32 = 1;
4
5//
6// CanicHealthStatus
7//
8
9#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
10pub struct CanicHealthStatus {
11    pub schema_version: u32,
12    pub status: HealthStatus,
13    pub observed_at_ns: Option<u64>,
14    pub checks: Vec<RuntimeCheck>,
15}
16
17//
18// CanicReadinessStatus
19//
20
21#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
22pub struct CanicReadinessStatus {
23    pub schema_version: u32,
24    pub role: Option<String>,
25    pub status: ReadinessStatus,
26    pub observed_at_ns: u64,
27    pub checks: Vec<RuntimeCheck>,
28    pub blockers: Vec<RuntimeDiagnostic>,
29    pub warnings: Vec<RuntimeDiagnostic>,
30}
31
32//
33// CanicRuntimeStatus
34//
35
36#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
37pub struct CanicRuntimeStatus {
38    pub schema_version: u32,
39    pub observed_at_ns: u64,
40    pub canister_id: Principal,
41    pub role: Option<String>,
42    pub root: Option<Principal>,
43    pub network: Option<String>,
44    pub build: RuntimeBuildInfo,
45    pub features: Vec<RuntimeFeatureStatus>,
46    pub topology: Option<RuntimeTopologyStatus>,
47    pub timers: Vec<CanicTimerStatus>,
48    pub state: Option<RuntimeStateSummary>,
49    pub recent_failures: Vec<RecentFailure>,
50    pub visibility: Vec<RuntimeVisibilityEntry>,
51    pub readiness: CanicReadinessStatus,
52    pub status: RuntimeStatus,
53}
54
55//
56// RuntimeBuildInfo
57//
58
59#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
60pub struct RuntimeBuildInfo {
61    pub package_name: String,
62    pub package_version: String,
63    pub canic_version: String,
64    pub canister_version: u64,
65}
66
67//
68// RuntimeCheck
69//
70
71#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
72pub struct RuntimeCheck {
73    pub category: String,
74    pub code: String,
75    pub status: RuntimeCheckStatus,
76    pub subject: String,
77    pub detail: String,
78    pub next: Option<String>,
79    pub source: String,
80}
81
82//
83// RuntimeDiagnostic
84//
85
86#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
87pub struct RuntimeDiagnostic {
88    pub category: String,
89    pub code: String,
90    pub severity: RuntimeDiagnosticSeverity,
91    pub subject: String,
92    pub detail: String,
93    pub next: Option<String>,
94    pub source: String,
95}
96
97//
98// RuntimeFeatureStatus
99//
100
101#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
102pub struct RuntimeFeatureStatus {
103    pub name: String,
104    pub enabled: bool,
105    pub visibility: RuntimeFieldVisibility,
106    pub source: String,
107}
108
109//
110// RuntimeTopologyStatus
111//
112
113#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
114pub struct RuntimeTopologyStatus {
115    pub root: Option<Principal>,
116    pub parent: Option<Principal>,
117    pub subnet: Option<Principal>,
118    pub source: String,
119}
120
121//
122// CanicTimerStatus
123//
124
125#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
126pub struct CanicTimerStatus {
127    pub name: String,
128    pub subsystem: String,
129    pub status: TimerStatus,
130    pub enabled: bool,
131    pub registered: bool,
132    pub last_success_at_ns: Option<u64>,
133    pub last_failure_at_ns: Option<u64>,
134    pub next_due_at_ns: Option<u64>,
135    pub consecutive_failures: u64,
136    pub last_error_code: Option<String>,
137    pub last_error_summary: Option<String>,
138}
139
140//
141// RuntimeStateSummary
142//
143
144#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
145pub struct RuntimeStateSummary {
146    pub manifest_schema_version: u32,
147    pub domains: Vec<RuntimeStateDomainSummary>,
148    pub total_stable_memory_pages: Option<u64>,
149}
150
151//
152// RuntimeStateDomainSummary
153//
154
155#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
156pub struct RuntimeStateDomainSummary {
157    pub domain: String,
158    pub version: u32,
159    pub storage: String,
160    pub memory_id: Option<u8>,
161    pub status: RuntimeStateDomainStatus,
162}
163
164//
165// RecentFailure
166//
167
168#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
169pub struct RecentFailure {
170    pub occurred_at_ns: u64,
171    pub subsystem: String,
172    pub code: String,
173    pub severity: FailureSeverity,
174    pub summary: String,
175    pub correlation_id: Option<String>,
176    pub redacted: bool,
177}
178
179//
180// RuntimeVisibilityEntry
181//
182
183#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
184pub struct RuntimeVisibilityEntry {
185    pub field: String,
186    pub visibility: RuntimeFieldVisibility,
187}
188
189//
190// Status enums
191//
192
193#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
194#[serde(rename_all = "snake_case")]
195pub enum HealthStatus {
196    Healthy,
197    Degraded,
198    Unhealthy,
199}
200
201#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
202#[serde(rename_all = "snake_case")]
203pub enum ReadinessStatus {
204    Ready,
205    Degraded,
206    NotReady,
207    NotEvaluated,
208}
209
210#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
211#[serde(rename_all = "snake_case")]
212pub enum RuntimeStatus {
213    Ok,
214    Degraded,
215    Failing,
216    Unknown,
217}
218
219#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
220#[serde(rename_all = "snake_case")]
221pub enum TimerStatus {
222    Healthy,
223    Delayed,
224    Failing,
225    Disabled,
226    NotRegistered,
227    Unknown,
228}
229
230#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
231#[serde(rename_all = "snake_case")]
232pub enum FailureSeverity {
233    Info,
234    Warning,
235    Error,
236    Critical,
237}
238
239#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
240#[serde(rename_all = "snake_case")]
241pub enum RuntimeCheckStatus {
242    Pass,
243    Warn,
244    Fail,
245    NotEvaluated,
246}
247
248#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
249#[serde(rename_all = "snake_case")]
250pub enum RuntimeDiagnosticSeverity {
251    Info,
252    Warning,
253    Blocked,
254    Unsupported,
255}
256
257#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
258#[serde(rename_all = "snake_case")]
259pub enum RuntimeFieldVisibility {
260    PublicSafe,
261    OperatorOnly,
262    ControllerOnly,
263    FeatureGated,
264    Disabled,
265}
266
267#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
268#[serde(rename_all = "snake_case")]
269pub enum RuntimeStateDomainStatus {
270    Ok,
271    Warning,
272    Failing,
273    NotEvaluated,
274}