From 122912710136b8589c80e36b83d28bcac08988f1 Mon Sep 17 00:00:00 2001 From: Tamipes Date: Fri, 29 May 2026 10:40:51 +0200 Subject: [PATCH 1/2] feat: add better logging span to `process_connection` --- src/main.rs | 66 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/src/main.rs b/src/main.rs index fe32e77..e4039f2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -103,35 +103,49 @@ async fn process_connection( api: impl MinecraftAPI, config: Config, ) -> Result<(), OpaqueError> { - let client_packet = Packet::parse(&mut client_stream).await?; + // this is wrapper so that async doesnt mess up the span, and + // to make sure this doesn't propagate to later `handle_*` + #[tracing::instrument(level = "info", skip(client_stream, config))] + async fn first_packet( + client_stream: &mut TcpStream, + config: Config, + ) -> Result, OpaqueError> { + let client_packet = Packet::parse(client_stream).await?; - // --- Handshake --- - let handshake; - let next_server_state; - let packet_id = client_packet.id.get_int(); - if packet_id != 0 { - return Err(OpaqueError::create(&format!( - "Client HANDSHAKE -> bad packet; id={packet_id} Disconnecting..." - ))); + // --- Handshake --- + let handshake; + let packet_id = client_packet.id.get_int(); + if packet_id != 0 { + return Err(OpaqueError::create(&format!( + "Client HANDSHAKE -> bad packet; id={packet_id} Disconnecting..." + ))); + } + handshake = packets::serverbound::handshake::Handshake::parse(client_packet) + .await + .ok_or_else(|| "Client HANDSHAKE -> malformed packet; Disconnecting...".to_string())?; + + let filter = eval_boolean(&format!( + "addr=\"{}\";{}", + handshake.get_server_address(), + config.filter_conn + )) + .map_err(|e| format!("filter error! err={:?}", e))?; + if filter { + // TODO: if the server just returns here, the client does not know it + // and sends a packet with the 122 WeirdID + tracing::trace!("filtered out the connection"); + return Ok(None); + } + + Ok(Some(handshake)) } - handshake = packets::serverbound::handshake::Handshake::parse(client_packet) - .await - .ok_or_else(|| "Client HANDSHAKE -> malformed packet; Disconnecting...".to_string())?; - - let filter = eval_boolean(&format!( - "addr=\"{}\";{}", - handshake.get_server_address(), - config.filter_conn - )) - .map_err(|e| format!("filter error! err={:?}", e))?; - if filter { - // TODO: if the server just returns here, the client does not know it - // and sends a packet with the 122 WeirdID - return Ok(()); - } - - next_server_state = handshake.get_next_state(); + let handshake = match first_packet(&mut client_stream, config).await? { + Some(x) => x, + // this is needed because of the filter + None => return Ok(()), + }; + let next_server_state = handshake.get_next_state(); match next_server_state { packets::ProtocolState::Status => { handle_status(&mut client_stream, &handshake, api).await?; From 1bce912a1a0c64640aa2c6fa8a0f31952b0e5a0e Mon Sep 17 00:00:00 2001 From: Tamipes Date: Fri, 29 May 2026 10:42:24 +0200 Subject: [PATCH 2/2] feat: polish logging if the server is unavailable --- src/kube_cache.rs | 7 ++----- src/main.rs | 8 +++++--- src/mc_server.rs | 1 + 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/kube_cache.rs b/src/kube_cache.rs index 490db59..95e34d9 100644 --- a/src/kube_cache.rs +++ b/src/kube_cache.rs @@ -12,11 +12,7 @@ use tracing::Instrument; use crate::{ mc_server::{sanitize_addr, MinecraftAPI, MinecraftServerHandle, ServerDeploymentStatus}, - packets::{ - clientbound::status::StatusTrait, - serverbound::handshake::{self}, - SendPacket, - }, + packets::{clientbound::status::StatusTrait, SendPacket}, OpaqueError, }; @@ -438,6 +434,7 @@ impl fmt::Debug for ServerDeploymentStatus { Self::Starting => write!(f, "Starting"), Self::PodOk => write!(f, "PodOk"), Self::Offline => write!(f, "Offline"), + Self::Unavailable(s) => write!(f, "Unavailable ({s})"), } } } diff --git a/src/main.rs b/src/main.rs index e4039f2..6a8322d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -235,9 +235,9 @@ async fn handle_status( .instrument(span.clone()) .await .map_err(|_| tracing::debug!("failed to send pong packet")); - let _guard = span.enter(); - tracing::info!(status = "unavailable", "status request"); + let status = ServerDeploymentStatus::Unavailable(e.get_kind().to_string()); + tracing::info!(status = ?status, "status request"); return Ok(()); } }; @@ -264,6 +264,7 @@ async fn handle_status( status_struct.description.text = format!("{motd}\n§4Offline§r §oJoin to start!§r - {BYE_MESSAGE}"); } + ServerDeploymentStatus::Unavailable(_) => unreachable!(), }; mc_server::complete_status_request(client_stream, status_struct).await?; @@ -321,7 +322,7 @@ async fn handle_login( match traffic.error { Some(e) => { - tracing::info!( + tracing::warn!( tx = traffic.tx, rx = traffic.rx, err = ?e, @@ -344,6 +345,7 @@ async fn handle_login( .await?; mc_server::send_disconnect(client_stream, format!("[\"\",{{\"text\":\"Okayy, §2starting§r the server!\n\n\"}},{{\"text\":\"{BYE_MESSAGE}\"}}]").as_str()).await?; } + ServerDeploymentStatus::Unavailable(_) => unreachable!(), } Ok(()) } diff --git a/src/mc_server.rs b/src/mc_server.rs index 069e27a..03b6a9d 100644 --- a/src/mc_server.rs +++ b/src/mc_server.rs @@ -139,6 +139,7 @@ pub enum ServerDeploymentStatus { Starting, PodOk, Offline, + Unavailable(String), } pub fn sanitize_addr(addr: &str) -> &str {