1use crate::dto::prelude::*;
2
3pub const RUNTIME_INTROSPECTION_SCHEMA_VERSION: u32 = 1;
4
5#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
184pub struct RuntimeVisibilityEntry {
185 pub field: String,
186 pub visibility: RuntimeFieldVisibility,
187}
188
189#[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}