chiark / gitweb /
refactor rocket config
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 26 Aug 2020 22:26:14 +0000 (23:26 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 26 Aug 2020 22:26:14 +0000 (23:26 +0100)
src/bin/server.rs
src/global.rs

index f72ad8596b94dddb7cc35a150011ae45e6ae87a4..b6a0e967e8e5929d5abdc19379cf0ddadc9744a6 100644 (file)
@@ -83,7 +83,27 @@ fn main() {
     .enable(Frame::Deny)
     .enable(Referrer::NoReferrer);
 
-  let r = rocket::ignite()
+  let config = config();
+
+  let mut cbuilder = rocket::config::Config::build(
+    if config.debug {
+      rocket::config::Environment::Development
+    } else {
+      eprintln!("requesting Production");
+      rocket::config::Environment::Production
+    }
+  );
+
+  if config.debug {
+    cbuilder = cbuilder.address("127.0.0.1")
+  }
+  cbuilder = cbuilder.workers(config.rocket_workers);
+  if let Some(port) = config.http_port {
+    cbuilder = cbuilder.port(port);
+  }
+  let rconfig = cbuilder.finalize()?;
+
+  let r = rocket::custom(rconfig)
     .attach(helmet)
     .attach(Template::fairing())
     .mount("/", routes![
index 6ff4af20924cf6719a9143b0fdd9c26399a59086..4f6dd6401448c47ffdba5a35f6a01cc44380eb9b 100644 (file)
@@ -930,6 +930,8 @@ pub struct ServerConfigSpec {
   pub save_directory: Option<String>,
   pub command_socket: Option<String>,
   pub debug: Option<bool>,
+  pub http_port: Option<u16>,
+  pub rocket_workers: Option<u16>,
 }
 
 #[derive(Debug,Clone)]
@@ -937,6 +939,8 @@ pub struct ServerConfig {
   pub save_directory: String,
   pub command_socket: String,
   pub debug: bool,
+  pub http_port: Option<u16>,
+  pub rocket_workers: u16,
 }
 
 impl TryFrom<ServerConfigSpec> for ServerConfig {
@@ -945,6 +949,7 @@ impl TryFrom<ServerConfigSpec> for ServerConfig {
   fn try_from(spec: ServerConfigSpec) -> ServerConfig {
     let ServerConfigSpec {
       save_directory, command_socket, debug,
+      http_port, rocket_workers,
     } = spec;
 
     let save_directory = save_directory
@@ -957,9 +962,12 @@ impl TryFrom<ServerConfigSpec> for ServerConfig {
     }
 
     let debug = debug.unwrap_or(cfg!(debug_assertions));
+    let rocket_workers = rocket_workers.unwrap_or(
+      if debug { 20 } else { 1000 });
 
     ServerConfig {
       save_directory, command_socket, debug,
+      http_port, rocket_workers,
     }
   }
 }