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",
|
"rand",
|
||||||
"rouille",
|
"rouille",
|
||||||
"serde",
|
"serde",
|
||||||
|
"signal-hook",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -788,6 +789,25 @@ dependencies = [
|
|||||||
"digest",
|
"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]]
|
[[package]]
|
||||||
name = "sled"
|
name = "sled"
|
||||||
version = "0.34.7"
|
version = "0.34.7"
|
||||||
|
@ -10,4 +10,5 @@ kv = { version = "0.24.0", features = ["json-value"] }
|
|||||||
serde = { version = "1.0.145", features = ["derive"] }
|
serde = { version = "1.0.145", features = ["derive"] }
|
||||||
chrono = { version = "0.4.22", features = ["serde"] }
|
chrono = { version = "0.4.22", features = ["serde"] }
|
||||||
rand = "0.8.5"
|
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 ./target/x86_64-unknown-linux-musl/release/ /app
|
||||||
COPY ./about.html /app/about.html
|
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 chrono::Utc;
|
||||||
use kv::{Config, Store, Json, Bucket, Value};
|
use kv::{Config, Store, Json, Bucket, Value};
|
||||||
use paste::Paste;
|
use paste::Paste;
|
||||||
use rand::{Rng, distributions::Alphanumeric};
|
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;
|
mod paste;
|
||||||
|
|
||||||
@ -46,9 +47,8 @@ fn main() {
|
|||||||
let links = store.bucket::<String, String>(Some("links"))
|
let links = store.bucket::<String, String>(Some("links"))
|
||||||
.expect("Failed to open links bucket");
|
.expect("Failed to open links bucket");
|
||||||
|
|
||||||
// Start server
|
// Create server
|
||||||
println!("Started PASTABBLE server on port {}", port);
|
let server = Server::new(format!("0.0.0.0:{}", port), move |req| {
|
||||||
rouille::start_server(format!("0.0.0.0:{}", port), move |req| {
|
|
||||||
router!(req,
|
router!(req,
|
||||||
(GET) (/) => {
|
(GET) (/) => {
|
||||||
Response::html(&about)
|
Response::html(&about)
|
||||||
@ -84,7 +84,27 @@ fn main() {
|
|||||||
},
|
},
|
||||||
_ => Response::empty_404()
|
_ => 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
|
// Register paste handler
|
||||||
|
Loading…
x
Reference in New Issue
Block a user