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",
|
"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]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
|
@ -780,6 +789,8 @@ dependencies = [
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"regex",
|
"regex",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
"tracing-subscriber",
|
||||||
"warp",
|
"warp",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -1042,6 +1053,12 @@ version = "0.4.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
|
checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "smallvec"
|
||||||
|
version = "1.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "socket2"
|
name = "socket2"
|
||||||
version = "0.4.4"
|
version = "0.4.4"
|
||||||
|
|
@ -1223,9 +1240,21 @@ dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"log",
|
"log",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
|
"tracing-attributes",
|
||||||
"tracing-core",
|
"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]]
|
[[package]]
|
||||||
name = "tracing-core"
|
name = "tracing-core"
|
||||||
version = "0.1.28"
|
version = "0.1.28"
|
||||||
|
|
@ -1246,15 +1275,29 @@ dependencies = [
|
||||||
"tracing-subscriber",
|
"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]]
|
[[package]]
|
||||||
name = "tracing-subscriber"
|
name = "tracing-subscriber"
|
||||||
version = "0.3.11"
|
version = "0.3.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596"
|
checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"ansi_term",
|
||||||
"sharded-slab",
|
"sharded-slab",
|
||||||
|
"smallvec",
|
||||||
"thread_local",
|
"thread_local",
|
||||||
"tracing-core",
|
"tracing-core",
|
||||||
|
"tracing-log",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ ahash = "0.7"
|
||||||
bollard = "0.13.0"
|
bollard = "0.13.0"
|
||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
libmdns = "0.7"
|
libmdns = "0.7"
|
||||||
|
tracing = "0.1.33"
|
||||||
|
tracing-subscriber = "0.3.11"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
iai = "0.1"
|
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::get_metrics;
|
||||||
use palantir::power::power_usage;
|
use palantir::power::power_usage;
|
||||||
use palantir::zfs::arcstats;
|
use palantir::zfs::arcstats;
|
||||||
|
use std::time::Duration;
|
||||||
use tokio::runtime::Handle;
|
use tokio::runtime::Handle;
|
||||||
|
use tokio::spawn;
|
||||||
|
use tokio::time::sleep;
|
||||||
|
use tracing::warn;
|
||||||
use warp::reject::Reject;
|
use warp::reject::Reject;
|
||||||
use warp::{Filter, Rejection};
|
use warp::{Filter, Rejection};
|
||||||
|
|
||||||
|
|
@ -52,6 +56,8 @@ async fn serve_metrics(docker: Option<Docker>) -> Result<String, Rejection> {
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
|
tracing_subscriber::fmt::init();
|
||||||
|
|
||||||
let host_port: u16 = dotenv::var("PORT")
|
let host_port: u16 = dotenv::var("PORT")
|
||||||
.ok()
|
.ok()
|
||||||
.map(|port| port.parse())
|
.map(|port| port.parse())
|
||||||
|
|
@ -66,16 +72,36 @@ 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())?;
|
spawn(setup_mdns(
|
||||||
let _svc = mdns.register(
|
|
||||||
"_prometheus-http._tcp".into(),
|
|
||||||
hostname::get()?.into_string().unwrap(),
|
hostname::get()?.into_string().unwrap(),
|
||||||
host_port,
|
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;
|
||||||
Ok(())
|
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