nym_node_requests/api/v1/node_load/
models.rs1use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use strum_macros::{Display, EnumString};
7
8#[derive(
9 Display,
10 Default,
11 Serialize,
12 Deserialize,
13 Clone,
14 Copy,
15 Debug,
16 EnumString,
17 PartialEq,
18 Eq,
19 JsonSchema,
20 PartialOrd,
21 Hash,
22)]
23#[serde(rename_all = "snake_case")]
24#[strum(serialize_all = "snake_case")]
25#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
26pub enum Load {
27 #[default]
28 Unknown,
29
30 Negligible, Low, Medium, High, VeryHigh, AtCapacity, }
38
39impl Load {
40 pub fn increment(&self) -> Self {
42 match self {
43 Self::Unknown => Self::Unknown,
44 Self::Negligible => Self::Low,
45 Self::Low => Self::Medium,
46 Self::Medium => Self::High,
47 Self::High => Self::VeryHigh,
48 Self::VeryHigh => Self::AtCapacity,
49 Self::AtCapacity => Self::AtCapacity,
50 }
51 }
52}
53
54impl From<f64> for Load {
55 fn from(value: f64) -> Self {
56 if value == 0. || value.is_nan() || value.is_infinite() {
57 Self::Unknown
58 } else if value <= 0.1 {
59 Self::Negligible
60 } else if value <= 0.3 {
61 Self::Low
62 } else if value <= 0.6 {
63 Self::Medium
64 } else if value <= 0.8 {
65 Self::High
66 } else if value <= 0.95 {
67 Self::VeryHigh
68 } else {
69 Self::AtCapacity
70 }
71 }
72}
73
74#[derive(Serialize, Deserialize, Hash, Debug, Clone, Copy, JsonSchema, Eq, PartialEq)]
75#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
76pub struct NodeLoad {
77 pub total: Load,
78 pub machine: Load,
79 pub network: Load,
80}