From 88990f3650db03cf3961f6d2d956a8eb493aae88 Mon Sep 17 00:00:00 2001 From: valkyrie_pilot Date: Tue, 28 May 2024 21:11:11 -0600 Subject: [PATCH] Valuable work --- .cargo/config.toml | 2 + Cargo.lock | 137 ++++++++++++++++++--------------------------- Cargo.toml | 3 +- src/main.rs | 21 ++----- src/services.rs | 3 +- src/structures.rs | 33 +++++------ 6 files changed, 84 insertions(+), 115 deletions(-) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..94d4d1e --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +rustflags = ["--cfg=tracing_unstable"] \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index dbf271d..151b208 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -30,15 +30,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - [[package]] name = "aligned-vec" version = "0.5.0" @@ -74,7 +65,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -96,7 +87,7 @@ dependencies = [ "argh_shared", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -157,7 +148,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 2.0.66", ] [[package]] @@ -183,7 +174,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -569,7 +560,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1049,7 +1040,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1199,15 +1190,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - [[package]] name = "matchit" version = "0.7.3" @@ -1257,6 +1239,7 @@ dependencies = [ "tracing", "tracing-subscriber", "valk-utils", + "valuable", "vss", ] @@ -1360,7 +1343,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1475,7 +1458,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1540,7 +1523,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1701,50 +1684,6 @@ dependencies = [ "bitflags 2.5.0", ] -[[package]] -name = "regex" -version = "1.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.3", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" - [[package]] name = "reqwest" version = "0.12.4" @@ -1915,7 +1854,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2044,6 +1983,17 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.66" @@ -2124,7 +2074,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2189,7 +2139,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2323,7 +2273,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -2347,22 +2297,31 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ - "matchers", "nu-ansi-term", - "once_cell", - "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", - "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] @@ -2440,6 +2399,20 @@ name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +dependencies = [ + "valuable-derive", +] + +[[package]] +name = "valuable-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d44690c645190cfce32f91a1582281654b2338c6073fa250b0949fd25c55b32" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "version-compare" @@ -2514,7 +2487,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -2548,7 +2521,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2806,7 +2779,7 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 87c6c94..b2f747c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,8 +9,9 @@ reqwest = { version = "0.12", features = ["json", "trust-dns", "rustls-tls-webpk axum = { version = "0.7", features = ["tokio", "http1", "http2", "query"], default-features = false } tower-http = { version = "0.5", default-features = false, features = ["tracing", "fs"] } tokio = { version = "1", features = ["rt-multi-thread", "macros", "signal"] } -tracing-subscriber = { version = "0.3", features = ["env-filter"] } +tracing-subscriber = { version = "0.3", features = ["json"] } askama = { version = "0.12", features = ["with-axum"] } +valuable = { version = "0.1", features = ["derive"] } bustdir = { version = "0.1", features = ["askama"] } serde = { version = "1", features = ["derive"] } pyng = { path = "pyng" } diff --git a/src/main.rs b/src/main.rs index 198c0a2..fe5d5a4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,7 +32,7 @@ use serde::{Deserialize, Serialize}; use tokio::net::TcpListener; use tower::ServiceBuilder; use tower_http::services::ServeDir; -use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; +use valuable::Valuable; use crate::{ executor::{ping_bedrock, ping_java}, @@ -47,7 +47,7 @@ const DEFAULT_PORT: u16 = 8080; #[tokio::main] async fn main() { - start_tracing(); + tracing_subscriber::fmt().json().init(); let asset_dir = std::env::var("ASSET_DIR").unwrap_or_else(|_| "./assets/".to_owned()); let root_url = valk_utils::get_var("ROOT_URL"); let root_url = root_url.trim_end_matches('/').to_owned(); @@ -70,7 +70,10 @@ async fn main() { info!("Fetching minecraft server status"); let current_mcstatus: Arc> = Arc::new(RwLock::new(get_mcstatus(http_client.clone()).await)); - info!(?current_mcstatus, "Got minecraft server status"); + info!( + status = current_mcstatus.read().as_value(), + "Got mojang service status" + ); tokio::spawn(refresh_mcstatus(http_client, Arc::clone(¤t_mcstatus))); let state = AppState { @@ -464,15 +467,3 @@ impl IntoResponse for Png { (headers, self.0).into_response() } } - -fn start_tracing() { - let env_filter = tracing_subscriber::EnvFilter::builder() - .with_default_directive(concat!(env!("CARGO_PKG_NAME"), "=debug").parse().unwrap()) - .with_env_var("LOG") - .from_env() - .expect("failed to parse env"); - tracing_subscriber::registry() - .with(tracing_subscriber::fmt::layer()) - .with(env_filter) - .init(); -} diff --git a/src/services.rs b/src/services.rs index c2cee61..c9d7ecf 100644 --- a/src/services.rs +++ b/src/services.rs @@ -4,6 +4,7 @@ use axum::extract::State; use parking_lot::RwLock; use reqwest::Client; use tokio::{join, select}; +use tracing_core::field::valuable; use crate::{ structures::{ @@ -178,7 +179,7 @@ async fn get_minecraft(client: Client) -> Status { if data.as_slice() == expected { Status::Operational } else { - warn!(expected = ?expected, data = ?data, "Got non-matching Minecraft API data"); + warn!(expected = ?expected, data = valuable(&data), "Got non-matching Minecraft API data"); Status::PossibleProblems } } diff --git a/src/structures.rs b/src/structures.rs index 7aa9a49..93259c9 100644 --- a/src/structures.rs +++ b/src/structures.rs @@ -1,8 +1,9 @@ use std::fmt::{Debug, Display}; use serde::{Deserialize, Serialize, Serializer}; +use valuable::Valuable; -#[derive(Serialize, Debug, Clone, Copy)] +#[derive(Serialize, Valuable, Debug, Clone, Copy)] pub struct ServicesResponse { #[serde(rename(serialize = "Xbox services"))] pub xbox: Status, @@ -14,7 +15,7 @@ pub struct ServicesResponse { pub minecraft_api: Status, } -#[derive(Deserialize, Clone, Debug)] +#[derive(Deserialize, Valuable, Clone, Debug)] #[serde(rename_all = "PascalCase")] pub struct XblStatusResponse { pub status: XblStatusStatus, @@ -22,20 +23,20 @@ pub struct XblStatusResponse { pub titles: Vec, } -#[derive(Deserialize, Clone, Debug)] +#[derive(Deserialize, Valuable, Clone, Debug)] #[serde(rename_all = "PascalCase")] pub struct XblStatusStatus { pub overall: XblStatusStatusItem, } -#[derive(Deserialize, Clone, Debug)] +#[derive(Deserialize, Valuable, Clone, Debug)] #[serde(rename_all = "PascalCase")] pub struct XblStatusStatusItem { pub state: String, } #[allow(clippy::module_name_repetitions)] -#[derive(Deserialize, Clone, Debug)] +#[derive(Deserialize, Valuable, Clone, Debug)] pub struct XblStatusCoreService { #[serde(rename(deserialize = "Id"))] pub id: i64, @@ -45,37 +46,37 @@ pub struct XblStatusCoreService { pub possible_scenarios: Vec, } -#[derive(Deserialize, Clone, Debug)] +#[derive(Deserialize, Valuable, Clone, Debug)] #[serde(rename_all = "PascalCase")] pub struct XblStatusCoreServiceScenario { pub id: i64, } -#[derive(Deserialize, Clone, Debug)] +#[derive(Deserialize, Valuable, Clone, Debug)] #[serde(rename_all = "PascalCase")] pub struct XblStatusCoreServiceStatus { pub id: i64, } -#[derive(Deserialize, Clone, Debug)] +#[derive(Deserialize, Valuable, Clone, Debug)] pub struct MojangSessionServerStatus { pub id: String, pub name: String, } -#[derive(Deserialize, Clone, Debug)] +#[derive(Deserialize, Valuable, Clone, Debug)] pub struct MojangApiStatus { pub id: String, pub name: String, } -#[derive(Deserialize, Clone, Debug, Eq, PartialEq)] +#[derive(Deserialize, Valuable, Clone, Debug, Eq, PartialEq)] pub struct MinecraftApiStatusEntry { pub id: String, pub name: String, } -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Valuable, Debug, Clone)] pub struct MCPingResponse { pub latency: u64, pub players: Players, @@ -86,32 +87,32 @@ pub struct MCPingResponse { pub chat: ChatStatus, } -#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)] +#[derive(Serialize, Deserialize, Valuable, Debug, Clone, Copy, Default)] pub struct ChatStatus { pub preview: bool, pub signing: bool, } -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Valuable, Debug, Clone)] pub struct Version { pub protocol: i64, pub broadcast: String, } -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Valuable, Debug, Clone)] pub struct Players { pub online: i64, pub maximum: i64, pub sample: Vec, } -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Valuable, Debug, Clone)] pub struct PlayerSample { pub uuid: String, pub name: String, } -#[derive(Clone, Copy, Debug)] +#[derive(Clone, Copy, Debug, Valuable)] pub enum Status { Operational, PossibleProblems,