advertise self over mdns

This commit is contained in:
Robin Appelman 2021-12-12 15:39:14 +01:00
commit f8684de7f5
3 changed files with 60 additions and 0 deletions

49
Cargo.lock generated
View file

@ -553,6 +553,27 @@ dependencies = [
"unicode-normalization", "unicode-normalization",
] ]
[[package]]
name = "if-addrs"
version = "0.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2273e421f7c4f0fc99e1934fe4776f59d8df2972f4199d703fc0da9f2a9f73de"
dependencies = [
"if-addrs-sys",
"libc",
"winapi",
]
[[package]]
name = "if-addrs-sys"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de74b9dd780476e837e5eb5ab7c88b49ed304126e412030a0adba99c8efe79ea"
dependencies = [
"cc",
"libc",
]
[[package]] [[package]]
name = "indenter" name = "indenter"
version = "0.3.3" version = "0.3.3"
@ -587,6 +608,24 @@ version = "0.2.111"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e167738f1866a7ec625567bae89ca0d44477232a4f7c52b1c7f2adc2c98804f" checksum = "8e167738f1866a7ec625567bae89ca0d44477232a4f7c52b1c7f2adc2c98804f"
[[package]]
name = "libmdns"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fac185a4d02e873c6d1ead59d674651f8ae5ec23ffe1637bee8de80665562a6a"
dependencies = [
"byteorder",
"futures-util",
"hostname",
"if-addrs",
"log",
"multimap",
"rand",
"socket2",
"thiserror",
"tokio",
]
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.14" version = "0.4.14"
@ -671,6 +710,15 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "multimap"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "multipart" name = "multipart"
version = "0.18.0" version = "0.18.0"
@ -780,6 +828,7 @@ dependencies = [
"hostname", "hostname",
"iai", "iai",
"libc", "libc",
"libmdns",
"once_cell", "once_cell",
"regex", "regex",
"tokio", "tokio",

View file

@ -17,6 +17,7 @@ libc = "0.2"
ahash = "0.7" ahash = "0.7"
bollard = "0.11" bollard = "0.11"
futures-util = "0.3" futures-util = "0.3"
libmdns = "0.6"
[dev-dependencies] [dev-dependencies]
iai = "0.1" iai = "0.1"

View file

@ -2,10 +2,12 @@ use bollard::Docker;
use color_eyre::{Report, Result}; use color_eyre::{Report, Result};
use futures_util::pin_mut; use futures_util::pin_mut;
use futures_util::StreamExt; use futures_util::StreamExt;
use libmdns::Responder;
use palantir::docker::{get_docker, stat, Container}; use palantir::docker::{get_docker, stat, Container};
use palantir::get_metrics; use palantir::get_metrics;
use palantir::power::power_usage; use palantir::power::power_usage;
use palantir::zfs::arcstats; use palantir::zfs::arcstats;
use tokio::runtime::Handle;
use warp::reject::Reject; use warp::reject::Reject;
use warp::{Filter, Rejection}; use warp::{Filter, Rejection};
@ -64,6 +66,14 @@ async fn main() -> Result<()> {
let docker = get_docker().await; let docker = get_docker().await;
let docker = warp::any().map(move || docker.clone()); let docker = warp::any().map(move || docker.clone());
let mdns = Responder::spawn(&Handle::current())?;
let _svc = mdns.register(
"_prometheus-http._tcp".into(),
"Palantir prometheus exporter".into(),
host_port,
&[&"/metrics"],
);
let metrics = warp::path!("metrics").and(docker).and_then(serve_metrics); let metrics = warp::path!("metrics").and(docker).and_then(serve_metrics);
warp::serve(metrics).run(([0, 0, 0, 0], host_port)).await; warp::serve(metrics).run(([0, 0, 0, 0], host_port)).await;