diff --git a/Cargo.lock b/Cargo.lock
index 20de2c3..c02053b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -452,6 +452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779"
dependencies = [
"backtrace",
+ "bytes",
"libc",
"mio",
"pin-project-lite",
diff --git a/Cargo.toml b/Cargo.toml
index 2557432..0107e0f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,4 +6,4 @@ edition = "2021"
[dependencies]
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 = ["io-util", "rt-multi-thread"] }
diff --git a/src/main.rs b/src/main.rs
index 27cdcca..3a47fb8 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,6 +4,14 @@ use axum::{
Router,
};
use serde::Deserialize;
+use tokio::io::{
+ AsyncBufReadExt,
+ AsyncWriteExt,
+ BufReader,
+};
+use tokio::net::{
+ TcpStream,
+};
#[derive(Deserialize)]
struct ProbeClientToServerQuery {
@@ -46,7 +54,7 @@ async fn main() {
let listener = tokio::net::TcpListener::bind(listen).await.unwrap();
println!("Server listening on: http://{}", 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());
+ println!(" http://{}/probe-client-to-server?domain=fem-net.de&hostname=xmpp-2.fem-net.de&port=5222", listener.local_addr().unwrap());
axum::serve(listener, app).await.unwrap();
}
@@ -55,9 +63,29 @@ async fn route_index() -> String {
return String::from("Prometheus exporter for checking XMPP server availability");
}
+async fn probe_client_to_server(domain: &str, hostname: &str, port: u16) -> Result<(), String> {
+ let mut stream = TcpStream::connect((hostname, port)).await.unwrap();
+
+ let connect_string = format!("", domain);
+
+ stream.write_all(connect_string.as_bytes()).await.unwrap();
+
+ let mut stream = BufReader::new(stream);
+
+ let mut response = String::new();
+ stream.read_line(&mut response).await.unwrap();
+
+ println!("{}", response);
+
+ Ok(())
+}
+
async fn route_probe_client_to_server(
Query(query): Query,
) -> Result {
+
+ probe_client_to_server(&query.domain, &query.hostname, query.port).await.unwrap();
+
let mut out = String::new();
out.push_str(&format!("{} {}:{}", query.domain, query.hostname, query.port));