Added stop signal handler

This commit is contained in:
2022-11-03 11:28:27 +01:00
parent e874e4e473
commit d24c9b1ad9
4 changed files with 48 additions and 7 deletions

View File

@@ -1,10 +1,11 @@
use std::{env, fs};
use std::{env, fs, thread};
use chrono::Utc;
use kv::{Config, Store, Json, Bucket, Value};
use paste::Paste;
use rand::{Rng, distributions::Alphanumeric};
use rouille::{Response, router, try_or_400, post_input, Request};
use rouille::{Response, router, try_or_400, post_input, Request, Server};
use signal_hook::{iterator::Signals, consts::{SIGINT, SIGTERM}};
mod paste;
@@ -46,9 +47,8 @@ fn main() {
let links = store.bucket::<String, String>(Some("links"))
.expect("Failed to open links bucket");
// Start server
println!("Started PASTABBLE server on port {}", port);
rouille::start_server(format!("0.0.0.0:{}", port), move |req| {
// Create server
let server = Server::new(format!("0.0.0.0:{}", port), move |req| {
router!(req,
(GET) (/) => {
Response::html(&about)
@@ -84,7 +84,27 @@ fn main() {
},
_ => Response::empty_404()
)
}).expect("Failed to start server");
// Start server (run() or ::start_server is not able to handle graceful shutdown, hence stoppable() or poll() in loop)
println!("Started PASTABBLE server on {:?}", server.server_addr());
let (handle, stop) = server.stoppable();
// Listen for signals
let mut signals = Signals::new(&[SIGINT, SIGTERM]).unwrap();
thread::spawn(move || {
for sig in signals.forever() {
match sig {
_ => {
println!("Received stop signal {:?}, stopping server...", sig);
stop.send(()).expect("Failed to stop server");
}
}
}
});
// Join server thread
handle.join().unwrap();
}
// Register paste handler