mirror of
https://codeberg.org/icewind/palantir.git
synced 2026-06-03 18:24:08 +02:00
more reliable mdns setup
This commit is contained in:
parent
df88fd2102
commit
25fde3eeb6
3 changed files with 76 additions and 5 deletions
43
Cargo.lock
generated
43
Cargo.lock
generated
|
|
@ -28,6 +28,15 @@ dependencies = [
|
|||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ansi_term"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.1.0"
|
||||
|
|
@ -780,6 +789,8 @@ dependencies = [
|
|||
"once_cell",
|
||||
"regex",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
"warp",
|
||||
]
|
||||
|
||||
|
|
@ -1042,6 +1053,12 @@ version = "0.4.6"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.4.4"
|
||||
|
|
@ -1223,9 +1240,21 @@ dependencies = [
|
|||
"cfg-if",
|
||||
"log",
|
||||
"pin-project-lite",
|
||||
"tracing-attributes",
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-attributes"
|
||||
version = "0.1.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-core"
|
||||
version = "0.1.28"
|
||||
|
|
@ -1246,15 +1275,29 @@ dependencies = [
|
|||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-log"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"log",
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-subscriber"
|
||||
version = "0.3.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596"
|
||||
dependencies = [
|
||||
"ansi_term",
|
||||
"sharded-slab",
|
||||
"smallvec",
|
||||
"thread_local",
|
||||
"tracing-core",
|
||||
"tracing-log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ ahash = "0.7"
|
|||
bollard = "0.13.0"
|
||||
futures-util = "0.3"
|
||||
libmdns = "0.7"
|
||||
tracing = "0.1.33"
|
||||
tracing-subscriber = "0.3.11"
|
||||
|
||||
[dev-dependencies]
|
||||
iai = "0.1"
|
||||
|
|
|
|||
36
src/main.rs
36
src/main.rs
|
|
@ -7,7 +7,11 @@ use palantir::docker::{get_docker, stat, Container};
|
|||
use palantir::get_metrics;
|
||||
use palantir::power::power_usage;
|
||||
use palantir::zfs::arcstats;
|
||||
use std::time::Duration;
|
||||
use tokio::runtime::Handle;
|
||||
use tokio::spawn;
|
||||
use tokio::time::sleep;
|
||||
use tracing::warn;
|
||||
use warp::reject::Reject;
|
||||
use warp::{Filter, Rejection};
|
||||
|
||||
|
|
@ -52,6 +56,8 @@ async fn serve_metrics(docker: Option<Docker>) -> Result<String, Rejection> {
|
|||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
tracing_subscriber::fmt::init();
|
||||
|
||||
let host_port: u16 = dotenv::var("PORT")
|
||||
.ok()
|
||||
.map(|port| port.parse())
|
||||
|
|
@ -66,16 +72,36 @@ async fn main() -> Result<()> {
|
|||
let docker = get_docker().await;
|
||||
let docker = warp::any().map(move || docker.clone());
|
||||
|
||||
let mdns = Responder::spawn(&Handle::current())?;
|
||||
let _svc = mdns.register(
|
||||
"_prometheus-http._tcp".into(),
|
||||
spawn(setup_mdns(
|
||||
hostname::get()?.into_string().unwrap(),
|
||||
host_port,
|
||||
&[&"/metrics"],
|
||||
);
|
||||
));
|
||||
|
||||
let metrics = warp::path!("metrics").and(docker).and_then(serve_metrics);
|
||||
|
||||
warp::serve(metrics).run(([0, 0, 0, 0], host_port)).await;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn setup_mdns(hostname: String, port: u16) {
|
||||
let mdns = loop {
|
||||
match Responder::spawn(&Handle::current()) {
|
||||
Ok(mdns) => break mdns,
|
||||
Err(e) => {
|
||||
warn!(error = display(e), "Failed to register mdns responder");
|
||||
sleep(Duration::from_secs(5)).await;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let _svc = mdns.register(
|
||||
"_prometheus-http._tcp".into(),
|
||||
hostname,
|
||||
port,
|
||||
&[&"/metrics"],
|
||||
);
|
||||
|
||||
loop {
|
||||
sleep(Duration::from_secs(60 * 60)).await;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue