Add web.runner_token and web.runner_timeout options

This commit is contained in:
Joscha 2023-08-10 17:15:07 +02:00
parent 8005718584
commit 7338de98a5

View file

@ -15,7 +15,7 @@ use tracing::{debug, info};
use crate::{ use crate::{
args::{Args, Command, ServerCommand}, args::{Args, Command, ServerCommand},
somehow, id, somehow,
}; };
mod default { mod default {
@ -30,6 +30,10 @@ mod default {
"[::1]:8221".parse().unwrap() "[::1]:8221".parse().unwrap()
} }
pub fn web_runner_timeout() -> Duration {
Duration::from_secs(60)
}
pub fn repo_update_delay() -> Duration { pub fn repo_update_delay() -> Duration {
Duration::from_secs(60) Duration::from_secs(60)
} }
@ -43,8 +47,14 @@ mod default {
struct Web { struct Web {
#[serde(default = "default::web_base")] #[serde(default = "default::web_base")]
base: String, base: String,
#[serde(default = "default::web_address")] #[serde(default = "default::web_address")]
address: SocketAddr, address: SocketAddr,
runner_token: Option<String>,
#[serde(default = "default::web_runner_timeout")]
runner_timeout: Duration,
} }
impl Default for Web { impl Default for Web {
@ -52,6 +62,8 @@ impl Default for Web {
Self { Self {
base: default::web_base(), base: default::web_base(),
address: default::web_address(), address: default::web_address(),
runner_token: None,
runner_timeout: default::web_runner_timeout(),
} }
} }
} }
@ -59,6 +71,7 @@ impl Default for Web {
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
struct Repo { struct Repo {
name: Option<String>, name: Option<String>,
#[serde(default = "default::repo_update_delay", with = "humantime_serde")] #[serde(default = "default::repo_update_delay", with = "humantime_serde")]
update_delay: Duration, update_delay: Duration,
} }
@ -81,8 +94,10 @@ struct RunnerServer {
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
struct Runner { struct Runner {
name: Option<String>, name: Option<String>,
#[serde(default = "default::runner_ping_delay", with = "humantime_serde")] #[serde(default = "default::runner_ping_delay", with = "humantime_serde")]
ping_delay: Duration, ping_delay: Duration,
servers: HashMap<String, RunnerServer>, servers: HashMap<String, RunnerServer>,
} }
@ -100,8 +115,10 @@ impl Default for Runner {
struct ConfigFile { struct ConfigFile {
#[serde(default)] #[serde(default)]
web: Web, web: Web,
#[serde(default)] #[serde(default)]
repo: Repo, repo: Repo,
#[serde(default)] #[serde(default)]
runner: Runner, runner: Runner,
} }
@ -130,6 +147,13 @@ impl ConfigFile {
.to_string() .to_string()
} }
fn web_runner_token(&self) -> String {
self.web
.runner_token
.clone()
.unwrap_or_else(id::random_runner_token)
}
fn repo_name(&self, args: &Args) -> somehow::Result<String> { fn repo_name(&self, args: &Args) -> somehow::Result<String> {
if let Some(name) = &self.repo.name { if let Some(name) = &self.repo.name {
return Ok(name.clone()); return Ok(name.clone());
@ -182,6 +206,8 @@ pub struct RunnerServerConfig {
pub struct Config { pub struct Config {
pub web_base: String, pub web_base: String,
pub web_address: SocketAddr, pub web_address: SocketAddr,
pub web_runner_token: String,
pub web_runner_timeout: Duration,
pub repo_name: String, pub repo_name: String,
pub repo_update_delay: Duration, pub repo_update_delay: Duration,
pub runner_name: String, pub runner_name: String,
@ -208,6 +234,7 @@ impl Config {
debug!("Loaded config file:\n{config_file:#?}"); debug!("Loaded config file:\n{config_file:#?}");
let web_base = config_file.web_base(); let web_base = config_file.web_base();
let web_runner_token = config_file.web_runner_token();
let repo_name = config_file.repo_name(args)?; let repo_name = config_file.repo_name(args)?;
let runner_name = config_file.runner_name(); let runner_name = config_file.runner_name();
let runner_servers = config_file.runner_servers(); let runner_servers = config_file.runner_servers();
@ -215,6 +242,8 @@ impl Config {
Ok(Self { Ok(Self {
web_base, web_base,
web_address: config_file.web.address, web_address: config_file.web.address,
web_runner_token,
web_runner_timeout: config_file.web.runner_timeout,
repo_name, repo_name,
repo_update_delay: config_file.repo.update_delay, repo_update_delay: config_file.repo.update_delay,
runner_name, runner_name,