mirror of
https://github.com/fluencelabs/kademlia-exporter
synced 2025-04-24 22:02:13 +00:00
src/main: Terminate on ctrl-c
This commit is contained in:
parent
f7582c97c0
commit
a9042bb1ed
34
Cargo.lock
generated
34
Cargo.lock
generated
@ -522,6 +522,16 @@ dependencies = [
|
||||
"stream-cipher",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ctrlc"
|
||||
version = "3.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a4ba686dff9fa4c1c9636ce1010b0cf98ceb421361b0bb3d6faeec43bd217a7"
|
||||
dependencies = [
|
||||
"nix",
|
||||
"winapi 0.3.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cuckoofilter"
|
||||
version = "0.3.2"
|
||||
@ -624,6 +634,15 @@ dependencies = [
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "exit-future"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"
|
||||
dependencies = [
|
||||
"futures 0.3.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fake-simd"
|
||||
version = "0.1.2"
|
||||
@ -1139,7 +1158,9 @@ name = "kademlia-exporter"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"async-std",
|
||||
"ctrlc",
|
||||
"env_logger",
|
||||
"exit-future",
|
||||
"futures 0.3.4",
|
||||
"libp2p",
|
||||
"libp2p-kad",
|
||||
@ -1767,6 +1788,19 @@ dependencies = [
|
||||
"winapi 0.3.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"void",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nodrop"
|
||||
version = "0.1.14"
|
||||
|
@ -15,4 +15,6 @@ libp2p-kad = "0.16.2"
|
||||
prometheus = "0.7"
|
||||
void = "1.0.2"
|
||||
tide = "0.6"
|
||||
exit-future = "0.2"
|
||||
ctrlc = "3"
|
||||
|
||||
|
46
src/main.rs
46
src/main.rs
@ -1,34 +1,44 @@
|
||||
use async_std::task;
|
||||
use prometheus::{Encoder, Registry, TextEncoder};
|
||||
use std::error::Error;
|
||||
use std::{error::Error, sync::{Arc, Mutex}};
|
||||
|
||||
mod behaviour;
|
||||
mod exporter;
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
let (signal, exit) = exit_future::signal();
|
||||
let signal = Arc::new(Mutex::new(Some(signal)));
|
||||
|
||||
ctrlc::set_handler(move || {
|
||||
println!("Got ctrlc");
|
||||
match signal.lock().unwrap().take() {
|
||||
Some(signal) => signal.fire().unwrap(),
|
||||
None => {}
|
||||
}
|
||||
}).unwrap();
|
||||
|
||||
let registry = Registry::new();
|
||||
let exporter = exporter::Exporter::new(®istry)?;
|
||||
|
||||
let _metrics_server = std::thread::spawn(move || {
|
||||
task::block_on(async {
|
||||
let mut app = tide::with_state(registry);
|
||||
app.at("/metrics")
|
||||
.get(|req: tide::Request<prometheus::Registry>| async move {
|
||||
let mut buffer = vec![];
|
||||
let encoder = TextEncoder::new();
|
||||
let metric_families = req.state().gather();
|
||||
encoder.encode(&metric_families, &mut buffer).unwrap();
|
||||
let exit_clone = exit.clone();
|
||||
let metrics_server = std::thread::spawn(move || {
|
||||
let mut app = tide::with_state(registry);
|
||||
app.at("/metrics")
|
||||
.get(|req: tide::Request<prometheus::Registry>| async move {
|
||||
let mut buffer = vec![];
|
||||
let encoder = TextEncoder::new();
|
||||
let metric_families = req.state().gather();
|
||||
encoder.encode(&metric_families, &mut buffer).unwrap();
|
||||
|
||||
String::from_utf8(buffer).unwrap()
|
||||
});
|
||||
app.listen("0.0.0.0:8080").await.unwrap();
|
||||
Result::<(), ()>::Ok(())
|
||||
})
|
||||
String::from_utf8(buffer).unwrap()
|
||||
});
|
||||
let endpoint = app.listen("0.0.0.0:8080");
|
||||
futures::pin_mut!(endpoint);
|
||||
task::block_on(exit_clone.until(endpoint))
|
||||
});
|
||||
|
||||
// Kick it off.
|
||||
let _listening = false;
|
||||
task::block_on(exporter);
|
||||
task::block_on(exit.until(exporter));
|
||||
|
||||
metrics_server.join().unwrap();
|
||||
Ok(())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user