mirror of
https://github.com/fluencelabs/kademlia-exporter
synced 2025-04-25 06:12: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",
|
"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]]
|
[[package]]
|
||||||
name = "cuckoofilter"
|
name = "cuckoofilter"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
@ -624,6 +634,15 @@ dependencies = [
|
|||||||
"version_check",
|
"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]]
|
[[package]]
|
||||||
name = "fake-simd"
|
name = "fake-simd"
|
||||||
version = "0.1.2"
|
version = "0.1.2"
|
||||||
@ -1139,7 +1158,9 @@ name = "kademlia-exporter"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-std",
|
"async-std",
|
||||||
|
"ctrlc",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
|
"exit-future",
|
||||||
"futures 0.3.4",
|
"futures 0.3.4",
|
||||||
"libp2p",
|
"libp2p",
|
||||||
"libp2p-kad",
|
"libp2p-kad",
|
||||||
@ -1767,6 +1788,19 @@ dependencies = [
|
|||||||
"winapi 0.3.8",
|
"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]]
|
[[package]]
|
||||||
name = "nodrop"
|
name = "nodrop"
|
||||||
version = "0.1.14"
|
version = "0.1.14"
|
||||||
|
@ -15,4 +15,6 @@ libp2p-kad = "0.16.2"
|
|||||||
prometheus = "0.7"
|
prometheus = "0.7"
|
||||||
void = "1.0.2"
|
void = "1.0.2"
|
||||||
tide = "0.6"
|
tide = "0.6"
|
||||||
|
exit-future = "0.2"
|
||||||
|
ctrlc = "3"
|
||||||
|
|
||||||
|
28
src/main.rs
28
src/main.rs
@ -1,16 +1,27 @@
|
|||||||
use async_std::task;
|
use async_std::task;
|
||||||
use prometheus::{Encoder, Registry, TextEncoder};
|
use prometheus::{Encoder, Registry, TextEncoder};
|
||||||
use std::error::Error;
|
use std::{error::Error, sync::{Arc, Mutex}};
|
||||||
|
|
||||||
mod behaviour;
|
mod behaviour;
|
||||||
mod exporter;
|
mod exporter;
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn Error>> {
|
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 registry = Registry::new();
|
||||||
let exporter = exporter::Exporter::new(®istry)?;
|
let exporter = exporter::Exporter::new(®istry)?;
|
||||||
|
|
||||||
let _metrics_server = std::thread::spawn(move || {
|
let exit_clone = exit.clone();
|
||||||
task::block_on(async {
|
let metrics_server = std::thread::spawn(move || {
|
||||||
let mut app = tide::with_state(registry);
|
let mut app = tide::with_state(registry);
|
||||||
app.at("/metrics")
|
app.at("/metrics")
|
||||||
.get(|req: tide::Request<prometheus::Registry>| async move {
|
.get(|req: tide::Request<prometheus::Registry>| async move {
|
||||||
@ -21,14 +32,13 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
|
|
||||||
String::from_utf8(buffer).unwrap()
|
String::from_utf8(buffer).unwrap()
|
||||||
});
|
});
|
||||||
app.listen("0.0.0.0:8080").await.unwrap();
|
let endpoint = app.listen("0.0.0.0:8080");
|
||||||
Result::<(), ()>::Ok(())
|
futures::pin_mut!(endpoint);
|
||||||
})
|
task::block_on(exit_clone.until(endpoint))
|
||||||
});
|
});
|
||||||
|
|
||||||
// Kick it off.
|
task::block_on(exit.until(exporter));
|
||||||
let _listening = false;
|
|
||||||
task::block_on(exporter);
|
|
||||||
|
|
||||||
|
metrics_server.join().unwrap();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user