use std::path::{Path, PathBuf};
use firkin_types::Size;
use super::SandboxResources;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct SingleNodeSchedulerConfig {
max_sessions: usize,
resources: SandboxResources,
}
impl SingleNodeSchedulerConfig {
#[must_use]
pub const fn new(max_sessions: usize, resources: SandboxResources) -> Self {
Self {
max_sessions,
resources,
}
}
#[must_use]
pub const fn max_sessions(&self) -> usize {
self.max_sessions
}
#[must_use]
pub const fn resources(&self) -> SandboxResources {
self.resources
}
}
impl Default for SingleNodeSchedulerConfig {
fn default() -> Self {
Self::new(64, SandboxResources::new(256, Size::gib(768)))
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct SingleNodeConfig {
root: PathBuf,
domain: String,
minimum_free_disk: Size,
warm_pool_minimum_free_disk: Size,
scheduler: SingleNodeSchedulerConfig,
}
impl SingleNodeConfig {
#[must_use]
pub fn new(root: impl Into<PathBuf>, domain: impl Into<String>) -> Self {
Self {
root: root.into(),
domain: domain.into(),
minimum_free_disk: Size::gib(10),
warm_pool_minimum_free_disk: Size::gib(20),
scheduler: SingleNodeSchedulerConfig::default(),
}
}
#[must_use]
pub fn root(&self) -> &Path {
&self.root
}
#[must_use]
pub fn domain(&self) -> &str {
&self.domain
}
#[must_use]
pub const fn minimum_free_disk(&self) -> Size {
self.minimum_free_disk
}
#[must_use]
pub const fn warm_pool_minimum_free_disk(&self) -> Size {
self.warm_pool_minimum_free_disk
}
#[must_use]
pub const fn scheduler(&self) -> SingleNodeSchedulerConfig {
self.scheduler
}
#[must_use]
pub const fn with_scheduler(mut self, scheduler: SingleNodeSchedulerConfig) -> Self {
self.scheduler = scheduler;
self
}
}