Skip to content

Commit 3cd9134

Browse files
committed
feat(pegboard): add metadata to runner configs
1 parent 34c7008 commit 3cd9134

File tree

13 files changed

+225
-169
lines changed

13 files changed

+225
-169
lines changed

out/openapi.json

Lines changed: 44 additions & 70 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/common/api-types/src/namespaces/runner_configs.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,17 @@ use std::collections::HashMap;
33
use gas::prelude::*;
44
use utoipa::ToSchema;
55

6+
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
7+
pub struct RunnerConfig {
8+
#[serde(flatten)]
9+
pub kind: RunnerConfigKind,
10+
#[serde(default, skip_serializing_if = "Option::is_none")]
11+
pub metadata: Option<serde_json::Value>,
12+
}
13+
614
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
715
#[serde(rename_all = "snake_case")]
8-
pub enum RunnerConfig {
16+
pub enum RunnerConfigKind {
917
Normal {},
1018
Serverless {
1119
url: String,
@@ -21,17 +29,18 @@ pub enum RunnerConfig {
2129

2230
impl Into<rivet_types::runner_configs::RunnerConfig> for RunnerConfig {
2331
fn into(self) -> rivet_types::runner_configs::RunnerConfig {
24-
match self {
25-
RunnerConfig::Normal {} => rivet_types::runner_configs::RunnerConfig::Normal {},
26-
RunnerConfig::Serverless {
32+
let RunnerConfig { kind, metadata } = self;
33+
let kind = match kind {
34+
RunnerConfigKind::Normal {} => rivet_types::runner_configs::RunnerConfigKind::Normal {},
35+
RunnerConfigKind::Serverless {
2736
url,
2837
headers,
2938
request_lifespan,
3039
slots_per_runner,
3140
min_runners,
3241
max_runners,
3342
runners_margin,
34-
} => rivet_types::runner_configs::RunnerConfig::Serverless {
43+
} => rivet_types::runner_configs::RunnerConfigKind::Serverless {
3544
url,
3645
headers: headers.unwrap_or_default(),
3746
request_lifespan,
@@ -40,6 +49,7 @@ impl Into<rivet_types::runner_configs::RunnerConfig> for RunnerConfig {
4049
max_runners,
4150
runners_margin: runners_margin.unwrap_or_default(),
4251
},
43-
}
52+
};
53+
rivet_types::runner_configs::RunnerConfig { kind, metadata }
4454
}
4555
}

packages/common/types/src/runner_configs.rs

Lines changed: 99 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,17 @@ use std::collections::HashMap;
33
use gas::prelude::*;
44
use utoipa::ToSchema;
55

6+
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
7+
pub struct RunnerConfig {
8+
#[serde(flatten)]
9+
pub kind: RunnerConfigKind,
10+
#[serde(default, skip_serializing_if = "Option::is_none")]
11+
pub metadata: Option<serde_json::Value>,
12+
}
13+
614
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
715
#[serde(rename_all = "snake_case")]
8-
pub enum RunnerConfig {
16+
pub enum RunnerConfigKind {
917
Normal {},
1018
Serverless {
1119
url: String,
@@ -19,64 +27,120 @@ pub enum RunnerConfig {
1927
},
2028
}
2129

22-
impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v1::Data {
30+
impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v2::RunnerConfig {
2331
fn from(value: RunnerConfig) -> Self {
24-
match value {
25-
RunnerConfig::Normal {} => {
26-
rivet_data::generated::namespace_runner_config_v1::Data::Normal(
27-
rivet_data::generated::namespace_runner_config_v1::Normal {},
28-
)
29-
}
30-
RunnerConfig::Serverless {
31-
url,
32-
headers,
33-
request_lifespan,
34-
slots_per_runner,
35-
min_runners,
36-
max_runners,
37-
runners_margin,
38-
} => rivet_data::generated::namespace_runner_config_v1::Data::Serverless(
39-
rivet_data::generated::namespace_runner_config_v1::Serverless {
32+
let RunnerConfig { kind, metadata } = value;
33+
rivet_data::generated::namespace_runner_config_v2::RunnerConfig {
34+
metadata: metadata.and_then(|value| serde_json::to_string(&value).ok()),
35+
kind: match kind {
36+
RunnerConfigKind::Normal {} => {
37+
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Normal
38+
}
39+
RunnerConfigKind::Serverless {
4040
url,
41-
headers: headers.into(),
41+
headers,
4242
request_lifespan,
4343
slots_per_runner,
4444
min_runners,
4545
max_runners,
4646
runners_margin,
47-
},
48-
),
47+
} => {
48+
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Serverless(
49+
rivet_data::generated::namespace_runner_config_v2::Serverless {
50+
url,
51+
headers: headers.into(),
52+
request_lifespan,
53+
slots_per_runner,
54+
min_runners,
55+
max_runners,
56+
runners_margin,
57+
},
58+
)
59+
}
60+
},
4961
}
5062
}
5163
}
5264

53-
impl From<rivet_data::generated::namespace_runner_config_v1::Data> for RunnerConfig {
54-
fn from(value: rivet_data::generated::namespace_runner_config_v1::Data) -> Self {
55-
match value {
56-
rivet_data::generated::namespace_runner_config_v1::Data::Normal(_) => {
57-
RunnerConfig::Normal {}
58-
}
59-
rivet_data::generated::namespace_runner_config_v1::Data::Serverless(o) => {
60-
RunnerConfig::Serverless {
65+
impl From<rivet_data::generated::namespace_runner_config_v2::RunnerConfig> for RunnerConfig {
66+
fn from(value: rivet_data::generated::namespace_runner_config_v2::RunnerConfig) -> Self {
67+
let rivet_data::generated::namespace_runner_config_v2::RunnerConfig { metadata, kind } =
68+
value;
69+
RunnerConfig {
70+
metadata: metadata.and_then(|raw| serde_json::from_str(&raw).ok()),
71+
kind: match kind {
72+
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Normal => {
73+
RunnerConfigKind::Normal {}
74+
}
75+
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Serverless(
76+
o,
77+
) => RunnerConfigKind::Serverless {
6178
url: o.url,
6279
headers: o.headers.into(),
6380
request_lifespan: o.request_lifespan,
6481
slots_per_runner: o.slots_per_runner,
6582
min_runners: o.min_runners,
6683
max_runners: o.max_runners,
6784
runners_margin: o.runners_margin,
68-
}
69-
}
85+
},
86+
},
7087
}
7188
}
7289
}
7390

91+
// impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v1::Data {
92+
// fn from(value: RunnerConfig) -> Self {
93+
// match value.kind {
94+
// RunnerConfigKind::Normal { .. } => {
95+
// unreachable!("Normal runner configs do not have a v1 representation",)
96+
// }
97+
// RunnerConfigKind::Serverless {
98+
// url,
99+
// headers,
100+
// request_lifespan,
101+
// slots_per_runner,
102+
// min_runners,
103+
// max_runners,
104+
// runners_margin,
105+
// } => rivet_data::generated::namespace_runner_config_v1::Data::Serverless(
106+
// rivet_data::generated::namespace_runner_config_v1::Serverless {
107+
// url,
108+
// headers: headers.into(),
109+
// request_lifespan,
110+
// slots_per_runner,
111+
// min_runners,
112+
// max_runners,
113+
// runners_margin,
114+
// },
115+
// ),
116+
// }
117+
// }
118+
// }
119+
//
120+
// impl From<rivet_data::generated::namespace_runner_config_v1::Data> for RunnerConfig {
121+
// fn from(value: rivet_data::generated::namespace_runner_config_v1::Data) -> Self {
122+
// RunnerConfig {
123+
// metadata: None,
124+
// kind: match value {
125+
// rivet_data::generated::namespace_runner_config_v1::Data::Serverless(o) => {
126+
// RunnerConfigKind::Serverless {
127+
// url: o.url,
128+
// headers: o.headers.into(),
129+
// request_lifespan: o.request_lifespan,
130+
// slots_per_runner: o.slots_per_runner,
131+
// min_runners: o.min_runners,
132+
// max_runners: o.max_runners,
133+
// runners_margin: o.runners_margin,
134+
// }
135+
// }
136+
// },
137+
// }
138+
// }
139+
// }
140+
74141
impl RunnerConfig {
75142
/// If updates to this run config affects the autoscaler.
76143
pub fn affects_autoscaler(&self) -> bool {
77-
match self {
78-
Self::Serverless { .. } => true,
79-
Self::Normal { .. } => false,
80-
}
144+
matches!(self.kind, RunnerConfigKind::Serverless { .. })
81145
}
82146
}

0 commit comments

Comments
 (0)