forked from Maurice/pastabble
Added stop signal handler
This commit is contained in:
parent
e874e4e473
commit
d24c9b1ad9
20
Cargo.lock
generated
20
Cargo.lock
generated
@ -605,6 +605,7 @@ dependencies = [
|
||||
"rand",
|
||||
"rouille",
|
||||
"serde",
|
||||
"signal-hook",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -788,6 +789,25 @@ dependencies = [
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook"
|
||||
version = "0.3.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"signal-hook-registry",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sled"
|
||||
version = "0.34.7"
|
||||
|
@ -10,4 +10,5 @@ kv = { version = "0.24.0", features = ["json-value"] }
|
||||
serde = { version = "1.0.145", features = ["derive"] }
|
||||
chrono = { version = "0.4.22", features = ["serde"] }
|
||||
rand = "0.8.5"
|
||||
rouille = "3.6.1"
|
||||
rouille = "3.6.1"
|
||||
signal-hook = "0.3.14"
|
@ -4,4 +4,4 @@ WORKDIR /app
|
||||
COPY ./target/x86_64-unknown-linux-musl/release/ /app
|
||||
COPY ./about.html /app/about.html
|
||||
|
||||
ENTRYPOINT [ "./pastabble" ]
|
||||
CMD [ "./pastabble" ]
|
30
src/main.rs
30
src/main.rs
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user