Skip to content

Commit 765ade4

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

File tree

11 files changed

+203
-145
lines changed

11 files changed

+203
-145
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/config/src/config/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,13 @@ impl Root {
167167

168168
pub fn validate_and_set_defaults(&mut self) -> Result<()> {
169169
// Set default pubsub to Postgres if configured for database
170-
if self.pubsub.is_none()
171-
&& let Some(Database::Postgres(pg)) = &self.database
172-
{
173-
self.pubsub = Some(PubSub::PostgresNotify(pubsub::Postgres {
174-
url: pg.url.clone(),
175-
memory_optimization: true,
176-
}));
170+
if self.pubsub.is_none() {
171+
if let Some(Database::Postgres(pg)) = &self.database {
172+
self.pubsub = Some(PubSub::PostgresNotify(pubsub::Postgres {
173+
url: pg.url.clone(),
174+
memory_optimization: true,
175+
}));
176+
}
177177
}
178178

179179
Ok(())

packages/common/types/src/runner_configs.rs

Lines changed: 89 additions & 25 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,15 +27,74 @@ pub enum RunnerConfig {
1927
},
2028
}
2129

30+
impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v2::RunnerConfig {
31+
fn from(value: RunnerConfig) -> Self {
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 {
40+
url,
41+
headers,
42+
request_lifespan,
43+
slots_per_runner,
44+
min_runners,
45+
max_runners,
46+
runners_margin,
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+
},
61+
}
62+
}
63+
}
64+
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 {
78+
url: o.url,
79+
headers: o.headers.into(),
80+
request_lifespan: o.request_lifespan,
81+
slots_per_runner: o.slots_per_runner,
82+
min_runners: o.min_runners,
83+
max_runners: o.max_runners,
84+
runners_margin: o.runners_margin,
85+
},
86+
},
87+
}
88+
}
89+
}
90+
2291
impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v1::Data {
2392
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-
)
93+
match value.kind {
94+
RunnerConfigKind::Normal { .. } => {
95+
unreachable!("Normal runner configs do not have a v1 representation",)
2996
}
30-
RunnerConfig::Serverless {
97+
RunnerConfigKind::Serverless {
3198
url,
3299
headers,
33100
request_lifespan,
@@ -52,31 +119,28 @@ impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v1::D
52119

53120
impl From<rivet_data::generated::namespace_runner_config_v1::Data> for RunnerConfig {
54121
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 {
61-
url: o.url,
62-
headers: o.headers.into(),
63-
request_lifespan: o.request_lifespan,
64-
slots_per_runner: o.slots_per_runner,
65-
min_runners: o.min_runners,
66-
max_runners: o.max_runners,
67-
runners_margin: o.runners_margin,
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+
}
68135
}
69-
}
136+
},
70137
}
71138
}
72139
}
73140

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)