Specify server to probe against using query string

This commit is contained in:
2025-06-01 15:43:54 +02:00
parent e2769775e5
commit e002c3a8c3
3 changed files with 19 additions and 4 deletions

1
Cargo.lock generated
View File

@@ -618,5 +618,6 @@ name = "xmpp-blackbox-exporter"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"axum", "axum",
"serde",
"tokio", "tokio",
] ]

View File

@@ -5,4 +5,5 @@ edition = "2021"
[dependencies] [dependencies]
axum = "0.8.4" axum = "0.8.4"
serde = { version = "1.0.219", features = ["derive"] }
tokio = { version = "1.45.1", features = ["rt-multi-thread"] } tokio = { version = "1.45.1", features = ["rt-multi-thread"] }

View File

@@ -1,7 +1,17 @@
use axum::{ use axum::{
extract::Query,
routing::get, routing::get,
Router, Router,
}; };
use serde::Deserialize;
#[derive(Deserialize)]
struct ProbeClientToServerQuery {
domain: String,
hostname: String,
port: u16,
}
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
@@ -31,11 +41,12 @@ async fn main() {
let app = Router::new() let app = Router::new()
.route("/", get(route_index)) .route("/", get(route_index))
.route("/probe", get(route_probe)); .route("/probe-client-to-server", get(route_probe_client_to_server));
let listener = tokio::net::TcpListener::bind(listen).await.unwrap(); let listener = tokio::net::TcpListener::bind(listen).await.unwrap();
println!("Server listening on: http://{}", listener.local_addr().unwrap()); println!("Server listening on: http://{}", listener.local_addr().unwrap());
println!("Probe with: http://{}/probe", listener.local_addr().unwrap()); println!("Probe with:");
println!(" http://{}/probe-client-to-server?domain=fem-net.de&hostname=xmpp-2.net.clerie.de&port=5222", listener.local_addr().unwrap());
axum::serve(listener, app).await.unwrap(); axum::serve(listener, app).await.unwrap();
} }
@@ -44,9 +55,11 @@ async fn route_index() -> String {
return String::from("Prometheus exporter for checking XMPP server availability"); return String::from("Prometheus exporter for checking XMPP server availability");
} }
async fn route_probe() -> Result<String, String> { async fn route_probe_client_to_server(
Query(query): Query<ProbeClientToServerQuery>,
) -> Result<String, String> {
let mut out = String::new(); let mut out = String::new();
out.push_str("hallo welt"); out.push_str(&format!("{} {}:{}", query.domain, query.hostname, query.port));
return Ok(out); return Ok(out);
} }