From 936364e3db0457354ec7bbc970852f9b7436ab7e Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Thu, 6 Feb 2025 18:56:09 +1000 Subject: [PATCH 01/14] refactor: naively moved to tracing --- Cargo.lock | 181 +++++++++++---------- Cargo.toml | 2 +- pueue/Cargo.toml | 13 +- pueue/src/bin/pueue.rs | 2 +- pueue/src/bin/pueued.rs | 2 +- pueue/src/client/cli.rs | 2 +- pueue/src/client/client.rs | 3 +- pueue/src/daemon/callbacks.rs | 3 +- pueue/src/daemon/mod.rs | 3 +- pueue/src/daemon/network/socket.rs | 3 +- pueue/src/daemon/pid.rs | 3 +- pueue/src/daemon/process_handler/finish.rs | 3 +- pueue/src/daemon/process_handler/kill.rs | 2 +- pueue/src/daemon/process_handler/mod.rs | 8 +- pueue/src/daemon/process_handler/pause.rs | 2 +- pueue/src/daemon/process_handler/spawn.rs | 3 +- pueue/src/daemon/process_handler/start.rs | 2 +- pueue/src/daemon/state_helper.rs | 3 +- pueue/src/daemon/task_handler.rs | 3 +- pueue/src/lib.rs | 6 + pueue/tests/helper/mod.rs | 27 +-- pueue_lib/Cargo.toml | 2 +- pueue_lib/src/aliasing.rs | 4 +- pueue_lib/src/lib.rs | 5 + pueue_lib/src/log.rs | 3 +- pueue_lib/src/network/certificate.rs | 3 +- pueue_lib/src/network/protocol.rs | 3 +- pueue_lib/src/network/socket/unix.rs | 3 +- pueue_lib/src/network/tls.rs | 2 - pueue_lib/src/process_helper/mod.rs | 3 +- pueue_lib/src/process_helper/unix.rs | 6 +- pueue_lib/src/settings.rs | 3 +- 32 files changed, 168 insertions(+), 145 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a84fba96e..3ad84242b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -121,9 +121,9 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -231,15 +231,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "cc" -version = "1.2.10" +version = "1.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" +checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" dependencies = [ "shlex", ] @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.27" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" dependencies = [ "clap_builder", "clap_derive", @@ -316,9 +316,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.42" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a7e468e750fa4b6be660e8b5651ad47372e8fb114030b594c2d75d48c5ffd0" +checksum = "375f9d8255adeeedd51053574fd8d4ba875ea5fa558e86617b07f09f1680c8b6" dependencies = [ "clap", ] @@ -335,9 +335,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", @@ -399,9 +399,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -548,19 +548,6 @@ dependencies = [ "log", ] -[[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - [[package]] name = "env_logger" version = "0.11.6" @@ -662,7 +649,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", ] [[package]] @@ -709,24 +708,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "iana-time-zone" version = "0.1.61" @@ -770,17 +757,6 @@ dependencies = [ "logos", ] -[[package]] -name = "is-terminal" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -947,7 +923,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -1252,10 +1228,8 @@ dependencies = [ "command-group", "crossterm", "ctrlc", - "env_logger 0.10.2", "handlebars", "interim", - "log", "pest", "pest_derive", "pretty_assertions", @@ -1274,6 +1248,8 @@ dependencies = [ "test-log", "tokio", "toml", + "tracing", + "tracing-subscriber", "whoami", "windows", "windows-service", @@ -1292,7 +1268,6 @@ dependencies = [ "dirs 6.0.0", "handlebars", "libproc", - "log", "portpicker", "pretty_assertions", "procfs", @@ -1312,6 +1287,7 @@ dependencies = [ "thiserror 2.0.11", "tokio", "tokio-rustls", + "tracing", "whoami", "winapi", ] @@ -1352,7 +1328,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -1383,7 +1359,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror 1.0.69", ] @@ -1394,7 +1370,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror 2.0.11", ] @@ -1466,7 +1442,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -1526,9 +1502,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.43" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ "bitflags", "errno", @@ -1539,9 +1515,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.21" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "log", "once_cell", @@ -1563,9 +1539,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" @@ -1586,9 +1562,9 @@ checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "scopeguard" @@ -1634,9 +1610,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.137" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -1811,9 +1787,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.96" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -1822,13 +1798,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.15.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", - "getrandom", + "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", @@ -1865,7 +1841,7 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7f46083d221181166e5b6f6b1e5f1d499f3a76888826e6cb1d057554157cd0f" dependencies = [ - "env_logger 0.11.6", + "env_logger", "test-log-macros", "tracing-subscriber", ] @@ -2003,9 +1979,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -2024,9 +2000,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ "indexmap", "serde", @@ -2042,9 +2018,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tracing-core" version = "0.1.33" @@ -2077,6 +2065,7 @@ dependencies = [ "once_cell", "regex", "sharded-slab", + "smallvec", "thread_local", "tracing", "tracing-core", @@ -2097,9 +2086,9 @@ checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-segmentation" @@ -2145,9 +2134,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -2158,6 +2147,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasite" version = "0.1.0" @@ -2514,13 +2512,22 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.24" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags", +] + [[package]] name = "yansi" version = "1.0.1" diff --git a/Cargo.toml b/Cargo.toml index ddf4e8ff1..69d0851e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ better-panic = "0.3" chrono = { version = "0.4", features = ["serde"] } command-group = "5" handlebars = "5.1" -log = "0.4" +tracing = "0.1.41" pretty_assertions = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" diff --git a/pueue/Cargo.toml b/pueue/Cargo.toml index e6e9599a0..30dc8567a 100644 --- a/pueue/Cargo.toml +++ b/pueue/Cargo.toml @@ -30,7 +30,6 @@ command-group.workspace = true ctrlc = { version = "3", features = ["termination"] } handlebars.workspace = true interim = { version = "0.1.2", features = ["chrono"] } -log.workspace = true pest = "2.7" pest_derive = "2.7" pueue-lib = { version = "0.27.0", path = "../pueue_lib" } @@ -43,23 +42,25 @@ strum.workspace = true tempfile = "3" tokio.workspace = true toml = "0.8" +tracing.workspace = true [dev-dependencies] anyhow.workspace = true assert_cmd = "2" assert_matches = "1" better-panic.workspace = true -# Make it easy to view log output for select tests. -# Set log level for tests with RUST_LOG=, use with failed tests or -# disable test stdout/stderr capture (`cargo test -- --nocapture` / `cargo -# nextest run --no-capture`) -env_logger = "0.10" pretty_assertions.workspace = true rstest = "0.24" serde_yaml.workspace = true similar-asserts = "1" test-log = "0.2" +# Make it easy to view log output for select tests. +# Set log level for tests with RUST_LOG=, use with failed tests or +# disable test stdout/stderr capture (`cargo test -- --nocapture` / `cargo +# nextest run --no-capture`) +tracing-subscriber = { version = "*", features = ["env-filter", "fmt"] } + # We don't need any of the default features for crossterm. # However, the windows build needs the windows feature enabled. [target.'cfg(not(windows))'.dependencies] diff --git a/pueue/src/bin/pueue.rs b/pueue/src/bin/pueue.rs index 6fb23a28f..fa08c6fa1 100644 --- a/pueue/src/bin/pueue.rs +++ b/pueue/src/bin/pueue.rs @@ -3,8 +3,8 @@ use std::path::PathBuf; use anyhow::{bail, Context, Result}; use clap::{CommandFactory, Parser}; use clap_complete::{generate, generate_to, shells}; -use log::warn; use simplelog::{Config, ConfigBuilder, LevelFilter, SimpleLogger, TermLogger, TerminalMode}; +use tracing::*; use pueue_lib::settings::Settings; diff --git a/pueue/src/bin/pueued.rs b/pueue/src/bin/pueued.rs index 2f066cfae..73f820b14 100644 --- a/pueue/src/bin/pueued.rs +++ b/pueue/src/bin/pueued.rs @@ -2,8 +2,8 @@ use std::process::Command; use anyhow::Result; use clap::Parser; -use log::warn; use simplelog::{Config, ConfigBuilder, LevelFilter, SimpleLogger, TermLogger, TerminalMode}; +use tracing::*; use pueue::daemon::{cli::CliArguments, run}; diff --git a/pueue/src/client/cli.rs b/pueue/src/client/cli.rs index 4d4f6c8b8..c6edf281e 100644 --- a/pueue/src/client/cli.rs +++ b/pueue/src/client/cli.rs @@ -632,7 +632,7 @@ fn parse_delay_until(src: &str) -> Result, String> { if let Ok(seconds) = src.parse::() { let delay_until = Local::now() + TimeDelta::try_seconds(seconds) - .ok_or("Failed to get timedelta from {seconds} seconds")?; + .ok_or(format!("Failed to get timedelta from {seconds} seconds"))?; return Ok(delay_until); } diff --git a/pueue/src/client/client.rs b/pueue/src/client/client.rs index 6f7be4cf1..57426c40b 100644 --- a/pueue/src/client/client.rs +++ b/pueue/src/client/client.rs @@ -1,3 +1,5 @@ +use crate::prelude::*; + use std::env::{current_dir, vars}; use std::io::{self, stdout, Write}; use std::{borrow::Cow, collections::HashMap}; @@ -5,7 +7,6 @@ use std::{borrow::Cow, collections::HashMap}; use anyhow::{bail, Context, Result}; use clap::crate_version; use crossterm::tty::IsTty; -use log::{error, warn}; use pueue_lib::format::format_datetime; use pueue_lib::network::message::*; diff --git a/pueue/src/daemon/callbacks.rs b/pueue/src/daemon/callbacks.rs index 6ef20509a..af610fb88 100644 --- a/pueue/src/daemon/callbacks.rs +++ b/pueue/src/daemon/callbacks.rs @@ -1,8 +1,9 @@ +use crate::prelude::*; + use std::collections::HashMap; use chrono::{DateTime, Local}; use handlebars::{Handlebars, RenderError}; -use log::{debug, error, info}; use pueue_lib::{ log::{get_log_path, read_last_log_file_lines}, process_helper::compile_shell_command, diff --git a/pueue/src/daemon/mod.rs b/pueue/src/daemon/mod.rs index e75c210f9..034658b53 100644 --- a/pueue/src/daemon/mod.rs +++ b/pueue/src/daemon/mod.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + use std::path::Path; use std::sync::{Arc, Mutex}; use std::{fs::create_dir_all, path::PathBuf}; use anyhow::{bail, Context, Result}; -use log::warn; use process_handler::initiate_shutdown; use pueue_lib::error::Error; diff --git a/pueue/src/daemon/network/socket.rs b/pueue/src/daemon/network/socket.rs index 6688e1dd7..0818ca51c 100644 --- a/pueue/src/daemon/network/socket.rs +++ b/pueue/src/daemon/network/socket.rs @@ -1,8 +1,9 @@ +use crate::prelude::*; + use std::time::{Duration, SystemTime}; use anyhow::{bail, Context, Result}; use clap::crate_version; -use log::{debug, info, warn}; use tokio::time::sleep; use pueue_lib::error::Error; diff --git a/pueue/src/daemon/pid.rs b/pueue/src/daemon/pid.rs index a0f70c9b7..787bc96b9 100644 --- a/pueue/src/daemon/pid.rs +++ b/pueue/src/daemon/pid.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + use std::fs::File; use std::io::{Read, Write}; use std::path::Path; use anyhow::{bail, Context, Result}; -use log::info; use pueue_lib::error::Error; use pueue_lib::process_helper::process_exists; diff --git a/pueue/src/daemon/process_handler/finish.rs b/pueue/src/daemon/process_handler/finish.rs index 3c2716a09..b3b258d47 100644 --- a/pueue/src/daemon/process_handler/finish.rs +++ b/pueue/src/daemon/process_handler/finish.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use anyhow::Context; use chrono::Local; -use log::info; use pueue_lib::log::clean_log_handles; use pueue_lib::state::GroupStatus; use pueue_lib::task::{TaskResult, TaskStatus}; diff --git a/pueue/src/daemon/process_handler/kill.rs b/pueue/src/daemon/process_handler/kill.rs index 504801e34..a37d295d7 100644 --- a/pueue/src/daemon/process_handler/kill.rs +++ b/pueue/src/daemon/process_handler/kill.rs @@ -1,4 +1,4 @@ -use log::{error, info, warn}; +use crate::prelude::*; use pueue_lib::{ network::message::{Signal, TaskSelection}, diff --git a/pueue/src/daemon/process_handler/mod.rs b/pueue/src/daemon/process_handler/mod.rs index 1da3514fe..6561c6a52 100644 --- a/pueue/src/daemon/process_handler/mod.rs +++ b/pueue/src/daemon/process_handler/mod.rs @@ -1,5 +1,6 @@ +use crate::prelude::*; + use anyhow::Result; -use log::{debug, error}; use pueue_lib::network::message::{Shutdown, TaskSelection}; use pueue_lib::process_helper::{send_signal_to_child, ProcessAction}; @@ -23,10 +24,11 @@ macro_rules! ok_or_shutdown { ($settings:expr, $state:expr, $result:expr) => { match $result { Err(err) => { - use log::error; use pueue_lib::network::message::Shutdown; use $crate::daemon::process_handler::initiate_shutdown; - error!("Initializing graceful shutdown. Encountered error in TaskHandler: {err}"); + ::tracing::error!( + "Initializing graceful shutdown. Encountered error in TaskHandler: {err}" + ); initiate_shutdown($settings, $state, Shutdown::Emergency); return; } diff --git a/pueue/src/daemon/process_handler/pause.rs b/pueue/src/daemon/process_handler/pause.rs index 1487b66c9..55daef67e 100644 --- a/pueue/src/daemon/process_handler/pause.rs +++ b/pueue/src/daemon/process_handler/pause.rs @@ -1,4 +1,4 @@ -use log::{error, info}; +use crate::prelude::*; use pueue_lib::network::message::TaskSelection; use pueue_lib::process_helper::ProcessAction; diff --git a/pueue/src/daemon/process_handler/spawn.rs b/pueue/src/daemon/process_handler/spawn.rs index d0b1a8575..f0bac3a0d 100644 --- a/pueue/src/daemon/process_handler/spawn.rs +++ b/pueue/src/daemon/process_handler/spawn.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + use std::io::Write; use std::process::Stdio; use chrono::Local; use command_group::CommandGroup; -use log::{error, info, warn}; use pueue_lib::log::{create_log_file_handles, get_writable_log_file_handle}; use pueue_lib::process_helper::compile_shell_command; use pueue_lib::settings::Settings; diff --git a/pueue/src/daemon/process_handler/start.rs b/pueue/src/daemon/process_handler/start.rs index e9a2f0ef1..61343d644 100644 --- a/pueue/src/daemon/process_handler/start.rs +++ b/pueue/src/daemon/process_handler/start.rs @@ -1,4 +1,4 @@ -use log::{error, info, warn}; +use crate::prelude::*; use pueue_lib::{ network::message::TaskSelection, process_helper::ProcessAction, settings::Settings, diff --git a/pueue/src/daemon/state_helper.rs b/pueue/src/daemon/state_helper.rs index ca2bd25df..d83b73a51 100644 --- a/pueue/src/daemon/state_helper.rs +++ b/pueue/src/daemon/state_helper.rs @@ -1,10 +1,11 @@ +use crate::prelude::*; + use std::fs; use std::path::Path; use std::sync::MutexGuard; use anyhow::{Context, Result}; use chrono::prelude::*; -use log::{debug, info}; use pueue_lib::settings::Settings; use pueue_lib::state::{Group, GroupStatus, State, PUEUE_DEFAULT_GROUP}; diff --git a/pueue/src/daemon/task_handler.rs b/pueue/src/daemon/task_handler.rs index c80e30371..4e5e6d61a 100644 --- a/pueue/src/daemon/task_handler.rs +++ b/pueue/src/daemon/task_handler.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + use std::collections::BTreeMap; use std::time::Duration; use anyhow::Result; use chrono::prelude::*; -use log::{error, info}; use pueue_lib::children::Children; use pueue_lib::network::message::*; diff --git a/pueue/src/lib.rs b/pueue/src/lib.rs index cf44ecbec..4bf733f0d 100644 --- a/pueue/src/lib.rs +++ b/pueue/src/lib.rs @@ -2,5 +2,11 @@ // Ignore it for now. #![allow(clippy::assigning_clones)] #![doc = include_str!("../README.md")] + +pub(crate) mod prelude { + #[allow(unused_imports)] + pub use tracing::{debug, error, info, trace, warn}; +} + pub mod client; pub mod daemon; diff --git a/pueue/tests/helper/mod.rs b/pueue/tests/helper/mod.rs index 1f7277dd8..690a03cde 100644 --- a/pueue/tests/helper/mod.rs +++ b/pueue/tests/helper/mod.rs @@ -1,8 +1,7 @@ //! This module contains helper functions, which are used by both, the client and daemon tests. -use ::log::{warn, LevelFilter}; use anyhow::Result; -use simplelog::{Config, ConfigBuilder, TermLogger, TerminalMode}; use tokio::io::{self, AsyncWriteExt}; +use tracing::level_filters::LevelFilter; pub use pueue_lib::state::PUEUE_DEFAULT_GROUP; @@ -34,26 +33,14 @@ const TIMEOUT: u64 = 5000; /// Use this function to enable log output for in-runtime daemon output. #[allow(dead_code)] pub fn enable_logger() { - let level = LevelFilter::Debug; - - // Try to initialize the logger with the timezone set to the Local time of the machine. - let mut builder = ConfigBuilder::new(); - let logger_config = match builder.set_time_offset_to_local() { - Err(_) => { - warn!("Failed to determine the local time of this machine. Fallback to UTC."); - Config::default() - } - Ok(builder) => builder.build(), - }; + let level = LevelFilter::DEBUG; + // idea: use local timezone? // Init a terminal logger - TermLogger::init( - level, - logger_config.clone(), - TerminalMode::Stderr, - simplelog::ColorChoice::Auto, - ) - .unwrap() + tracing_subscriber::fmt() + .with_max_level(level) + .with_writer(std::io::stderr) + .init(); } /// A helper function to sleep for ms time. diff --git a/pueue_lib/Cargo.toml b/pueue_lib/Cargo.toml index 9d9340747..4364325e9 100644 --- a/pueue_lib/Cargo.toml +++ b/pueue_lib/Cargo.toml @@ -22,7 +22,7 @@ chrono.workspace = true command-group.workspace = true dirs = "6.0" handlebars.workspace = true -log.workspace = true +tracing.workspace = true rand = "0.8" rcgen = "0.13" rev_buf_reader = "0.3" diff --git a/pueue_lib/src/aliasing.rs b/pueue_lib/src/aliasing.rs index 8e4ea455a..ce08a315d 100644 --- a/pueue_lib/src/aliasing.rs +++ b/pueue_lib/src/aliasing.rs @@ -1,9 +1,9 @@ +use crate::prelude::*; + use std::collections::HashMap; use std::fs::File; use std::io::prelude::*; -use log::info; - use crate::error::Error; use crate::settings::Settings; diff --git a/pueue_lib/src/lib.rs b/pueue_lib/src/lib.rs index 5c502bb58..34678a1e6 100644 --- a/pueue_lib/src/lib.rs +++ b/pueue_lib/src/lib.rs @@ -1,5 +1,10 @@ #![doc = include_str!("../README.md")] +pub(crate) mod prelude { + #[allow(unused_imports)] + pub use tracing::{debug, error, info, trace, warn}; +} + /// Shared module for internal logic! /// Contains helper for command aliasing. pub mod aliasing; diff --git a/pueue_lib/src/log.rs b/pueue_lib/src/log.rs index aed9cf6da..71f9183b4 100644 --- a/pueue_lib/src/log.rs +++ b/pueue_lib/src/log.rs @@ -1,8 +1,9 @@ +use crate::prelude::*; + use std::fs::{remove_file, File}; use std::io::{self, prelude::*, Read, SeekFrom}; use std::path::{Path, PathBuf}; -use log::error; use rev_buf_reader::RevBufReader; use snap::write::FrameEncoder; diff --git a/pueue_lib/src/network/certificate.rs b/pueue_lib/src/network/certificate.rs index ba30aad75..47eb53deb 100644 --- a/pueue_lib/src/network/certificate.rs +++ b/pueue_lib/src/network/certificate.rs @@ -1,8 +1,9 @@ +use crate::prelude::*; + use std::fs::File; use std::io::Write; use std::path::Path; -use log::info; use rcgen::{generate_simple_self_signed, CertifiedKey}; use crate::error::Error; diff --git a/pueue_lib/src/network/protocol.rs b/pueue_lib/src/network/protocol.rs index c598a1924..8a6e97081 100644 --- a/pueue_lib/src/network/protocol.rs +++ b/pueue_lib/src/network/protocol.rs @@ -1,7 +1,8 @@ +use crate::prelude::*; + use std::io::Cursor; use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; -use log::debug; use serde_cbor::de::from_slice; use serde_cbor::ser::to_vec; use tokio::io::{AsyncReadExt, AsyncWriteExt}; diff --git a/pueue_lib/src/network/socket/unix.rs b/pueue_lib/src/network/socket/unix.rs index e72f34f0c..b77cbcab9 100644 --- a/pueue_lib/src/network/socket/unix.rs +++ b/pueue_lib/src/network/socket/unix.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + use std::convert::TryFrom; use std::fs::{set_permissions, Permissions}; use std::os::unix::fs::PermissionsExt; use async_trait::async_trait; -use log::info; use rustls::pki_types::ServerName; use tokio::io::{AsyncRead, AsyncWrite}; use tokio::net::{TcpListener, TcpStream, UnixListener, UnixSocket, UnixStream}; diff --git a/pueue_lib/src/network/tls.rs b/pueue_lib/src/network/tls.rs index dde0f789b..8a1271a3b 100644 --- a/pueue_lib/src/network/tls.rs +++ b/pueue_lib/src/network/tls.rs @@ -53,7 +53,6 @@ fn load_certs<'a>(path: &Path) -> Result>, Error> { .collect::, std::io::Error>>() .map_err(|_| Error::CertificateFailure("Failed to parse daemon certificate.".into()))? .into_iter() - .map(CertificateDer::from) .collect(); Ok(certs) @@ -98,7 +97,6 @@ fn load_ca<'a>(path: &Path) -> Result, Error> { .collect::, std::io::Error>>() .map_err(|_| Error::CertificateFailure("Failed to parse daemon certificate.".into()))? .into_iter() - .map(CertificateDer::from) .next() .ok_or_else(|| Error::CertificateFailure("Couldn't find CA certificate in file".into()))?; diff --git a/pueue_lib/src/process_helper/mod.rs b/pueue_lib/src/process_helper/mod.rs index 38d5e7050..71f088a3c 100644 --- a/pueue_lib/src/process_helper/mod.rs +++ b/pueue_lib/src/process_helper/mod.rs @@ -3,6 +3,7 @@ //! The submodules of this module represent the different implementations for //! each supported platform. //! Depending on the target, the respective platform is read and loaded into this scope. +use crate::prelude::*; use std::{collections::HashMap, process::Command}; @@ -92,7 +93,7 @@ pub fn compile_shell_command(settings: &Settings, command: &str) -> Command { // Inject custom environment variables. if !settings.daemon.env_vars.is_empty() { - log::info!( + info!( "Inject environment variables: {:?}", &settings.daemon.env_vars ); diff --git a/pueue_lib/src/process_helper/unix.rs b/pueue_lib/src/process_helper/unix.rs index 29d7c51d8..2dda67af1 100644 --- a/pueue_lib/src/process_helper/unix.rs +++ b/pueue_lib/src/process_helper/unix.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + // We allow anyhow in here, as this is a module that'll be strictly used internally. // As soon as it's obvious that this is code is intended to be exposed to library users, we have to // go ahead and replace any `anyhow` usage by proper error handling via our own Error type. use anyhow::Result; use command_group::{GroupChild, Signal, UnixChildExt}; -use log::info; use crate::settings::Settings; @@ -44,6 +45,8 @@ pub fn kill_child(task_id: usize, child: &mut GroupChild) -> std::io::Result<()> #[cfg(test)] mod tests { + use crate::prelude::*; + use std::process::Command; use std::thread::sleep; use std::time::Duration; @@ -51,7 +54,6 @@ mod tests { use anyhow::Result; use command_group::CommandGroup; use libproc::processes::{pids_by_type, ProcFilter}; - use log::warn; use pretty_assertions::assert_eq; use super::*; diff --git a/pueue_lib/src/settings.rs b/pueue_lib/src/settings.rs index d909eaea2..912e20bca 100644 --- a/pueue_lib/src/settings.rs +++ b/pueue_lib/src/settings.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + use std::collections::HashMap; use std::fs::{create_dir_all, File}; use std::io::{prelude::*, BufReader}; use std::path::{Path, PathBuf}; -use log::info; use serde::{Deserialize, Serialize}; use shellexpand::tilde; From c879ea671e6519d6508127b9fdaa7cc31b71d801 Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Thu, 6 Feb 2025 19:34:34 +1000 Subject: [PATCH 02/14] refactor: naively ported to color_eyre from anyhow!! --- Cargo.lock | 165 +++++++++++------- Cargo.toml | 4 +- pueue/Cargo.toml | 6 +- pueue/src/bin/pueue.rs | 3 +- pueue/src/bin/pueued.rs | 2 +- pueue/src/client/client.rs | 1 - pueue/src/client/commands/edit.rs | 3 +- pueue/src/client/commands/format_state.rs | 4 +- pueue/src/client/commands/local_follow.rs | 4 +- pueue/src/client/commands/mod.rs | 3 +- pueue/src/client/commands/restart.rs | 2 +- pueue/src/client/commands/wait.rs | 3 +- pueue/src/client/display/follow.rs | 3 +- pueue/src/client/display/log/remote.rs | 3 +- pueue/src/client/display/state.rs | 2 +- pueue/src/client/query/column_selection.rs | 3 +- pueue/src/client/query/filters.rs | 3 +- pueue/src/client/query/limit.rs | 3 +- pueue/src/client/query/mod.rs | 2 +- pueue/src/client/query/order_by.rs | 3 +- pueue/src/daemon/mod.rs | 2 - .../src/daemon/network/message_handler/log.rs | 4 +- pueue/src/daemon/network/socket.rs | 1 - pueue/src/daemon/pid.rs | 2 - pueue/src/daemon/process_handler/finish.rs | 1 - pueue/src/daemon/process_handler/mod.rs | 2 - pueue/src/daemon/state_helper.rs | 1 - pueue/src/daemon/task_handler.rs | 1 - pueue/src/lib.rs | 9 +- pueue/tests/client/helper/compare_output.rs | 3 +- pueue/tests/client/helper/run.rs | 3 +- pueue/tests/client/integration/completions.rs | 3 +- .../tests/client/integration/configuration.rs | 4 +- pueue/tests/client/integration/edit.rs | 3 +- pueue/tests/client/integration/env.rs | 3 +- pueue/tests/client/integration/follow.rs | 3 +- pueue/tests/client/integration/group.rs | 3 +- pueue/tests/client/integration/log.rs | 3 +- pueue/tests/client/integration/restart.rs | 3 +- pueue/tests/client/integration/status.rs | 2 +- pueue/tests/client/integration/wait.rs | 3 +- pueue/tests/client/unit/status_query.rs | 5 +- pueue/tests/daemon/integration/add.rs | 3 +- pueue/tests/daemon/integration/aliases.rs | 3 +- pueue/tests/daemon/integration/callback.rs | 4 +- pueue/tests/daemon/integration/clean.rs | 3 +- .../tests/daemon/integration/dependencies.rs | 2 +- pueue/tests/daemon/integration/edit.rs | 8 +- .../integration/environment_variables.rs | 3 +- pueue/tests/daemon/integration/group.rs | 2 +- pueue/tests/daemon/integration/kill.rs | 3 +- pueue/tests/daemon/integration/log.rs | 7 +- .../daemon/integration/parallel_tasks.rs | 3 +- pueue/tests/daemon/integration/pause.rs | 3 +- pueue/tests/daemon/integration/priority.rs | 3 +- pueue/tests/daemon/integration/remove.rs | 3 +- pueue/tests/daemon/integration/reset.rs | 3 +- pueue/tests/daemon/integration/restart.rs | 3 +- pueue/tests/daemon/integration/restore.rs | 3 +- pueue/tests/daemon/integration/shutdown.rs | 3 +- .../daemon/integration/socket_permissions.rs | 5 +- pueue/tests/daemon/integration/spawn.rs | 3 +- pueue/tests/daemon/integration/start.rs | 3 +- pueue/tests/daemon/integration/stashed.rs | 3 +- .../worker_environment_variables.rs | 3 +- .../daemon/state_backward_compatibility.rs | 3 +- pueue/tests/helper/asserts.rs | 3 +- pueue/tests/helper/daemon.rs | 5 +- pueue/tests/helper/factories/group.rs | 2 +- pueue/tests/helper/factories/task.rs | 2 +- pueue/tests/helper/fixtures.rs | 3 +- pueue/tests/helper/lockfile.rs | 4 +- pueue/tests/helper/log.rs | 7 +- pueue/tests/helper/mod.rs | 3 +- pueue/tests/helper/network.rs | 6 +- pueue/tests/helper/state.rs | 2 +- pueue/tests/helper/task.rs | 6 +- pueue/tests/helper/wait.rs | 2 +- pueue/tests/tests.rs | 6 + pueue_lib/Cargo.toml | 5 +- pueue_lib/src/process_helper/unix.rs | 4 +- .../tests/settings_backward_compatibility.rs | 4 +- .../tests/state_backward_compatibility.rs | 6 +- pueue_lib/tests/tls_socket.rs | 2 +- pueue_lib/tests/unix_socket.rs | 2 +- 85 files changed, 260 insertions(+), 182 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3ad84242b..4812ed7a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] [[package]] -name = "adler2" -version = "2.0.0" +name = "adler" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" @@ -91,12 +91,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "anyhow" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" - [[package]] name = "assert_cmd" version = "2.0.16" @@ -138,17 +132,17 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", ] [[package]] @@ -351,6 +345,33 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +[[package]] +name = "color-eyre" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + [[package]] name = "colorchoice" version = "1.0.3" @@ -539,27 +560,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" -[[package]] -name = "env_filter" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" -dependencies = [ - "log", -] - -[[package]] -name = "env_logger" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "log", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -576,6 +576,16 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -666,9 +676,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -737,6 +747,12 @@ dependencies = [ "cc", ] +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + [[package]] name = "indexmap" version = "2.7.1" @@ -909,11 +925,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ - "adler2", + "adler", ] [[package]] @@ -996,9 +1012,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] @@ -1021,6 +1037,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + [[package]] name = "parking_lot" version = "0.12.3" @@ -1216,7 +1238,6 @@ dependencies = [ name = "pueue" version = "4.0.0-rc.1" dependencies = [ - "anyhow", "assert_cmd", "assert_matches", "better-panic", @@ -1224,6 +1245,7 @@ dependencies = [ "clap", "clap_complete", "clap_complete_nushell", + "color-eyre", "comfy-table", "command-group", "crossterm", @@ -1245,11 +1267,11 @@ dependencies = [ "snap", "strum", "tempfile", - "test-log", "tokio", "toml", "tracing", "tracing-subscriber", + "tracing-test", "whoami", "windows", "windows-service", @@ -1259,11 +1281,11 @@ dependencies = [ name = "pueue-lib" version = "0.27.0" dependencies = [ - "anyhow", "async-trait", "better-panic", "byteorder", "chrono", + "color-eyre", "command-group", "dirs 6.0.0", "handlebars", @@ -1835,28 +1857,6 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" -[[package]] -name = "test-log" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f46083d221181166e5b6f6b1e5f1d499f3a76888826e6cb1d057554157cd0f" -dependencies = [ - "env_logger", - "test-log-macros", - "tracing-subscriber", -] - -[[package]] -name = "test-log-macros" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "888d0c3c6db53c0fdab160d2ed5e12ba745383d3e85813f2ea0f2b1475ab553f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "thiserror" version = "1.0.69" @@ -2043,6 +2043,16 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-error" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" +dependencies = [ + "tracing", + "tracing-subscriber", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -2072,6 +2082,27 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "typenum" version = "1.17.0" diff --git a/Cargo.toml b/Cargo.toml index 69d0851e3..ebaa83773 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,12 +12,11 @@ repository = "https://github.com/nukesor/pueue" rust-version = "1.70" [workspace.dependencies] -anyhow = "1" better-panic = "0.3" chrono = { version = "0.4", features = ["serde"] } +color-eyre = "0.6.3" command-group = "5" handlebars = "5.1" -tracing = "0.1.41" pretty_assertions = "1" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" @@ -25,6 +24,7 @@ serde_yaml = "0.9" snap = "1.1" strum = { version = "0.26", features = ["derive"] } tokio = { version = "1.43", features = ["io-std", "rt-multi-thread", "time"] } +tracing = "0.1.41" [profile.release] codegen-units = 1 diff --git a/pueue/Cargo.toml b/pueue/Cargo.toml index 30dc8567a..6f8edf108 100644 --- a/pueue/Cargo.toml +++ b/pueue/Cargo.toml @@ -15,7 +15,6 @@ rust-version.workspace = true maintenance = { status = "actively-developed" } [dependencies] -anyhow = "1.0" chrono.workspace = true clap = { version = "4.4.18", features = [ "cargo", @@ -25,6 +24,7 @@ clap = { version = "4.4.18", features = [ ] } clap_complete = "4.4.10" clap_complete_nushell = "4.4.2" +color-eyre.workspace = true comfy-table = "7" command-group.workspace = true ctrlc = { version = "3", features = ["termination"] } @@ -45,15 +45,15 @@ toml = "0.8" tracing.workspace = true [dev-dependencies] -anyhow.workspace = true assert_cmd = "2" assert_matches = "1" better-panic.workspace = true +color-eyre.workspace = true pretty_assertions.workspace = true rstest = "0.24" serde_yaml.workspace = true similar-asserts = "1" -test-log = "0.2" +tracing-test = "0.2.5" # Make it easy to view log output for select tests. # Set log level for tests with RUST_LOG=, use with failed tests or diff --git a/pueue/src/bin/pueue.rs b/pueue/src/bin/pueue.rs index fa08c6fa1..a57963859 100644 --- a/pueue/src/bin/pueue.rs +++ b/pueue/src/bin/pueue.rs @@ -1,8 +1,9 @@ use std::path::PathBuf; -use anyhow::{bail, Context, Result}; use clap::{CommandFactory, Parser}; use clap_complete::{generate, generate_to, shells}; +use color_eyre::eyre::{bail, WrapErr}; +use color_eyre::Result; use simplelog::{Config, ConfigBuilder, LevelFilter, SimpleLogger, TermLogger, TerminalMode}; use tracing::*; diff --git a/pueue/src/bin/pueued.rs b/pueue/src/bin/pueued.rs index 73f820b14..d45ce5bfd 100644 --- a/pueue/src/bin/pueued.rs +++ b/pueue/src/bin/pueued.rs @@ -1,7 +1,7 @@ use std::process::Command; -use anyhow::Result; use clap::Parser; +use color_eyre::Result; use simplelog::{Config, ConfigBuilder, LevelFilter, SimpleLogger, TermLogger, TerminalMode}; use tracing::*; diff --git a/pueue/src/client/client.rs b/pueue/src/client/client.rs index 57426c40b..d20c20317 100644 --- a/pueue/src/client/client.rs +++ b/pueue/src/client/client.rs @@ -4,7 +4,6 @@ use std::env::{current_dir, vars}; use std::io::{self, stdout, Write}; use std::{borrow::Cow, collections::HashMap}; -use anyhow::{bail, Context, Result}; use clap::crate_version; use crossterm::tty::IsTty; diff --git a/pueue/src/client/commands/edit.rs b/pueue/src/client/commands/edit.rs index 7bff9e936..a15c5e82c 100644 --- a/pueue/src/client/commands/edit.rs +++ b/pueue/src/client/commands/edit.rs @@ -1,10 +1,11 @@ +use crate::prelude::*; + use std::collections::BTreeMap; use std::env; use std::fs::{create_dir, read_to_string, File}; use std::io::Write; use std::path::{Path, PathBuf}; -use anyhow::{bail, Context, Result}; use pueue_lib::error::Error; use pueue_lib::settings::Settings; use tempfile::tempdir; diff --git a/pueue/src/client/commands/format_state.rs b/pueue/src/client/commands/format_state.rs index 4fec8b909..f521cda55 100644 --- a/pueue/src/client/commands/format_state.rs +++ b/pueue/src/client/commands/format_state.rs @@ -1,10 +1,10 @@ +use crate::prelude::*; + use std::{ collections::BTreeMap, io::{self, prelude::*}, }; -use anyhow::{Context, Result}; - use pueue_lib::{network::protocol::GenericStream, settings::Settings, task::Task}; use crate::client::{ diff --git a/pueue/src/client/commands/local_follow.rs b/pueue/src/client/commands/local_follow.rs index cd9c547c3..ac48e4eba 100644 --- a/pueue/src/client/commands/local_follow.rs +++ b/pueue/src/client/commands/local_follow.rs @@ -1,6 +1,6 @@ -use std::path::Path; +use crate::prelude::*; -use anyhow::{bail, Result}; +use std::path::Path; use pueue_lib::network::protocol::GenericStream; diff --git a/pueue/src/client/commands/mod.rs b/pueue/src/client/commands/mod.rs index 11ac3f68f..f1089ddd8 100644 --- a/pueue/src/client/commands/mod.rs +++ b/pueue/src/client/commands/mod.rs @@ -4,7 +4,8 @@ //! "non-trivial" vaguely means that we, for instance, have to do additional requests to the //! daemon, open some files on the filesystem, edit files and so on. //! All commands that cannot be simply handled by handling requests or using `pueue_lib`. -use anyhow::Result; + +use crate::prelude::*; use pueue_lib::network::protocol::*; use pueue_lib::state::State; diff --git a/pueue/src/client/commands/restart.rs b/pueue/src/client/commands/restart.rs index 2db7c023b..8a2695399 100644 --- a/pueue/src/client/commands/restart.rs +++ b/pueue/src/client/commands/restart.rs @@ -1,4 +1,4 @@ -use anyhow::{bail, Result}; +use crate::prelude::*; use chrono::Local; use pueue_lib::network::message::*; diff --git a/pueue/src/client/commands/wait.rs b/pueue/src/client/commands/wait.rs index 1cd21130d..772c47299 100644 --- a/pueue/src/client/commands/wait.rs +++ b/pueue/src/client/commands/wait.rs @@ -1,7 +1,8 @@ +use crate::prelude::*; + use std::collections::{HashMap, HashSet}; use std::time::Duration; -use anyhow::Result; use chrono::Local; use crossterm::style::{Attribute, Color}; use pueue_lib::network::message::TaskSelection; diff --git a/pueue/src/client/display/follow.rs b/pueue/src/client/display/follow.rs index 72c7d561e..071db4b02 100644 --- a/pueue/src/client/display/follow.rs +++ b/pueue/src/client/display/follow.rs @@ -1,8 +1,9 @@ +use crate::prelude::*; + use std::io::{self, Write}; use std::path::Path; use std::time::Duration; -use anyhow::Result; use tokio::time::sleep; use pueue_lib::{ diff --git a/pueue/src/client/display/log/remote.rs b/pueue/src/client/display/log/remote.rs index 12bd7adea..49712d757 100644 --- a/pueue/src/client/display/log/remote.rs +++ b/pueue/src/client/display/log/remote.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::io; -use anyhow::Result; use crossterm::style::{Attribute, Color}; use snap::read::FrameDecoder; diff --git a/pueue/src/client/display/state.rs b/pueue/src/client/display/state.rs index 3d9975685..a651e2dd3 100644 --- a/pueue/src/client/display/state.rs +++ b/pueue/src/client/display/state.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use crate::prelude::*; use pueue_lib::settings::Settings; use pueue_lib::state::{State, PUEUE_DEFAULT_GROUP}; diff --git a/pueue/src/client/query/column_selection.rs b/pueue/src/client/query/column_selection.rs index f6fe13437..14b611673 100644 --- a/pueue/src/client/query/column_selection.rs +++ b/pueue/src/client/query/column_selection.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use pest::iterators::Pair; use super::{QueryResult, Rule}; diff --git a/pueue/src/client/query/filters.rs b/pueue/src/client/query/filters.rs index dac1fbf4c..e63a45087 100644 --- a/pueue/src/client/query/filters.rs +++ b/pueue/src/client/query/filters.rs @@ -1,5 +1,6 @@ #![allow(bindings_with_variant_name)] -use anyhow::{bail, Context, Result}; +use crate::prelude::*; + use chrono::{DateTime, Local, NaiveDate, NaiveDateTime, NaiveTime, TimeDelta}; use pest::iterators::Pair; use pueue_lib::task::{Task, TaskResult, TaskStatus}; diff --git a/pueue/src/client/query/limit.rs b/pueue/src/client/query/limit.rs index 727cd541e..f75f8863e 100644 --- a/pueue/src/client/query/limit.rs +++ b/pueue/src/client/query/limit.rs @@ -1,4 +1,5 @@ -use anyhow::{bail, Context, Result}; +use crate::prelude::*; + use pest::iterators::Pair; use super::{QueryResult, Rule}; diff --git a/pueue/src/client/query/mod.rs b/pueue/src/client/query/mod.rs index 7395696ad..954415812 100644 --- a/pueue/src/client/query/mod.rs +++ b/pueue/src/client/query/mod.rs @@ -1,7 +1,7 @@ // Clippy generates a false-positive for an empty generated docstring in the query parser code. #![allow(clippy::empty_docs)] +use crate::prelude::*; -use anyhow::{bail, Context, Result}; use chrono::prelude::*; use pest::Parser; use pest_derive::Parser; diff --git a/pueue/src/client/query/order_by.rs b/pueue/src/client/query/order_by.rs index 982c234b8..4b6a80738 100644 --- a/pueue/src/client/query/order_by.rs +++ b/pueue/src/client/query/order_by.rs @@ -1,5 +1,6 @@ #![allow(bindings_with_variant_name)] -use anyhow::Result; +use crate::prelude::*; + use pest::iterators::Pair; use super::{QueryResult, Rule}; diff --git a/pueue/src/daemon/mod.rs b/pueue/src/daemon/mod.rs index 034658b53..f71827192 100644 --- a/pueue/src/daemon/mod.rs +++ b/pueue/src/daemon/mod.rs @@ -4,8 +4,6 @@ use std::path::Path; use std::sync::{Arc, Mutex}; use std::{fs::create_dir_all, path::PathBuf}; -use anyhow::{bail, Context, Result}; - use process_handler::initiate_shutdown; use pueue_lib::error::Error; use pueue_lib::network::certificate::create_certificates; diff --git a/pueue/src/daemon/network/message_handler/log.rs b/pueue/src/daemon/network/message_handler/log.rs index 2bb68ae3a..b2f94d14b 100644 --- a/pueue/src/daemon/network/message_handler/log.rs +++ b/pueue/src/daemon/network/message_handler/log.rs @@ -1,10 +1,10 @@ +use crate::prelude::*; + use std::collections::BTreeMap; use std::io::Read; use std::path::Path; use std::time::Duration; -use anyhow::Result; - use pueue_lib::failure_msg; use pueue_lib::log::read_and_compress_log_file; use pueue_lib::log::*; diff --git a/pueue/src/daemon/network/socket.rs b/pueue/src/daemon/network/socket.rs index 0818ca51c..e92c23981 100644 --- a/pueue/src/daemon/network/socket.rs +++ b/pueue/src/daemon/network/socket.rs @@ -2,7 +2,6 @@ use crate::prelude::*; use std::time::{Duration, SystemTime}; -use anyhow::{bail, Context, Result}; use clap::crate_version; use tokio::time::sleep; diff --git a/pueue/src/daemon/pid.rs b/pueue/src/daemon/pid.rs index 787bc96b9..d5264c63e 100644 --- a/pueue/src/daemon/pid.rs +++ b/pueue/src/daemon/pid.rs @@ -4,8 +4,6 @@ use std::fs::File; use std::io::{Read, Write}; use std::path::Path; -use anyhow::{bail, Context, Result}; - use pueue_lib::error::Error; use pueue_lib::process_helper::process_exists; diff --git a/pueue/src/daemon/process_handler/finish.rs b/pueue/src/daemon/process_handler/finish.rs index b3b258d47..80173061d 100644 --- a/pueue/src/daemon/process_handler/finish.rs +++ b/pueue/src/daemon/process_handler/finish.rs @@ -1,6 +1,5 @@ use crate::prelude::*; -use anyhow::Context; use chrono::Local; use pueue_lib::log::clean_log_handles; use pueue_lib::state::GroupStatus; diff --git a/pueue/src/daemon/process_handler/mod.rs b/pueue/src/daemon/process_handler/mod.rs index 6561c6a52..8122c90b4 100644 --- a/pueue/src/daemon/process_handler/mod.rs +++ b/pueue/src/daemon/process_handler/mod.rs @@ -1,7 +1,5 @@ use crate::prelude::*; -use anyhow::Result; - use pueue_lib::network::message::{Shutdown, TaskSelection}; use pueue_lib::process_helper::{send_signal_to_child, ProcessAction}; use pueue_lib::settings::Settings; diff --git a/pueue/src/daemon/state_helper.rs b/pueue/src/daemon/state_helper.rs index d83b73a51..c1ae1ad2f 100644 --- a/pueue/src/daemon/state_helper.rs +++ b/pueue/src/daemon/state_helper.rs @@ -4,7 +4,6 @@ use std::fs; use std::path::Path; use std::sync::MutexGuard; -use anyhow::{Context, Result}; use chrono::prelude::*; use pueue_lib::settings::Settings; diff --git a/pueue/src/daemon/task_handler.rs b/pueue/src/daemon/task_handler.rs index 4e5e6d61a..318c2f4e0 100644 --- a/pueue/src/daemon/task_handler.rs +++ b/pueue/src/daemon/task_handler.rs @@ -3,7 +3,6 @@ use crate::prelude::*; use std::collections::BTreeMap; use std::time::Duration; -use anyhow::Result; use chrono::prelude::*; use pueue_lib::children::Children; diff --git a/pueue/src/lib.rs b/pueue/src/lib.rs index 4bf733f0d..88568cea6 100644 --- a/pueue/src/lib.rs +++ b/pueue/src/lib.rs @@ -5,7 +5,14 @@ pub(crate) mod prelude { #[allow(unused_imports)] - pub use tracing::{debug, error, info, trace, warn}; + pub(crate) use tracing::{debug, error, info, trace, warn}; + + pub(crate) use crate::errors::*; +} + +pub(crate) mod errors { + pub use color_eyre::eyre::{WrapErr, bail}; + pub use color_eyre::Result; } pub mod client; diff --git a/pueue/tests/client/helper/compare_output.rs b/pueue/tests/client/helper/compare_output.rs index 440e6f1bf..a6b9c95be 100644 --- a/pueue/tests/client/helper/compare_output.rs +++ b/pueue/tests/client/helper/compare_output.rs @@ -1,7 +1,8 @@ +use crate::prelude::*; + use std::collections::HashMap; use std::process::Output; -use anyhow::{bail, Context, Result}; use chrono::Local; use handlebars::Handlebars; use std::fs::read_to_string; diff --git a/pueue/tests/client/helper/run.rs b/pueue/tests/client/helper/run.rs index fea58c646..308a2579a 100644 --- a/pueue/tests/client/helper/run.rs +++ b/pueue/tests/client/helper/run.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::collections::HashMap; -use anyhow::{Context, Result}; use assert_cmd::prelude::*; use std::process::{Command, Output, Stdio}; diff --git a/pueue/tests/client/integration/completions.rs b/pueue/tests/client/integration/completions.rs index 583eabf6c..e0952b392 100644 --- a/pueue/tests/client/integration/completions.rs +++ b/pueue/tests/client/integration/completions.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::process::{Command, Stdio}; -use anyhow::{Context, Result}; use assert_cmd::prelude::*; use rstest::rstest; diff --git a/pueue/tests/client/integration/configuration.rs b/pueue/tests/client/integration/configuration.rs index e6c0c9e18..56f72ed03 100644 --- a/pueue/tests/client/integration/configuration.rs +++ b/pueue/tests/client/integration/configuration.rs @@ -1,10 +1,10 @@ +use crate::prelude::*; + use std::{ collections::HashMap, process::{Child, Command, Stdio}, }; -use anyhow::{bail, Context, Result}; - use assert_cmd::prelude::CommandCargoExt; use pueue_lib::{ settings::{Shared, PUEUE_CONFIG_PATH_ENV}, diff --git a/pueue/tests/client/integration/edit.rs b/pueue/tests/client/integration/edit.rs index c0fd989d3..c2456080f 100644 --- a/pueue/tests/client/integration/edit.rs +++ b/pueue/tests/client/integration/edit.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::collections::HashMap; -use anyhow::{Context, Result}; use pueue_lib::{settings::EditMode, task::TaskStatus}; use crate::client::helper::*; diff --git a/pueue/tests/client/integration/env.rs b/pueue/tests/client/integration/env.rs index 1fde1e2b0..7c98d7b2c 100644 --- a/pueue/tests/client/integration/env.rs +++ b/pueue/tests/client/integration/env.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use pueue_lib::task::Task; use crate::client::helper::*; diff --git a/pueue/tests/client/integration/follow.rs b/pueue/tests/client/integration/follow.rs index 7d23a2d37..15f25b5b6 100644 --- a/pueue/tests/client/integration/follow.rs +++ b/pueue/tests/client/integration/follow.rs @@ -1,4 +1,5 @@ -use anyhow::{Context, Result}; +use crate::prelude::*; + use rstest::rstest; use pueue_lib::task::Task; diff --git a/pueue/tests/client/integration/group.rs b/pueue/tests/client/integration/group.rs index ccedb1515..ebd320c3e 100644 --- a/pueue/tests/client/integration/group.rs +++ b/pueue/tests/client/integration/group.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::collections::BTreeMap; -use anyhow::{Context, Result}; use pueue_lib::network::message::*; use pueue_lib::state::{Group, GroupStatus}; diff --git a/pueue/tests/client/integration/log.rs b/pueue/tests/client/integration/log.rs index 6338a88cf..0634789a6 100644 --- a/pueue/tests/client/integration/log.rs +++ b/pueue/tests/client/integration/log.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::collections::{BTreeMap, HashMap}; -use anyhow::{Context, Result}; use rstest::rstest; use serde::Deserialize; diff --git a/pueue/tests/client/integration/restart.rs b/pueue/tests/client/integration/restart.rs index 2358baffc..80f4db023 100644 --- a/pueue/tests/client/integration/restart.rs +++ b/pueue/tests/client/integration/restart.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::collections::HashMap; -use anyhow::Result; use assert_matches::assert_matches; use pueue_lib::task::{Task, TaskResult, TaskStatus}; diff --git a/pueue/tests/client/integration/status.rs b/pueue/tests/client/integration/status.rs index 7ab9bc405..54d34e7d0 100644 --- a/pueue/tests/client/integration/status.rs +++ b/pueue/tests/client/integration/status.rs @@ -1,4 +1,4 @@ -use anyhow::{Context, Result}; +use crate::prelude::*; use pueue_lib::{state::State, task::Task}; diff --git a/pueue/tests/client/integration/wait.rs b/pueue/tests/client/integration/wait.rs index 6f50d5902..13ec9d670 100644 --- a/pueue/tests/client/integration/wait.rs +++ b/pueue/tests/client/integration/wait.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + use std::{ process::Output, thread::{self, JoinHandle}, }; -use anyhow::Result; use tokio::time::sleep; use crate::client::helper::*; diff --git a/pueue/tests/client/unit/status_query.rs b/pueue/tests/client/unit/status_query.rs index b56306b91..78dcb12b3 100644 --- a/pueue/tests/client/unit/status_query.rs +++ b/pueue/tests/client/unit/status_query.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::{collections::HashMap, path::PathBuf}; -use anyhow::Result; use assert_matches::assert_matches; use chrono::{Local, TimeZone}; use pretty_assertions::assert_eq; @@ -232,7 +233,7 @@ async fn filter_status(#[case] status_filter: &str, #[case] match_count: usize) }, "Only Failed tasks are allowed" ), - _ => anyhow::bail!("Got unexpected TaskStatus in filter_status"), + _ => bail!("Got unexpected TaskStatus in filter_status"), }; } diff --git a/pueue/tests/daemon/integration/add.rs b/pueue/tests/daemon/integration/add.rs index 0c10a3092..86c5a8c13 100644 --- a/pueue/tests/daemon/integration/add.rs +++ b/pueue/tests/daemon/integration/add.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use assert_matches::assert_matches; use chrono::Local; diff --git a/pueue/tests/daemon/integration/aliases.rs b/pueue/tests/daemon/integration/aliases.rs index e19db3bbe..948ef1751 100644 --- a/pueue/tests/daemon/integration/aliases.rs +++ b/pueue/tests/daemon/integration/aliases.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::collections::HashMap; -use anyhow::Result; use assert_matches::assert_matches; use pueue_lib::{network::message::*, task::*}; diff --git a/pueue/tests/daemon/integration/callback.rs b/pueue/tests/daemon/integration/callback.rs index c5021d9ed..a486a1a9e 100644 --- a/pueue/tests/daemon/integration/callback.rs +++ b/pueue/tests/daemon/integration/callback.rs @@ -1,6 +1,6 @@ -use std::fs::read_to_string; +use crate::prelude::*; -use anyhow::{Context, Result}; +use std::fs::read_to_string; use crate::helper::*; diff --git a/pueue/tests/daemon/integration/clean.rs b/pueue/tests/daemon/integration/clean.rs index 75791767d..9d6ed584c 100644 --- a/pueue/tests/daemon/integration/clean.rs +++ b/pueue/tests/daemon/integration/clean.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use pueue_lib::{network::message::*, task::Task}; use crate::helper::*; diff --git a/pueue/tests/daemon/integration/dependencies.rs b/pueue/tests/daemon/integration/dependencies.rs index c205da1a9..dad215d8e 100644 --- a/pueue/tests/daemon/integration/dependencies.rs +++ b/pueue/tests/daemon/integration/dependencies.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use crate::prelude::*; use pueue_lib::{ network::message::{KillMessage, TaskSelection}, diff --git a/pueue/tests/daemon/integration/edit.rs b/pueue/tests/daemon/integration/edit.rs index ec8aba8a7..2421f8854 100644 --- a/pueue/tests/daemon/integration/edit.rs +++ b/pueue/tests/daemon/integration/edit.rs @@ -1,8 +1,9 @@ +use crate::prelude::*; + use std::path::PathBuf; -use anyhow::{bail, Result}; use assert_matches::assert_matches; -use test_log::test; +use tracing_test::traced_test; use pueue_lib::network::message::*; use pueue_lib::settings::Shared; @@ -32,7 +33,8 @@ async fn create_edited_task(shared: &Shared) -> Result> { } /// Test if adding a normal task works as intended. -#[test(tokio::test(flavor = "multi_thread", worker_threads = 2))] +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +#[traced_test] async fn test_edit_flow() -> Result<()> { let daemon = daemon().await?; let shared = &daemon.settings.shared; diff --git a/pueue/tests/daemon/integration/environment_variables.rs b/pueue/tests/daemon/integration/environment_variables.rs index c3b2377a5..16eb4aad9 100644 --- a/pueue/tests/daemon/integration/environment_variables.rs +++ b/pueue/tests/daemon/integration/environment_variables.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use pueue_lib::task::Task; use crate::helper::*; diff --git a/pueue/tests/daemon/integration/group.rs b/pueue/tests/daemon/integration/group.rs index fabe11408..63f2aad0d 100644 --- a/pueue/tests/daemon/integration/group.rs +++ b/pueue/tests/daemon/integration/group.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use crate::prelude::*; use pueue_lib::{network::message::*, task::Task}; diff --git a/pueue/tests/daemon/integration/kill.rs b/pueue/tests/daemon/integration/kill.rs index 8a4cf9aad..19f64b6e3 100644 --- a/pueue/tests/daemon/integration/kill.rs +++ b/pueue/tests/daemon/integration/kill.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use pretty_assertions::assert_eq; use rstest::rstest; diff --git a/pueue/tests/daemon/integration/log.rs b/pueue/tests/daemon/integration/log.rs index bc41be206..4dbe24897 100644 --- a/pueue/tests/daemon/integration/log.rs +++ b/pueue/tests/daemon/integration/log.rs @@ -1,8 +1,9 @@ +use crate::prelude::*; + use std::fs::read_to_string; use std::fs::File; use std::path::Path; -use anyhow::{bail, Context, Result}; use tempfile::TempDir; use pueue_lib::{network::message::*, task::Task}; @@ -111,7 +112,7 @@ async fn test_partial_log() -> Result<()> { let output = logs .output .clone() - .context("Didn't find output on TaskLogMessage")?; + .ok_or(eyre!("Didn't find output on TaskLogMessage"))?; let output = decompress_log(output)?; // Make sure it's the same @@ -148,7 +149,7 @@ async fn test_correct_log_order() -> Result<()> { let output = logs .output .clone() - .context("Didn't find output on TaskLogMessage")?; + .ok_or(eyre!("Didn't find output on TaskLogMessage"))?; let output = decompress_log(output)?; // Make sure it's the same diff --git a/pueue/tests/daemon/integration/parallel_tasks.rs b/pueue/tests/daemon/integration/parallel_tasks.rs index 5f744a479..bce7e9f3a 100644 --- a/pueue/tests/daemon/integration/parallel_tasks.rs +++ b/pueue/tests/daemon/integration/parallel_tasks.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use assert_matches::assert_matches; use pueue_lib::{network::message::ParallelMessage, task::*}; diff --git a/pueue/tests/daemon/integration/pause.rs b/pueue/tests/daemon/integration/pause.rs index 3a4a3b2dc..dface0954 100644 --- a/pueue/tests/daemon/integration/pause.rs +++ b/pueue/tests/daemon/integration/pause.rs @@ -1,4 +1,5 @@ -use anyhow::{Context, Result}; +use crate::prelude::*; + use assert_matches::assert_matches; use pueue_lib::network::message::*; diff --git a/pueue/tests/daemon/integration/priority.rs b/pueue/tests/daemon/integration/priority.rs index 2929d7d60..c2b1882bf 100644 --- a/pueue/tests/daemon/integration/priority.rs +++ b/pueue/tests/daemon/integration/priority.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use rstest::rstest; use pueue_lib::{network::message::TaskSelection, task::Task}; diff --git a/pueue/tests/daemon/integration/remove.rs b/pueue/tests/daemon/integration/remove.rs index 548c4b9f7..e8a8ac996 100644 --- a/pueue/tests/daemon/integration/remove.rs +++ b/pueue/tests/daemon/integration/remove.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use pueue_lib::{network::message::*, task::Task}; use crate::helper::*; diff --git a/pueue/tests/daemon/integration/reset.rs b/pueue/tests/daemon/integration/reset.rs index 13d3422ff..0ee7914e1 100644 --- a/pueue/tests/daemon/integration/reset.rs +++ b/pueue/tests/daemon/integration/reset.rs @@ -1,4 +1,5 @@ -use anyhow::{Context, Result}; +use crate::prelude::*; + use pueue_lib::{network::message::*, state::GroupStatus, task::Task}; use crate::helper::*; diff --git a/pueue/tests/daemon/integration/restart.rs b/pueue/tests/daemon/integration/restart.rs index c4ee39084..0a70cb59c 100644 --- a/pueue/tests/daemon/integration/restart.rs +++ b/pueue/tests/daemon/integration/restart.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::path::PathBuf; -use anyhow::Result; use pueue_lib::{network::message::*, task::Task}; use crate::helper::*; diff --git a/pueue/tests/daemon/integration/restore.rs b/pueue/tests/daemon/integration/restore.rs index 3993706f7..876f5156f 100644 --- a/pueue/tests/daemon/integration/restore.rs +++ b/pueue/tests/daemon/integration/restore.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use pueue_lib::network::message::TaskSelection; use pueue_lib::state::GroupStatus; diff --git a/pueue/tests/daemon/integration/shutdown.rs b/pueue/tests/daemon/integration/shutdown.rs index 2634920fe..5df1caa3d 100644 --- a/pueue/tests/daemon/integration/shutdown.rs +++ b/pueue/tests/daemon/integration/shutdown.rs @@ -1,4 +1,5 @@ -use anyhow::{bail, Context, Result}; +use crate::prelude::*; + use crate::helper::*; diff --git a/pueue/tests/daemon/integration/socket_permissions.rs b/pueue/tests/daemon/integration/socket_permissions.rs index f19e813b9..538227e35 100644 --- a/pueue/tests/daemon/integration/socket_permissions.rs +++ b/pueue/tests/daemon/integration/socket_permissions.rs @@ -1,9 +1,8 @@ -use anyhow::Result; +use crate::prelude::*; + use std::fs; use std::os::unix::fs::PermissionsExt; -use anyhow::Context; - use crate::helper::*; /// Make sure that the socket permissions are appropriately set. diff --git a/pueue/tests/daemon/integration/spawn.rs b/pueue/tests/daemon/integration/spawn.rs index 2a85b556d..f7398a6e9 100644 --- a/pueue/tests/daemon/integration/spawn.rs +++ b/pueue/tests/daemon/integration/spawn.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::io::Read; -use anyhow::{Context, Result}; use rstest::rstest; use pueue_lib::{ diff --git a/pueue/tests/daemon/integration/start.rs b/pueue/tests/daemon/integration/start.rs index bfca3375a..f690b97b9 100644 --- a/pueue/tests/daemon/integration/start.rs +++ b/pueue/tests/daemon/integration/start.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use rstest::rstest; use pueue_lib::{network::message::*, task::*}; diff --git a/pueue/tests/daemon/integration/stashed.rs b/pueue/tests/daemon/integration/stashed.rs index 5dcbacaa4..3a5bead9c 100644 --- a/pueue/tests/daemon/integration/stashed.rs +++ b/pueue/tests/daemon/integration/stashed.rs @@ -1,4 +1,5 @@ -use anyhow::{Context, Result}; +use crate::prelude::*; + use chrono::{DateTime, Local, TimeDelta}; use rstest::rstest; diff --git a/pueue/tests/daemon/integration/worker_environment_variables.rs b/pueue/tests/daemon/integration/worker_environment_variables.rs index 6635e4db2..fcd0d8349 100644 --- a/pueue/tests/daemon/integration/worker_environment_variables.rs +++ b/pueue/tests/daemon/integration/worker_environment_variables.rs @@ -1,4 +1,5 @@ -use anyhow::Result; +use crate::prelude::*; + use pueue_lib::{network::message::TaskSelection, state::PUEUE_DEFAULT_GROUP, task::Task}; diff --git a/pueue/tests/daemon/state_backward_compatibility.rs b/pueue/tests/daemon/state_backward_compatibility.rs index 3d522fd1c..a9bce7f35 100644 --- a/pueue/tests/daemon/state_backward_compatibility.rs +++ b/pueue/tests/daemon/state_backward_compatibility.rs @@ -1,7 +1,8 @@ +use crate::prelude::*; + use std::fs::File; use std::io::prelude::*; -use anyhow::{Context, Result}; use pueue::daemon::state_helper::restore_state; use tempfile::TempDir; diff --git a/pueue/tests/helper/asserts.rs b/pueue/tests/helper/asserts.rs index 03315a59e..4a7372427 100644 --- a/pueue/tests/helper/asserts.rs +++ b/pueue/tests/helper/asserts.rs @@ -1,4 +1,5 @@ -use anyhow::{bail, Result}; +use crate::prelude::*; + use assert_matches::assert_matches; use pueue_lib::settings::Shared; diff --git a/pueue/tests/helper/daemon.rs b/pueue/tests/helper/daemon.rs index 3d4e5e69e..d5bd972ec 100644 --- a/pueue/tests/helper/daemon.rs +++ b/pueue/tests/helper/daemon.rs @@ -1,9 +1,10 @@ +use crate::prelude::*; + use std::fs::File; use std::io::Read; use std::path::Path; use std::process::Child; -use anyhow::{anyhow, bail, Context, Result}; use pueue_lib::network::message::*; use pueue_lib::settings::*; @@ -49,7 +50,7 @@ pub async fn get_pid(pid_path: &Path) -> Result { let pid = content .parse::() - .map_err(|_| anyhow!("Couldn't parse value: {content}"))?; + .map_err(|_| eyre!("Couldn't parse value: {content}"))?; return Ok(pid); } diff --git a/pueue/tests/helper/factories/group.rs b/pueue/tests/helper/factories/group.rs index 1f4efb77a..549598d4d 100644 --- a/pueue/tests/helper/factories/group.rs +++ b/pueue/tests/helper/factories/group.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use crate::prelude::*; use pueue_lib::network::message::*; use pueue_lib::settings::*; diff --git a/pueue/tests/helper/factories/task.rs b/pueue/tests/helper/factories/task.rs index f448b706e..f3b48833a 100644 --- a/pueue/tests/helper/factories/task.rs +++ b/pueue/tests/helper/factories/task.rs @@ -1,4 +1,4 @@ -use anyhow::{Context, Result}; +use crate::prelude::*; use pueue_lib::network::message::*; use pueue_lib::settings::*; diff --git a/pueue/tests/helper/fixtures.rs b/pueue/tests/helper/fixtures.rs index 369bc21c7..0e36d032b 100644 --- a/pueue/tests/helper/fixtures.rs +++ b/pueue/tests/helper/fixtures.rs @@ -1,3 +1,5 @@ +use crate::prelude::*; + use std::collections::HashMap; use std::env::temp_dir; use std::fs::{canonicalize, File}; @@ -5,7 +7,6 @@ use std::io::Write; use std::path::{Path, PathBuf}; use std::process::{Child, Command, Stdio}; -use anyhow::{bail, Context, Result}; use assert_cmd::prelude::*; use tempfile::{Builder, TempDir}; use tokio::io::{self, AsyncWriteExt}; diff --git a/pueue/tests/helper/lockfile.rs b/pueue/tests/helper/lockfile.rs index fce0a7f12..9bb191a0d 100644 --- a/pueue/tests/helper/lockfile.rs +++ b/pueue/tests/helper/lockfile.rs @@ -1,10 +1,10 @@ +use crate::prelude::*; + use std::{ fs::{remove_file, File}, path::{Path, PathBuf}, }; -use anyhow::{Context, Result}; - use super::{daemon_base_setup, daemon_with_settings, PueueDaemon}; /// A helper wrapper around [`daemon`] that also creates a lockfile that can be listened to from a diff --git a/pueue/tests/helper/log.rs b/pueue/tests/helper/log.rs index 22b21e937..8c4af8302 100644 --- a/pueue/tests/helper/log.rs +++ b/pueue/tests/helper/log.rs @@ -1,6 +1,7 @@ +use crate::prelude::*; + use std::io::Read; -use anyhow::{bail, Context, Result}; use pueue_lib::network::message::*; use pueue_lib::settings::*; use snap::read::FrameDecoder; @@ -36,10 +37,10 @@ pub async fn get_task_log(shared: &Shared, task_id: usize, lines: Option) let log = logs .remove(&task_id) - .context("Didn't find log of requested task")?; + .ok_or(eyre!("Didn't find log of requested task"))?; let bytes = log .output - .context("Didn't get log output even though requested.")?; + .ok_or(eyre!("Didn't get log output even though requested."))?; decompress_log(bytes) } diff --git a/pueue/tests/helper/mod.rs b/pueue/tests/helper/mod.rs index 690a03cde..ce1b09d03 100644 --- a/pueue/tests/helper/mod.rs +++ b/pueue/tests/helper/mod.rs @@ -1,5 +1,6 @@ //! This module contains helper functions, which are used by both, the client and daemon tests. -use anyhow::Result; +use crate::prelude::*; + use tokio::io::{self, AsyncWriteExt}; use tracing::level_filters::LevelFilter; diff --git a/pueue/tests/helper/network.rs b/pueue/tests/helper/network.rs index 2e7139a57..4c1a3eda3 100644 --- a/pueue/tests/helper/network.rs +++ b/pueue/tests/helper/network.rs @@ -1,4 +1,4 @@ -use anyhow::{anyhow, bail, Context, Result}; +use crate::prelude::*; use pueue_lib::network::message::*; use pueue_lib::network::protocol::{ @@ -18,12 +18,12 @@ where // Check if we can receive the response from the daemon internal_send_message(message, &mut stream) .await - .map_err(|err| anyhow!("Failed to send message: {err}"))?; + .map_err(|err| eyre!("Failed to send message: {err}"))?; // Check if we can receive the response from the daemon receive_message(&mut stream) .await - .map_err(|err| anyhow!("Failed to receive message: {err}")) + .map_err(|err| eyre!("Failed to receive message: {err}")) } /// Create a new stream that already finished the handshake and secret exchange. diff --git a/pueue/tests/helper/state.rs b/pueue/tests/helper/state.rs index 944f7355c..5ebefd29b 100644 --- a/pueue/tests/helper/state.rs +++ b/pueue/tests/helper/state.rs @@ -1,4 +1,4 @@ -use anyhow::{bail, Result}; +use crate::prelude::*; use pueue_lib::network::message::*; use pueue_lib::settings::*; diff --git a/pueue/tests/helper/task.rs b/pueue/tests/helper/task.rs index 9055f59e4..2ae2ee430 100644 --- a/pueue/tests/helper/task.rs +++ b/pueue/tests/helper/task.rs @@ -1,8 +1,8 @@ +use crate::prelude::*; + use std::collections::HashMap; use std::env::vars; -use anyhow::{anyhow, Context, Result}; - use chrono::{DateTime, Local}; use pueue_lib::network::message::*; use pueue_lib::settings::*; @@ -66,7 +66,7 @@ pub async fn get_task(shared: &Shared, task_id: usize) -> Result { let task = state .tasks .get(&0) - .ok_or_else(|| anyhow!("Couldn't find task {task_id}"))?; + .ok_or_else(|| eyre!("Couldn't find task {task_id}"))?; Ok(task.clone()) } diff --git a/pueue/tests/helper/wait.rs b/pueue/tests/helper/wait.rs index c836829fd..77fc21807 100644 --- a/pueue/tests/helper/wait.rs +++ b/pueue/tests/helper/wait.rs @@ -4,7 +4,7 @@ /// /// Using continuous lookups, we can allow long waiting times, while still having fast tests if /// things don't take that long. -use anyhow::{bail, Result}; +use crate::prelude::*; use pueue_lib::settings::Shared; use pueue_lib::state::GroupStatus; diff --git a/pueue/tests/tests.rs b/pueue/tests/tests.rs index 969546317..7b9602258 100644 --- a/pueue/tests/tests.rs +++ b/pueue/tests/tests.rs @@ -1,3 +1,9 @@ +#[cfg(unix)] +mod prelude { + pub use color_eyre::eyre::{bail, eyre, WrapErr}; + pub use color_eyre::Result; +} + #[cfg(unix)] mod helper; diff --git a/pueue_lib/Cargo.toml b/pueue_lib/Cargo.toml index 4364325e9..a27329742 100644 --- a/pueue_lib/Cargo.toml +++ b/pueue_lib/Cargo.toml @@ -15,14 +15,13 @@ rust-version.workspace = true maintenance = { status = "actively-developed" } [dependencies] -anyhow = "1.0" async-trait = "0.1" byteorder = "1.5" chrono.workspace = true +color-eyre.workspace = true command-group.workspace = true dirs = "6.0" handlebars.workspace = true -tracing.workspace = true rand = "0.8" rcgen = "0.13" rev_buf_reader = "0.3" @@ -43,9 +42,9 @@ strum.workspace = true thiserror = "2" tokio = { workspace = true, features = ["io-util", "macros", "net"] } tokio-rustls = { version = "0.26", default-features = false } +tracing.workspace = true [dev-dependencies] -anyhow.workspace = true better-panic.workspace = true portpicker = "0.1" pretty_assertions.workspace = true diff --git a/pueue_lib/src/process_helper/unix.rs b/pueue_lib/src/process_helper/unix.rs index 2dda67af1..013700a41 100644 --- a/pueue_lib/src/process_helper/unix.rs +++ b/pueue_lib/src/process_helper/unix.rs @@ -3,7 +3,7 @@ use crate::prelude::*; // We allow anyhow in here, as this is a module that'll be strictly used internally. // As soon as it's obvious that this is code is intended to be exposed to library users, we have to // go ahead and replace any `anyhow` usage by proper error handling via our own Error type. -use anyhow::Result; +use color_eyre::Result; use command_group::{GroupChild, Signal, UnixChildExt}; use crate::settings::Settings; @@ -51,7 +51,7 @@ mod tests { use std::thread::sleep; use std::time::Duration; - use anyhow::Result; + use color_eyre::Result; use command_group::CommandGroup; use libproc::processes::{pids_by_type, ProcFilter}; use pretty_assertions::assert_eq; diff --git a/pueue_lib/tests/settings_backward_compatibility.rs b/pueue_lib/tests/settings_backward_compatibility.rs index 93e9bd3e2..27ae21372 100644 --- a/pueue_lib/tests/settings_backward_compatibility.rs +++ b/pueue_lib/tests/settings_backward_compatibility.rs @@ -1,6 +1,6 @@ use std::path::PathBuf; -use anyhow::{Context, Result}; +use color_eyre::{Result, eyre::WrapErr}; use pueue_lib::settings::Settings; @@ -24,7 +24,7 @@ fn test_restore_from_old_state() -> Result<()> { // Open v0.15.0 file and ensure the settings file can be read. let (_settings, config_found) = Settings::read(&Some(old_settings_path)) - .context("Failed to read old config with defaults:")?; + .wrap_err("Failed to read old config with defaults:")?; assert!(config_found); diff --git a/pueue_lib/tests/state_backward_compatibility.rs b/pueue_lib/tests/state_backward_compatibility.rs index dd3aee0fb..f91cb7c19 100644 --- a/pueue_lib/tests/state_backward_compatibility.rs +++ b/pueue_lib/tests/state_backward_compatibility.rs @@ -1,6 +1,6 @@ use std::{fs, path::PathBuf}; -use anyhow::{Context, Result}; +use color_eyre::{eyre::WrapErr, Result}; use pueue_lib::state::{GroupStatus, State, PUEUE_DEFAULT_GROUP}; @@ -24,9 +24,9 @@ fn test_restore_from_old_state() -> Result<()> { .join("v4.0.0_state.json"); // Try to load the file. - let data = fs::read_to_string(path).context("State restore: Failed to read file")?; + let data = fs::read_to_string(path).wrap_err("State restore: Failed to read file")?; // Try to deserialize the state file. - let state: State = serde_json::from_str(&data).context("Failed to deserialize state.")?; + let state: State = serde_json::from_str(&data).wrap_err("Failed to deserialize state.")?; // Make sure the groups are loaded. assert!( diff --git a/pueue_lib/tests/tls_socket.rs b/pueue_lib/tests/tls_socket.rs index 72e67a1b9..524a78b29 100644 --- a/pueue_lib/tests/tls_socket.rs +++ b/pueue_lib/tests/tls_socket.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use color_eyre::Result; use pretty_assertions::assert_eq; use serde_cbor::de::from_slice; use serde_cbor::ser::to_vec; diff --git a/pueue_lib/tests/unix_socket.rs b/pueue_lib/tests/unix_socket.rs index 4747aa2ce..43cfb07da 100644 --- a/pueue_lib/tests/unix_socket.rs +++ b/pueue_lib/tests/unix_socket.rs @@ -3,7 +3,7 @@ mod helper; #[cfg(not(target_os = "windows"))] mod tests { - use anyhow::Result; + use color_eyre::Result; use pretty_assertions::assert_eq; use serde_cbor::de::from_slice; use serde_cbor::ser::to_vec; From d42ad11eab282e3c90d7612a3f92223444b29bd2 Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Thu, 6 Feb 2025 20:25:30 +1000 Subject: [PATCH 03/14] add: better tracing logs now --- Cargo.lock | 33 +++-------------------- pueue/Cargo.toml | 9 ++++++- pueue/src/bin/pueue.rs | 35 +++---------------------- pueue/src/bin/pueued.rs | 33 +++-------------------- pueue/src/lib.rs | 58 ++++++++++++++++++++++++++++++++++++++++- 5 files changed, 75 insertions(+), 93 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4812ed7a4..8ca8ad21d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1263,13 +1263,14 @@ dependencies = [ "serde_yaml", "shell-escape", "similar-asserts", - "simplelog", "snap", "strum", "tempfile", + "time", "tokio", "toml", "tracing", + "tracing-error", "tracing-subscriber", "tracing-test", "whoami", @@ -1725,17 +1726,6 @@ dependencies = [ "similar", ] -[[package]] -name = "simplelog" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0" -dependencies = [ - "log", - "termcolor", - "time", -] - [[package]] name = "slab" version = "0.4.9" @@ -1832,15 +1822,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - [[package]] name = "terminal_size" version = "0.4.1" @@ -2077,6 +2058,7 @@ dependencies = [ "sharded-slab", "smallvec", "thread_local", + "time", "tracing", "tracing-core", "tracing-log", @@ -2294,15 +2276,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/pueue/Cargo.toml b/pueue/Cargo.toml index 6f8edf108..bd41b254e 100644 --- a/pueue/Cargo.toml +++ b/pueue/Cargo.toml @@ -36,13 +36,20 @@ pueue-lib = { version = "0.27.0", path = "../pueue_lib" } serde.workspace = true serde_json.workspace = true shell-escape = "0.1" -simplelog = "0.12" snap.workspace = true strum.workspace = true tempfile = "3" +time = { version = "0.3.37", features = ["macros"] } tokio.workspace = true toml = "0.8" tracing.workspace = true +tracing-error = "0.2.1" +tracing-subscriber = { version = "0.3.19", features = [ + "env-filter", + "fmt", + "local-time", + "time", +] } [dev-dependencies] assert_cmd = "2" diff --git a/pueue/src/bin/pueue.rs b/pueue/src/bin/pueue.rs index a57963859..47f533a4e 100644 --- a/pueue/src/bin/pueue.rs +++ b/pueue/src/bin/pueue.rs @@ -4,8 +4,6 @@ use clap::{CommandFactory, Parser}; use clap_complete::{generate, generate_to, shells}; use color_eyre::eyre::{bail, WrapErr}; use color_eyre::Result; -use simplelog::{Config, ConfigBuilder, LevelFilter, SimpleLogger, TermLogger, TerminalMode}; -use tracing::*; use pueue_lib::settings::Settings; @@ -22,6 +20,8 @@ use pueue::client::client::Client; /// Once all this is done, we init the [Client] struct and start the main loop via [Client::start]. #[tokio::main(flavor = "current_thread")] async fn main() -> Result<()> { + color_eyre::install()?; + // Parse commandline options. let opt = CliArguments::parse(); @@ -35,38 +35,11 @@ async fn main() -> Result<()> { } // Init the logger and set the verbosity level depending on the `-v` flags. - let level = match opt.verbose { - 0 => LevelFilter::Warn, - 1 => LevelFilter::Info, - 2 => LevelFilter::Debug, - _ => LevelFilter::Trace, - }; - - // Try to initialize the logger with the timezone set to the Local time of the machine. - let mut builder = ConfigBuilder::new(); - let logger_config = match builder.set_time_offset_to_local() { - Err(_) => { - warn!("Failed to determine the local time of this machine. Fallback to UTC."); - Config::default() - } - Ok(builder) => builder.build(), - }; - - // Init a terminal logger. If this fails for some reason, try fallback to a SimpleLogger - if TermLogger::init( - level, - logger_config.clone(), - TerminalMode::Stderr, - simplelog::ColorChoice::Auto, - ) - .is_err() - { - SimpleLogger::init(level, logger_config).unwrap(); - } + pueue::tracing::install_tracing(opt.verbose)?; // Try to read settings from the configuration file. let (mut settings, config_found) = - Settings::read(&opt.config).context("Failed to read configuration.")?; + Settings::read(&opt.config).wrap_err("Failed to read configuration.")?; // Load any requested profile. if let Some(profile) = &opt.profile { diff --git a/pueue/src/bin/pueued.rs b/pueue/src/bin/pueued.rs index d45ce5bfd..f9c600d98 100644 --- a/pueue/src/bin/pueued.rs +++ b/pueue/src/bin/pueued.rs @@ -2,13 +2,13 @@ use std::process::Command; use clap::Parser; use color_eyre::Result; -use simplelog::{Config, ConfigBuilder, LevelFilter, SimpleLogger, TermLogger, TerminalMode}; -use tracing::*; use pueue::daemon::{cli::CliArguments, run}; #[tokio::main(flavor = "multi_thread", worker_threads = 4)] async fn main() -> Result<()> { + color_eyre::install()?; + // Parse commandline options. let opt = CliArguments::parse(); @@ -26,34 +26,7 @@ async fn main() -> Result<()> { } // Set the verbosity level of the logger. - let level = match opt.verbose { - 0 => LevelFilter::Warn, - 1 => LevelFilter::Info, - 2 => LevelFilter::Debug, - _ => LevelFilter::Trace, - }; - - // Try to initialize the logger with the timezone set to the Local time of the machine. - let mut builder = ConfigBuilder::new(); - let logger_config = match builder.set_time_offset_to_local() { - Err(_) => { - warn!("Failed to determine the local time of this machine. Fallback to UTC."); - Config::default() - } - Ok(builder) => builder.build(), - }; - - // Init a terminal logger. If this fails for some reason, try fallback to a SimpleLogger - if TermLogger::init( - level, - logger_config.clone(), - TerminalMode::Stderr, - simplelog::ColorChoice::Auto, - ) - .is_err() - { - SimpleLogger::init(level, logger_config).unwrap(); - } + pueue::tracing::install_tracing(opt.verbose)?; #[cfg(target_os = "windows")] { diff --git a/pueue/src/lib.rs b/pueue/src/lib.rs index 88568cea6..71186534e 100644 --- a/pueue/src/lib.rs +++ b/pueue/src/lib.rs @@ -11,9 +11,65 @@ pub(crate) mod prelude { } pub(crate) mod errors { - pub use color_eyre::eyre::{WrapErr, bail}; + pub use color_eyre::eyre::{bail, WrapErr}; pub use color_eyre::Result; } +pub mod tracing { + use crate::prelude::*; + use tracing::level_filters::LevelFilter; + use tracing_subscriber::{ + fmt::time::OffsetTime, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer, + }; + + // idea: use local time zone? + pub fn install_tracing(verbosity: u8) -> Result<()> { + let mut pretty = false; + let level = match verbosity { + 0 => LevelFilter::WARN, + 1 => LevelFilter::INFO, + 2 => LevelFilter::DEBUG, + 3 => LevelFilter::TRACE, + _ => { + pretty = true; + LevelFilter::TRACE + } + }; + + type GenericLayer = Box + Send + Sync>; + let offset = time::UtcOffset::current_local_offset().expect("should get local offset!"); + let timer = OffsetTime::new( + offset, + time::macros::format_description!("[hour]:[minute]:[second]"), + ); + + let fmt_layer: GenericLayer<_> = match pretty { + false => Box::new(tracing_subscriber::fmt::layer().with_timer(timer)), + true => Box::new( + tracing_subscriber::fmt::layer() + .pretty() + .with_timer(timer) + .with_target(true) + .with_thread_ids(false) + .with_thread_names(true) + .with_level(true) + .with_ansi(true) + .with_span_events(tracing_subscriber::fmt::format::FmtSpan::ACTIVE), + ), + }; + let filter_layer = EnvFilter::builder() + .with_default_directive(level.into()) + .from_env() + .wrap_err("RUST_LOG env variable is invalid")?; + + tracing_subscriber::Registry::default() + .with(fmt_layer.with_filter(filter_layer)) + .with(tracing_error::ErrorLayer::default()) + .init(); + + Ok(()) + } +} + pub mod client; pub mod daemon; From 8becb7dd4c4d5ffd240af9bbc088f3bf45b2561d Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Thu, 6 Feb 2025 20:35:25 +1000 Subject: [PATCH 04/14] add(doc): changelog entry + fmt + clippy --- CHANGELOG.md | 1 + pueue/src/lib.rs | 7 ++++--- pueue/tests/daemon/integration/restore.rs | 1 - pueue/tests/daemon/integration/shutdown.rs | 1 - .../daemon/integration/worker_environment_variables.rs | 1 - pueue_lib/tests/settings_backward_compatibility.rs | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 497824570..f1f526c83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ Upon updating Pueue and restarting the daemon, the previous state will be wiped, Pueue now allows editing all properties a task in one editor session. There're two modes to do so: `toml` and `files`. - Revisited, fixed and cleaned up CLI help texts. - Print most of Pueue's info/log messages to `stderr`. Only keep useful stuff like json and task log output on `stdout`. +- **Breaking** Uses `color-eyre` for a generic error type instead of `anyhow`, potentially breaking library users ### Add diff --git a/pueue/src/lib.rs b/pueue/src/lib.rs index 71186534e..870925974 100644 --- a/pueue/src/lib.rs +++ b/pueue/src/lib.rs @@ -22,7 +22,6 @@ pub mod tracing { fmt::time::OffsetTime, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer, }; - // idea: use local time zone? pub fn install_tracing(verbosity: u8) -> Result<()> { let mut pretty = false; let level = match verbosity { @@ -36,13 +35,15 @@ pub mod tracing { } }; - type GenericLayer = Box + Send + Sync>; - let offset = time::UtcOffset::current_local_offset().expect("should get local offset!"); + // todo: only log error and continue instead of panicing? + let offset = + time::UtcOffset::current_local_offset().wrap_err("should get local offset!")?; let timer = OffsetTime::new( offset, time::macros::format_description!("[hour]:[minute]:[second]"), ); + type GenericLayer = Box + Send + Sync>; let fmt_layer: GenericLayer<_> = match pretty { false => Box::new(tracing_subscriber::fmt::layer().with_timer(timer)), true => Box::new( diff --git a/pueue/tests/daemon/integration/restore.rs b/pueue/tests/daemon/integration/restore.rs index 876f5156f..430f4ac21 100644 --- a/pueue/tests/daemon/integration/restore.rs +++ b/pueue/tests/daemon/integration/restore.rs @@ -1,6 +1,5 @@ use crate::prelude::*; - use pueue_lib::network::message::TaskSelection; use pueue_lib::state::GroupStatus; diff --git a/pueue/tests/daemon/integration/shutdown.rs b/pueue/tests/daemon/integration/shutdown.rs index 5df1caa3d..0a8df6fb2 100644 --- a/pueue/tests/daemon/integration/shutdown.rs +++ b/pueue/tests/daemon/integration/shutdown.rs @@ -1,6 +1,5 @@ use crate::prelude::*; - use crate::helper::*; /// Spin up the daemon and send a SIGTERM shortly afterwards. diff --git a/pueue/tests/daemon/integration/worker_environment_variables.rs b/pueue/tests/daemon/integration/worker_environment_variables.rs index fcd0d8349..6301b0cf4 100644 --- a/pueue/tests/daemon/integration/worker_environment_variables.rs +++ b/pueue/tests/daemon/integration/worker_environment_variables.rs @@ -1,6 +1,5 @@ use crate::prelude::*; - use pueue_lib::{network::message::TaskSelection, state::PUEUE_DEFAULT_GROUP, task::Task}; use crate::helper::*; diff --git a/pueue_lib/tests/settings_backward_compatibility.rs b/pueue_lib/tests/settings_backward_compatibility.rs index 27ae21372..89110711f 100644 --- a/pueue_lib/tests/settings_backward_compatibility.rs +++ b/pueue_lib/tests/settings_backward_compatibility.rs @@ -1,6 +1,6 @@ use std::path::PathBuf; -use color_eyre::{Result, eyre::WrapErr}; +use color_eyre::{eyre::WrapErr, Result}; use pueue_lib::settings::Settings; From 0b43c00cdf2e2fb4436680cb95199fa1ece99bc5 Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Thu, 6 Feb 2025 20:39:15 +1000 Subject: [PATCH 05/14] add: only logs to stderr --- pueue/src/lib.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pueue/src/lib.rs b/pueue/src/lib.rs index 870925974..0ef6b58da 100644 --- a/pueue/src/lib.rs +++ b/pueue/src/lib.rs @@ -45,7 +45,7 @@ pub mod tracing { type GenericLayer = Box + Send + Sync>; let fmt_layer: GenericLayer<_> = match pretty { - false => Box::new(tracing_subscriber::fmt::layer().with_timer(timer)), + false => Box::new(tracing_subscriber::fmt::layer().with_timer(timer).with_writer(std::io::stderr)), true => Box::new( tracing_subscriber::fmt::layer() .pretty() @@ -55,7 +55,8 @@ pub mod tracing { .with_thread_names(true) .with_level(true) .with_ansi(true) - .with_span_events(tracing_subscriber::fmt::format::FmtSpan::ACTIVE), + .with_span_events(tracing_subscriber::fmt::format::FmtSpan::ACTIVE) + .with_writer(std::io::stderr), ), }; let filter_layer = EnvFilter::builder() From a3a5b93cbbf2237a77f5459be8ef57494f687459 Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Fri, 7 Feb 2025 09:06:00 +1000 Subject: [PATCH 06/14] add: significantly more trace/debug logging for my sanity --- pueue/src/bin/pueue.rs | 9 ++++----- pueue/src/bin/pueued.rs | 9 ++++----- pueue/src/client/client.rs | 15 +++++++++++++++ pueue/src/daemon/process_handler/spawn.rs | 23 ++++++++++++++++++----- pueue_lib/src/process_helper/mod.rs | 19 +++++++++++++++++++ 5 files changed, 60 insertions(+), 15 deletions(-) diff --git a/pueue/src/bin/pueue.rs b/pueue/src/bin/pueue.rs index 47f533a4e..0b25f0c6a 100644 --- a/pueue/src/bin/pueue.rs +++ b/pueue/src/bin/pueue.rs @@ -20,11 +20,13 @@ use pueue::client::client::Client; /// Once all this is done, we init the [Client] struct and start the main loop via [Client::start]. #[tokio::main(flavor = "current_thread")] async fn main() -> Result<()> { - color_eyre::install()?; - // Parse commandline options. let opt = CliArguments::parse(); + // Init the logger and set the verbosity level depending on the `-v` flags. + pueue::tracing::install_tracing(opt.verbose)?; + color_eyre::install()?; + // In case the user requested the generation of shell completion file, create it and exit. if let Some(SubCommand::Completions { shell, @@ -34,9 +36,6 @@ async fn main() -> Result<()> { return create_shell_completion_file(shell, output_directory); } - // Init the logger and set the verbosity level depending on the `-v` flags. - pueue::tracing::install_tracing(opt.verbose)?; - // Try to read settings from the configuration file. let (mut settings, config_found) = Settings::read(&opt.config).wrap_err("Failed to read configuration.")?; diff --git a/pueue/src/bin/pueued.rs b/pueue/src/bin/pueued.rs index f9c600d98..f3f81ef0b 100644 --- a/pueue/src/bin/pueued.rs +++ b/pueue/src/bin/pueued.rs @@ -7,11 +7,13 @@ use pueue::daemon::{cli::CliArguments, run}; #[tokio::main(flavor = "multi_thread", worker_threads = 4)] async fn main() -> Result<()> { - color_eyre::install()?; - // Parse commandline options. let opt = CliArguments::parse(); + // Set the verbosity level of the logger. + pueue::tracing::install_tracing(opt.verbose)?; + color_eyre::install()?; + if opt.daemonize { // Ordinarily this would be handled in clap, but they don't support conflicting specific args // with subcommands. We can't turn this off globally because -c and -p are valid args when using @@ -25,9 +27,6 @@ async fn main() -> Result<()> { return fork_daemon(&opt); } - // Set the verbosity level of the logger. - pueue::tracing::install_tracing(opt.verbose)?; - #[cfg(target_os = "windows")] { use pueue::daemon::cli::{ServiceSubcommand, ServiceSubcommandEntry}; diff --git a/pueue/src/client/client.rs b/pueue/src/client/client.rs index d20c20317..389ff63af 100644 --- a/pueue/src/client/client.rs +++ b/pueue/src/client/client.rs @@ -34,6 +34,17 @@ pub struct Client { stream: GenericStream, } +impl std::fmt::Debug for Client { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Client") + .field("subcommand", &self.subcommand) + .field("settings", &self.settings) + .field("style", &self.style) + .field("stream", &"GenericStream") + .finish() + } +} + /// This is a small helper which either returns a given group or the default group. pub fn group_or_default(group: &Option) -> String { group @@ -150,6 +161,8 @@ impl Client { /// /// The command handling is split into "simple" and "complex" commands. pub async fn start(&mut self) -> Result<()> { + trace!(message = "Starting client", client = ?self); + // Return early, if the command has already been handled. if self.handle_complex_command(self.subcommand.clone()).await? { return Ok(()); @@ -191,6 +204,8 @@ impl Client { follow, } => { // Either take the user-specified path or default to the current working directory. + // This will give errors if connecting over TCP/TLS to a remote host that doesn't + // have the same directory structure as the client let path = working_directory .as_ref() .map(|path| Ok(path.clone())) diff --git a/pueue/src/daemon/process_handler/spawn.rs b/pueue/src/daemon/process_handler/spawn.rs index f0bac3a0d..49f73a1bc 100644 --- a/pueue/src/daemon/process_handler/spawn.rs +++ b/pueue/src/daemon/process_handler/spawn.rs @@ -161,6 +161,16 @@ pub fn spawn_process(settings: &Settings, state: &mut LockedState, task_id: usiz envs.insert("PUEUE_GROUP".into(), group.clone()); envs.insert("PUEUE_WORKER_ID".into(), worker_id.to_string()); + if !path.exists() { + let err = path.try_exists(); + warn!( + message = "Starting a command with a working directory that doesn't seem to exist", + help = "Specify the --working-directory to `pueue add` or similar if connecting over TCP/TLS to a remote machine", + ?path, + ?err + ); + } + // Spawn the actual subprocess let spawned_command = command .current_dir(path) @@ -175,14 +185,17 @@ pub fn spawn_process(settings: &Settings, state: &mut LockedState, task_id: usiz let child = match spawned_command { Ok(child) => child, Err(err) => { - let error = format!("Failed to spawn child {task_id} with err: {err:?}"); - error!("{}", error); + let error_msg = format!("Failed to spawn child {task_id} with err: {:?}", err); + error!(?err, "Failed to spawn child {task_id}"); + trace!(?command, message = "Command that failed"); // Write some debug log output to the task's log file. // This should always work, but print a datailed error if it didn't work. if let Ok(mut file) = get_writable_log_file_handle(task_id, &pueue_directory) { - let log_output = - format!("Pueue error, failed to spawn task. Check your command.\n{error}"); + let log_output = format!( + "Pueue error, failed to spawn task. Check your command.\n{}", + error_msg + ); let write_result = file.write_all(log_output.as_bytes()); if let Err(write_err) = write_result { error!("Failed to write spawn error to task log: {}", write_err); @@ -196,7 +209,7 @@ pub fn spawn_process(settings: &Settings, state: &mut LockedState, task_id: usiz enqueued_at, start: Local::now(), end: Local::now(), - result: TaskResult::FailedToSpawn(error), + result: TaskResult::FailedToSpawn(error_msg), }; task.clone() }; diff --git a/pueue_lib/src/process_helper/mod.rs b/pueue_lib/src/process_helper/mod.rs index 71f088a3c..f7d5fa7ed 100644 --- a/pueue_lib/src/process_helper/mod.rs +++ b/pueue_lib/src/process_helper/mod.rs @@ -84,8 +84,27 @@ pub fn compile_shell_command(settings: &Settings, command: &str) -> Command { } let executable = compiled_command.remove(0); + let metadata = std::fs::metadata(&executable); + if !std::path::PathBuf::from(&executable).is_file() { + warn!( + message = "Couldn't sanity check that the executale is a real file", + ?executable, + ?metadata + ); + } else { + trace!( + message = "Command sanity check has a file-like executable", + ?executable, + ?metadata + ); + } // Chain two `powershell` commands, one that sets the output encoding to utf8 and then the user provided one. + debug!( + message = "Building command in preperation to spawn", + ?executable, + ?compiled_command + ); let mut command = Command::new(executable); for arg in compiled_command { command.arg(&arg); From 63f19d78bb24df507026e14ab3ca70784ac44c4d Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Fri, 7 Feb 2025 09:06:41 +1000 Subject: [PATCH 07/14] fmt --- pueue/src/lib.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pueue/src/lib.rs b/pueue/src/lib.rs index 0ef6b58da..f88b5feb6 100644 --- a/pueue/src/lib.rs +++ b/pueue/src/lib.rs @@ -45,7 +45,11 @@ pub mod tracing { type GenericLayer = Box + Send + Sync>; let fmt_layer: GenericLayer<_> = match pretty { - false => Box::new(tracing_subscriber::fmt::layer().with_timer(timer).with_writer(std::io::stderr)), + false => Box::new( + tracing_subscriber::fmt::layer() + .with_timer(timer) + .with_writer(std::io::stderr), + ), true => Box::new( tracing_subscriber::fmt::layer() .pretty() From 79f036cb5c08999c1eead60dee179f5327d91aec Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Sun, 9 Feb 2025 16:59:33 +1000 Subject: [PATCH 08/14] Update pueue/src/daemon/process_handler/mod.rs Good catch thx Co-authored-by: Arne Christian Beer --- pueue/src/daemon/process_handler/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pueue/src/daemon/process_handler/mod.rs b/pueue/src/daemon/process_handler/mod.rs index 8122c90b4..d142e71bc 100644 --- a/pueue/src/daemon/process_handler/mod.rs +++ b/pueue/src/daemon/process_handler/mod.rs @@ -24,7 +24,7 @@ macro_rules! ok_or_shutdown { Err(err) => { use pueue_lib::network::message::Shutdown; use $crate::daemon::process_handler::initiate_shutdown; - ::tracing::error!( + error!( "Initializing graceful shutdown. Encountered error in TaskHandler: {err}" ); initiate_shutdown($settings, $state, Shutdown::Emergency); From ba541f56d18817aea4e5e98cfb28b389b9e7df0c Mon Sep 17 00:00:00 2001 From: Arne Beer Date: Fri, 7 Feb 2025 12:19:29 +0100 Subject: [PATCH 09/14] docs: pueue_lib changelog for 0.27 --- pueue_lib/CHANGELOG.md | 54 ++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/pueue_lib/CHANGELOG.md b/pueue_lib/CHANGELOG.md index f9c7a5a5f..8cf4c5dac 100644 --- a/pueue_lib/CHANGELOG.md +++ b/pueue_lib/CHANGELOG.md @@ -6,6 +6,37 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). This project adheres **somewhat** to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The concept of SemVer is applied to the daemon/client API, but not the library API itself. +## [0.27.0] - 2024-12-01 + +### Added + +- Introduce re-usable `Children` Process representation. + +### Removed + +- Remove unused `reset_task_log_directory` +- Add `EnvMessage` to set/unset environment variables on tasks. +- `netbsd` support + +### Changed + +- Rework how `reset` works. `Reset` now works on a per-group basis. + Full reset simply means that all groups are to be reset. +- Move **all** state into the `State` struct. + This prevents concurrency issues and fixes many issues. + The new runtime-dependant fields aren't serialized. +- Rework `TaskState` representation enum to include all runtime-dependant fields. + As a result, several fields have been removed from `Task. +- Make `Stash` Message payload a struct. +- Make `EditRestore`, `EditRequest` Message payload a vector of task ids. +- Make `Edit` Message payload a vector the new `EditableTask`. +- Change editing structs so that all values are always set (no more optionals +- Change `ResetMessage` to use new `ResetTarget` enum. + +### Fix + +- Unix socket permission handling + ## [0.26.0] - 2024-03-22 ### Added @@ -54,7 +85,6 @@ The concept of SemVer is applied to the daemon/client API, but not the library A This version was skipped due to a error during release :). - ## [0.21.3] - 2023-02-12 ### Changed @@ -66,7 +96,7 @@ This version was skipped due to a error during release :). ### Fix - Point to a new patched fork of `darwin-libproc`, as the original has been deleted. - This fixes the development builts for pueue on Apple platforms. + This fixes the development builts for pueue on Apple platforms. ## [0.21.0] - 2022-12-12 @@ -78,7 +108,7 @@ This version was skipped due to a error during release :). - Make `EditMessage::path` and `EditMessage::command` optional. - The `children` flag has been removed for the `Start`-,`Pause`-,`Kill`- and `ResetMessage`. - No longer support TLS 1.2 certificates, only accept version 1.3. - All generated certificates were 1.3 anyway, so there shouldn't be any breakage, except users created their own certs. + All generated certificates were 1.3 anyway, so there shouldn't be any breakage, except users created their own certs. ### Added @@ -94,7 +124,7 @@ This version was skipped due to a error during release :). - The module structure of the platform specific networking code has been streamlined. - The process handling code has been moved from the daemon to `pueue_lib`. See [#336](https://github.com/Nukesor/pueue/issues/336). - The reason for this is, that the client will need some of these process handling capabilitites to spawn shell commands when editing tasks. + The reason for this is, that the client will need some of these process handling capabilitites to spawn shell commands when editing tasks. ## [0.20.0] - 2022-07-21 @@ -106,15 +136,15 @@ This version was skipped due to a error during release :). - Breaking change: Backward compatibility logic for the old group structure in the main state. - Breaking change: - The `State` no longer owns a copy of the current settings. - This became possible due to the group configuration no longer being part of the configuration file. + The `State` no longer owns a copy of the current settings. + This became possible due to the group configuration no longer being part of the configuration file. ### Fixed - The networking logic wasn't able to handle rapid successiv messages until now. - If two messages were sent in quick succession, the client would receive both messages in one go. - The reason for this was simply that the receiving buffer was always of a size of 1400 Bytes, even if the actual payload was much smaller. - This wasn't a problem until now as there was no scenario where two messages were send immediately one after another. + If two messages were sent in quick succession, the client would receive both messages in one go. + The reason for this was simply that the receiving buffer was always of a size of 1400 Bytes, even if the actual payload was much smaller. + This wasn't a problem until now as there was no scenario where two messages were send immediately one after another. ## [0.19.6] - unreleased @@ -187,7 +217,7 @@ This version was skipped due to a error during release :). - **Breaking:** The unix socket is now located in the `runtime_directory` by default [#243](https://github.com/Nukesor/pueue/issues/243). - **Breaking:** `Shared::pueue_directory` changed from `PathBuf` to `Option`. - **Breaking:** `Settings::read_with_defaults` no longer a boolean as first parameter. - Instead, it returns a tuple of `(Settings, bool)` with the boolean indicating whether a config file has been found. + Instead, it returns a tuple of `(Settings, bool)` with the boolean indicating whether a config file has been found. - **Breaking:** The type of `State.group` changed from `BTreeMap` to the new `BTreeMap` struct. - **Breaking:** The `GroupResponseMessage` now also uses the new `Group` struct. @@ -309,7 +339,7 @@ Several non-backward compatible breaking API changes to prevent impossible state ### Changed - Clippy adjustment: Transform `&PathBuf` to `&Path` in function parameter types. - This should be reverse-compatible, since `&PathBuf` dereferences to `&Path`. + This should be reverse-compatible, since `&PathBuf` dereferences to `&Path`. ## [0.12.1] - 09-02-2021 @@ -337,7 +367,7 @@ Moved into a stand-alone repository for better maintainability. ### Changed - Use `127.0.0.1` instead of `localhost` as default host. - This prevents any unforseen consequences if somebody deletes the default `localhost` entry from their `/etc/hosts` file. + This prevents any unforseen consequences if somebody deletes the default `localhost` entry from their `/etc/hosts` file. ## [0.11.0] - 18-01-2020 From 64a9b4973967131b297d4be928cac0adba5f389c Mon Sep 17 00:00:00 2001 From: Arne Beer Date: Sat, 8 Feb 2025 12:47:29 +0100 Subject: [PATCH 10/14] docs: Update ARCHITECTURE.md and fix/remove dead links --- CHANGELOG.md | 8 +-- docs/Architecture.md | 121 +++++++++++++++++++++++++++-------------- pueue_lib/CHANGELOG.md | 2 +- 3 files changed, 84 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1f526c83..81f7f9103 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -260,7 +260,7 @@ The test coverage and development tooling has never been better, the project con If you need more filtering capabilities, please create an issue or a PR :). - `limit [last|first] 10` limit the results that'll be shown. - `order_by [column] [asc|desc]` order by certain columns. - - For exact info on the syntax check the [syntax file](https://github.com/Nukesor/pueue/blob/main/client/query/syntax.pest). + - For exact info on the syntax check the [syntax file](https://github.com/Nukesor/pueue/blob/main/pueue/src/client/query/syntax.pest). I still have to write detailed docs on how to use it. - Show a hint when calling `pueue log` if the task output has been truncated. [#318](https://github.com/Nukesor/pueue/issues/318) - Add `Settings.shared.alias_file`, which allows to set the location of the `pueue_aliases.yml` file. @@ -392,7 +392,7 @@ Also a huge thanks to all contributors that helped working on this version! - Allow to set the amount of parallel tasks at group creation by [Spyros Roum](https://github.com/SpyrosRoum) [#245](https://github.com/Nukesor/pueue/issues/249). - When calling `pueue` without a subcommand, the `status` command will be called by default [#247](https://github.com/Nukesor/pueue/issues/247). - Add the `--group` parameter to the `pueue clean` command [#248](https://github.com/Nukesor/pueue/issues/248). -- Add `output` for a task's log output as template parameters for callbacks [#269](https://github.com/Nukesor/issues/269). +- Add `output` for a task's log output as template parameters for callbacks [#269](https://github.com/Nukesor/pueue/issues/269). - Add `--lines` parameter to `pueue follow` to only show specified number of lines from stdout before following [#270](https://github.com/Nukesor/pueue/issues/270). - Notify the user if a task is added to a paused group [#265](https://github.com/Nukesor/pueue/issues/265). - Notify the user that when killing whole groups, those groups are also paused [#265](https://github.com/Nukesor/pueue/issues/265). @@ -573,7 +573,7 @@ Overall, this resulted in sleaker und much better maintainable code. However, th ### Fixed - Remove task logs on `pueue remove`. [#187](https://github.com/Nukesor/pueue/issues/187) -- Improve Windows support by [oiatz](https://github.com/oiatz). [#114](https://github.com/Nukesor/pueue/issues/114) +- Improve Windows support. [#114](https://github.com/Nukesor/pueue/issues/114) - Fix empty output for empty groups when requesting specific group with `status -g $name`. [#190](https://github.com/Nukesor/pueue/issues/190) - Fix missing output when explicitly requesting default group with `status -g default`. [#190](https://github.com/Nukesor/pueue/issues/190) @@ -799,7 +799,7 @@ This version adds breaking changes: - Non-existing tasks were displayed as successfully removed. [#108](https://github.com/Nukesor/pueue/issues/108) - Remove child process handling logic for MacOs, since the library simply doesn't support this. -- Remove unneeded `config` features and reduce compile time by ~10%. Contribution by [LovecraftianHorror](https://github.com/LovecraftianHorror) [#112](https://github.com/Nukesor/pueue/issues/112) +- Remove unneeded `config` features and reduce compile time by ~10%. - Remove futures-timers, effectively reducing compile time by ~14%. [#112](https://github.com/Nukesor/pueue/issues/112) - Update to comfy-table v1.1.0, reducing compile time by another ~10%. [#112](https://github.com/Nukesor/pueue/issues/112) diff --git a/docs/Architecture.md b/docs/Architecture.md index 068a66f52..6b4d44496 100644 --- a/docs/Architecture.md +++ b/docs/Architecture.md @@ -5,18 +5,21 @@ It explains the project structure, so you can get a rough overview of the overal Feel free to expand this document! -- [Overall Structure](https://github.com/Nukesor/pueue/blob/main/ARCHITECTURE.md#overall-structure) -- [Daemon](https://github.com/Nukesor/pueue/blob/main/ARCHITECTURE.md#daemon) -- [Request Handler](https://github.com/Nukesor/pueue/blob/main/ARCHITECTURE.md#request-handler) -- [TaskHandler](https://github.com/Nukesor/pueue/blob/main/ARCHITECTURE.md#taskhandler) -- [Shared State](https://github.com/Nukesor/pueue/blob/main/ARCHITECTURE.md#shared-state) -- [Code Style](https://github.com/Nukesor/pueue/blob/main/ARCHITECTURE.md#code-style) +- [Overall Structure](#overall-structure) +- [Daemon](#Daemon) + - [Main loops](#main-loops) + - [Task handler main loop](#task-handler-main-loop) + - [Message handler main loop](#message-handler-main-loop) + - [Message Handlers](#message-handlers) + - [Process Handlers](#process-handlers) +- [Shared State](#shared-state) +- [Code Style](#code-style) ## Overall Structure This project is divided into two modules, the client (`pueue`) and the daemon (`pueued`). \ -_Pueue_ also depends on [pueue-lib](https://github.com/nukesor/pueue-lib). -_Pueue-lib_ contains everything that is shared between the daemon and the client. +Both depends on [pueue-lib](https://github.com/nukesor/pueue-lib). +_pueue-lib_ contains everything that is shared between the daemon and the client. This includes: @@ -27,67 +30,91 @@ This includes: ## Daemon -The daemon is composed of two main components. +The daemon is composed of two main components and a bunch of helper functions. -1. Request handling in `pueue/src/daemon/network/`. +1. Request handling in [`daemon::network`]. This is the code responsible for communicating with clients. - In `pueue/src/daemon/network/message_handler/` you can find neatly separated handlers for all of Pueue's subcommands. -2. The TaskHandler in `pueue/src/daemon/task_handler/`. - It's responsible for everything regarding process interaction. + In [`daemon::network::message_handler`] you can find neatly separated handlers for all of Pueue's subcommands. +2. Process handling is located in [`daemon::process_handler`]. + Each file contains functions to handle a specific type of process related operation. -All information, including process specific information, is stored in the `State` (`pueue-lib/state.rs`) struct. \ -Both components share a reference to the State, a `Arc>`. -That way we can guarantee a single source of truth and a consistent state. +All information, including process specific information, is stored in the [`State`] struct. \ +Both components share a reference to the State, via a [`SharedState`] handle, which is effectively a `Arc>`. +That way we can guarantee a single source of truth and a consistent state at all times. -### Message Handlers +### Main loops + +The daemon has two main loops. One for handling client requests and one for handling task's processes. +Both run in parallel in the same multi-threaded tokio async runtime via a `try_join!` call. + +#### Task handler main loop -The `pueue/src/daemon/network/socket.rs` module contains the logic for accepting client connections and receiving payloads. -The request accept and handle logic is a single async-await loop run by the main thread. +The task handling main loop is located in [`daemon::task_handlers::run`] +It takes care of the actual "daemon" and scheduling logic. -The payload is then deserialized to `Message` (`pueue-lib/message.rs`) and handled by its respective function. -All functions used for handling these messages can be found in `pueue/src/daemon/network/message_handler`. +- Scheduling/starting of new tasks when a new slot is available +- Handling finished tasks and cleaning up processes. +- Enqueueing delayed tasks that reached their `enqueue_at` date. +- Callback process handling. +- Task dependency checks (mark tasks as failed if their dependencies failed). +- Reset logic +- Shutdown logic -### TaskHandler +### Message handler main loop -The TaskHandler is responsible for actually starting and managing system processes. \ -It shares the async main thread with the message handlers in a `try_join!` call. +The message handler main loop is the `accept_incoming` function located in [`daemon::network::socket`]. -The TaskHandler runs a never ending loop, which checks a few times each second, if +To give a rough overview of what happens in here: + +- Listen on the daemon's socket for incoming Unix/TCP connections +- Accept new connection +- For each new connection, spawn a new tokio task that calls the `handle_incoming` function. +- Performs authorization (secret & certificate) +- If successful, send confirmation, which is also the daemon's version. +- Receive the incoming message and deserialize it +- Handle the message via the [`handle_message`] function. +- Return the response + +### Message Handlers -- a new task can be started. -- tasks finished and can be finalized. -- delayed tasks can be enqueued (`-d` flag on `pueue add`) -- A few other things. Check the `TaskHandler::run` function in `pueue/src/daemon/task_handler/mod.rs`. +All functions used for handling client messages can be found in [`daemon::network::message_handler`]. -The TaskHandler is by far the most complex piece of code in this project, but there is also a lot of documentation. +Message handling functions have a [`SharedState`] handle and may call [`daemon::process_handler`] functions +directly to immediately execute tasks such as starting, stopping or killing processes. + +### Process Handlers + +The [`daemon::process_handler`] functions are used to actually start and manage system processes. \ + +These functions are by far the most complex piece of code in this project, but there is also a lot of documentation for each individual function, so go and check them out :). ## Shared State Whenever you're writing some core-logic in Pueue, please make sure to understand how mutexes work. -As a general rule of thumb, the state should only ever be locked in message handler functions and at the top of the TaskHandler's main loop. - +As a general rule of thumb, the [`SharedState`] should only ever be locked in message handler functions and at the start of any process handling functionality. +Always make sure that you lock the state for a given "unit of work". This rule allows us to be very conservative with state locking to prevent deadlocks. ## Code Style -This is a result of `tokei ./pueue ./pueue_lib` on commit `84a2d47` at the 2022-12-27. +This is a result of `tokei ./pueue ./pueue_lib` on commit `1db4116` at the 2025-02-08. ``` =============================================================================== Language Files Lines Code Comments Blanks =============================================================================== - JSON 2 238 238 0 0 - Markdown 2 310 0 192 118 - Pest 1 69 43 12 14 - TOML 2 140 112 12 16 + JSON 2 250 250 0 0 + Markdown 3 404 0 252 152 + Pest 1 74 46 13 15 + TOML 2 161 136 12 13 YAML 1 27 27 0 0 ------------------------------------------------------------------------------- - Rust 137 12983 9645 1179 2159 - |- Markdown 127 1571 0 1450 121 - (Total) 14554 9645 2629 2280 + Rust 150 16067 11971 1492 2604 + |- Markdown 137 1840 0 1660 180 + (Total) 17907 11971 3152 2784 =============================================================================== - Total 145 13767 10065 1395 2307 + Total 159 16983 12430 1769 2784 =============================================================================== ``` @@ -101,7 +128,17 @@ PR's are automatically checked for these two and won't be accepted unless everyt 1. All functions must have a doc block. 2. All non-trivial structs must have a doc block. -3. Rather too many inline comments than too few. +3. Write rather too many inline comments than too few. 4. Non-trivial code should be well documented! In general, please add a lot of comments. It makes maintenance, collaboration and reviews MUCH easier. + +[`Message`]: `https://docs.rs/pueue-lib/latest/pueue_lib/network/message/enum.Message.html` +[`SharedState`]: https://docs.rs/pueue-lib/latest/pueue_lib/state/type.SharedState.html +[`State`]: https://docs.rs/pueue-lib/latest/pueue_lib/state/struct.State.html +[`daemon::network::message_handler`]: https://github.com/Nukesor/pueue/blob/main/pueue/src/daemon/network/message_handler +[`daemon::network::socket`]: https://github.com/Nukesor/pueue/blob/main/pueue/src/daemon/network/socket.rs +[`daemon::network`]: https://github.com/Nukesor/pueue/blob/main/pueue/src/daemon/network +[`daemon::process_handler`]: https://github.com/Nukesor/pueue/tree/main/pueue/src/daemon/process_handler +[`daemon::task_handlers::run`]: https://github.com/Nukesor/pueue/blob/main/pueue/src/daemon/task_handler.rs +[`handle_message`]: https://github.com/Nukesor/pueue/blob/main/pueue/src/daemon/network/message_handler/mod.rs diff --git a/pueue_lib/CHANGELOG.md b/pueue_lib/CHANGELOG.md index 8cf4c5dac..37c576462 100644 --- a/pueue_lib/CHANGELOG.md +++ b/pueue_lib/CHANGELOG.md @@ -326,7 +326,7 @@ Several non-backward compatible breaking API changes to prevent impossible state - `~` is now respected in configuration paths by [dadav](https://github.com/dadav) for [Pueue #191](https://github.com/Nukesor/pueue/issues/191). - New function `read_last_log_file_lines` for [#196](https://github.com/Nukesor/pueue/issues/196). - Add `callback_log_lines` setting for Daemon, specifying the amount of lines returned to the callback. [#196](https://github.com/Nukesor/pueue/issues/196). -- Support for other `apple` platforms by [althiometer](https://github.com/althiometer) +- Support for other `apple` platforms. - Added backward compatibility tests for v0.12.2 state. - Added SignalMessage and Signal enum for a list of all supported Unix signals. From 913b09a8237e19f2b9184c93724f0ebfb7931381 Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Sun, 9 Feb 2025 17:47:39 +1000 Subject: [PATCH 11/14] fix: lots of GH-requested changes --- Cargo.lock | 2 +- pueue/Cargo.toml | 10 ++-- pueue/src/daemon/process_handler/spawn.rs | 2 +- pueue/src/lib.rs | 63 +---------------------- pueue/src/tracing.rs | 56 ++++++++++++++++++++ pueue/tests/daemon/integration/edit.rs | 3 +- pueue/tests/helper/mod.rs | 11 +--- pueue_lib/src/process_helper/mod.rs | 10 ++-- 8 files changed, 73 insertions(+), 84 deletions(-) create mode 100644 pueue/src/tracing.rs diff --git a/Cargo.lock b/Cargo.lock index 8ca8ad21d..e5e1b6817 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1266,7 +1266,6 @@ dependencies = [ "snap", "strum", "tempfile", - "time", "tokio", "toml", "tracing", @@ -2051,6 +2050,7 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ + "chrono", "matchers", "nu-ansi-term", "once_cell", diff --git a/pueue/Cargo.toml b/pueue/Cargo.toml index bd41b254e..63b10d8f8 100644 --- a/pueue/Cargo.toml +++ b/pueue/Cargo.toml @@ -39,16 +39,15 @@ shell-escape = "0.1" snap.workspace = true strum.workspace = true tempfile = "3" -time = { version = "0.3.37", features = ["macros"] } tokio.workspace = true toml = "0.8" tracing.workspace = true tracing-error = "0.2.1" tracing-subscriber = { version = "0.3.19", features = [ + "chrono", "env-filter", "fmt", "local-time", - "time", ] } [dev-dependencies] @@ -66,7 +65,12 @@ tracing-test = "0.2.5" # Set log level for tests with RUST_LOG=, use with failed tests or # disable test stdout/stderr capture (`cargo test -- --nocapture` / `cargo # nextest run --no-capture`) -tracing-subscriber = { version = "*", features = ["env-filter", "fmt"] } +tracing-subscriber = { version = "*", features = [ + "chrono", + "env-filter", + "fmt", + "local-time", +] } # We don't need any of the default features for crossterm. # However, the windows build needs the windows feature enabled. diff --git a/pueue/src/daemon/process_handler/spawn.rs b/pueue/src/daemon/process_handler/spawn.rs index 49f73a1bc..de408003e 100644 --- a/pueue/src/daemon/process_handler/spawn.rs +++ b/pueue/src/daemon/process_handler/spawn.rs @@ -187,7 +187,7 @@ pub fn spawn_process(settings: &Settings, state: &mut LockedState, task_id: usiz Err(err) => { let error_msg = format!("Failed to spawn child {task_id} with err: {:?}", err); error!(?err, "Failed to spawn child {task_id}"); - trace!(?command, message = "Command that failed"); + trace!(?command, "Command that failed"); // Write some debug log output to the task's log file. // This should always work, but print a datailed error if it didn't work. diff --git a/pueue/src/lib.rs b/pueue/src/lib.rs index f88b5feb6..76e662711 100644 --- a/pueue/src/lib.rs +++ b/pueue/src/lib.rs @@ -15,67 +15,6 @@ pub(crate) mod errors { pub use color_eyre::Result; } -pub mod tracing { - use crate::prelude::*; - use tracing::level_filters::LevelFilter; - use tracing_subscriber::{ - fmt::time::OffsetTime, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer, - }; - - pub fn install_tracing(verbosity: u8) -> Result<()> { - let mut pretty = false; - let level = match verbosity { - 0 => LevelFilter::WARN, - 1 => LevelFilter::INFO, - 2 => LevelFilter::DEBUG, - 3 => LevelFilter::TRACE, - _ => { - pretty = true; - LevelFilter::TRACE - } - }; - - // todo: only log error and continue instead of panicing? - let offset = - time::UtcOffset::current_local_offset().wrap_err("should get local offset!")?; - let timer = OffsetTime::new( - offset, - time::macros::format_description!("[hour]:[minute]:[second]"), - ); - - type GenericLayer = Box + Send + Sync>; - let fmt_layer: GenericLayer<_> = match pretty { - false => Box::new( - tracing_subscriber::fmt::layer() - .with_timer(timer) - .with_writer(std::io::stderr), - ), - true => Box::new( - tracing_subscriber::fmt::layer() - .pretty() - .with_timer(timer) - .with_target(true) - .with_thread_ids(false) - .with_thread_names(true) - .with_level(true) - .with_ansi(true) - .with_span_events(tracing_subscriber::fmt::format::FmtSpan::ACTIVE) - .with_writer(std::io::stderr), - ), - }; - let filter_layer = EnvFilter::builder() - .with_default_directive(level.into()) - .from_env() - .wrap_err("RUST_LOG env variable is invalid")?; - - tracing_subscriber::Registry::default() - .with(fmt_layer.with_filter(filter_layer)) - .with(tracing_error::ErrorLayer::default()) - .init(); - - Ok(()) - } -} - pub mod client; pub mod daemon; +pub mod tracing; diff --git a/pueue/src/tracing.rs b/pueue/src/tracing.rs new file mode 100644 index 000000000..630da7572 --- /dev/null +++ b/pueue/src/tracing.rs @@ -0,0 +1,56 @@ +use crate::prelude::*; +use tracing::level_filters::LevelFilter; +use tracing_subscriber::{ + field::MakeExt, fmt::time::ChronoLocal, layer::SubscriberExt, util::SubscriberInitExt, + EnvFilter, Layer, +}; + +pub fn install_tracing(verbosity: u8) -> Result<()> { + let mut pretty = false; + let level = match verbosity { + 0 => LevelFilter::WARN, + 1 => LevelFilter::INFO, + 2 => LevelFilter::DEBUG, + 3 => LevelFilter::TRACE, + _ => { + pretty = true; + LevelFilter::TRACE + } + }; + + // tries to find local offset internally + let timer = ChronoLocal::new("%H:%M:%S".into()); + + type GenericLayer = Box + Send + Sync>; + let fmt_layer: GenericLayer<_> = match pretty { + false => Box::new( + tracing_subscriber::fmt::layer() + .map_fmt_fields(|f| f.debug_alt()) + .with_timer(timer) + .with_writer(std::io::stderr), + ), + true => Box::new( + tracing_subscriber::fmt::layer() + .pretty() + .with_timer(timer) + .with_target(true) + .with_thread_ids(false) + .with_thread_names(true) + .with_level(true) + .with_ansi(true) + .with_span_events(tracing_subscriber::fmt::format::FmtSpan::ACTIVE) + .with_writer(std::io::stderr), + ), + }; + let filter_layer = EnvFilter::builder() + .with_default_directive(level.into()) + .from_env() + .wrap_err("RUST_LOG env variable is invalid")?; + + tracing_subscriber::Registry::default() + .with(fmt_layer.with_filter(filter_layer)) + .with(tracing_error::ErrorLayer::default()) + .init(); + + Ok(()) +} diff --git a/pueue/tests/daemon/integration/edit.rs b/pueue/tests/daemon/integration/edit.rs index 2421f8854..ba8126f71 100644 --- a/pueue/tests/daemon/integration/edit.rs +++ b/pueue/tests/daemon/integration/edit.rs @@ -3,7 +3,6 @@ use crate::prelude::*; use std::path::PathBuf; use assert_matches::assert_matches; -use tracing_test::traced_test; use pueue_lib::network::message::*; use pueue_lib::settings::Shared; @@ -34,7 +33,7 @@ async fn create_edited_task(shared: &Shared) -> Result> { /// Test if adding a normal task works as intended. #[tokio::test(flavor = "multi_thread", worker_threads = 2)] -#[traced_test] +#[tracing_test::traced_test] async fn test_edit_flow() -> Result<()> { let daemon = daemon().await?; let shared = &daemon.settings.shared; diff --git a/pueue/tests/helper/mod.rs b/pueue/tests/helper/mod.rs index ce1b09d03..ac7e6df64 100644 --- a/pueue/tests/helper/mod.rs +++ b/pueue/tests/helper/mod.rs @@ -2,7 +2,6 @@ use crate::prelude::*; use tokio::io::{self, AsyncWriteExt}; -use tracing::level_filters::LevelFilter; pub use pueue_lib::state::PUEUE_DEFAULT_GROUP; @@ -34,14 +33,8 @@ const TIMEOUT: u64 = 5000; /// Use this function to enable log output for in-runtime daemon output. #[allow(dead_code)] pub fn enable_logger() { - let level = LevelFilter::DEBUG; - - // idea: use local timezone? - // Init a terminal logger - tracing_subscriber::fmt() - .with_max_level(level) - .with_writer(std::io::stderr) - .init(); + pueue::tracing::install_tracing(3) + .expect("Couldn't init tracing for test, have you initialised tracing twice?"); } /// A helper function to sleep for ms time. diff --git a/pueue_lib/src/process_helper/mod.rs b/pueue_lib/src/process_helper/mod.rs index f7d5fa7ed..39d346259 100644 --- a/pueue_lib/src/process_helper/mod.rs +++ b/pueue_lib/src/process_helper/mod.rs @@ -86,8 +86,9 @@ pub fn compile_shell_command(settings: &Settings, command: &str) -> Command { let executable = compiled_command.remove(0); let metadata = std::fs::metadata(&executable); if !std::path::PathBuf::from(&executable).is_file() { - warn!( + trace!( message = "Couldn't sanity check that the executale is a real file", + help = "This is expected if the executable is a shell builtin, an alias or in $PATH", ?executable, ?metadata ); @@ -100,11 +101,6 @@ pub fn compile_shell_command(settings: &Settings, command: &str) -> Command { } // Chain two `powershell` commands, one that sets the output encoding to utf8 and then the user provided one. - debug!( - message = "Building command in preperation to spawn", - ?executable, - ?compiled_command - ); let mut command = Command::new(executable); for arg in compiled_command { command.arg(&arg); @@ -119,5 +115,7 @@ pub fn compile_shell_command(settings: &Settings, command: &str) -> Command { command.envs(&settings.daemon.env_vars); } + debug!(message = "Prepared command before spawn", ?command); + command } From 83c792797141018da9760bed09ead61cba1479f7 Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Sun, 9 Feb 2025 17:48:27 +1000 Subject: [PATCH 12/14] fmt: lol, off by one bug in cargo fmt --- pueue/src/daemon/process_handler/mod.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pueue/src/daemon/process_handler/mod.rs b/pueue/src/daemon/process_handler/mod.rs index d142e71bc..564f82c52 100644 --- a/pueue/src/daemon/process_handler/mod.rs +++ b/pueue/src/daemon/process_handler/mod.rs @@ -24,9 +24,7 @@ macro_rules! ok_or_shutdown { Err(err) => { use pueue_lib::network::message::Shutdown; use $crate::daemon::process_handler::initiate_shutdown; - error!( - "Initializing graceful shutdown. Encountered error in TaskHandler: {err}" - ); + error!("Initializing graceful shutdown. Encountered error in TaskHandler: {err}"); initiate_shutdown($settings, $state, Shutdown::Emergency); return; } From f41b2953d7a428d3bd0014ce27e241f99996a050 Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Sun, 9 Feb 2025 18:03:59 +1000 Subject: [PATCH 13/14] refactor: renamed `prelude` to `internal_prelude` module --- pueue/src/client/client.rs | 2 +- pueue/src/client/commands/edit.rs | 2 +- pueue/src/client/commands/format_state.rs | 2 +- pueue/src/client/commands/local_follow.rs | 2 +- pueue/src/client/commands/mod.rs | 2 +- pueue/src/client/commands/restart.rs | 2 +- pueue/src/client/commands/wait.rs | 2 +- pueue/src/client/display/follow.rs | 2 +- pueue/src/client/display/log/remote.rs | 2 +- pueue/src/client/display/state.rs | 2 +- pueue/src/client/query/column_selection.rs | 2 +- pueue/src/client/query/filters.rs | 2 +- pueue/src/client/query/limit.rs | 2 +- pueue/src/client/query/mod.rs | 2 +- pueue/src/client/query/order_by.rs | 2 +- pueue/src/daemon/callbacks.rs | 2 +- pueue/src/daemon/mod.rs | 2 +- pueue/src/daemon/network/message_handler/log.rs | 2 +- pueue/src/daemon/network/socket.rs | 2 +- pueue/src/daemon/pid.rs | 2 +- pueue/src/daemon/process_handler/finish.rs | 2 +- pueue/src/daemon/process_handler/kill.rs | 2 +- pueue/src/daemon/process_handler/mod.rs | 2 +- pueue/src/daemon/process_handler/pause.rs | 2 +- pueue/src/daemon/process_handler/spawn.rs | 2 +- pueue/src/daemon/process_handler/start.rs | 2 +- pueue/src/daemon/state_helper.rs | 2 +- pueue/src/daemon/task_handler.rs | 2 +- pueue/src/lib.rs | 2 +- pueue/src/tracing.rs | 2 +- pueue_lib/src/aliasing.rs | 2 +- pueue_lib/src/lib.rs | 2 +- pueue_lib/src/log.rs | 2 +- pueue_lib/src/network/certificate.rs | 2 +- pueue_lib/src/network/protocol.rs | 2 +- pueue_lib/src/network/socket/unix.rs | 2 +- pueue_lib/src/process_helper/mod.rs | 2 +- pueue_lib/src/process_helper/unix.rs | 4 ++-- pueue_lib/src/settings.rs | 2 +- 39 files changed, 40 insertions(+), 40 deletions(-) diff --git a/pueue/src/client/client.rs b/pueue/src/client/client.rs index 389ff63af..a91c8fc59 100644 --- a/pueue/src/client/client.rs +++ b/pueue/src/client/client.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::env::{current_dir, vars}; use std::io::{self, stdout, Write}; diff --git a/pueue/src/client/commands/edit.rs b/pueue/src/client/commands/edit.rs index a15c5e82c..05a520bf6 100644 --- a/pueue/src/client/commands/edit.rs +++ b/pueue/src/client/commands/edit.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::collections::BTreeMap; use std::env; diff --git a/pueue/src/client/commands/format_state.rs b/pueue/src/client/commands/format_state.rs index f521cda55..936403e57 100644 --- a/pueue/src/client/commands/format_state.rs +++ b/pueue/src/client/commands/format_state.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::{ collections::BTreeMap, diff --git a/pueue/src/client/commands/local_follow.rs b/pueue/src/client/commands/local_follow.rs index ac48e4eba..dd5a52b63 100644 --- a/pueue/src/client/commands/local_follow.rs +++ b/pueue/src/client/commands/local_follow.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::path::Path; diff --git a/pueue/src/client/commands/mod.rs b/pueue/src/client/commands/mod.rs index f1089ddd8..dfaee7908 100644 --- a/pueue/src/client/commands/mod.rs +++ b/pueue/src/client/commands/mod.rs @@ -5,7 +5,7 @@ //! daemon, open some files on the filesystem, edit files and so on. //! All commands that cannot be simply handled by handling requests or using `pueue_lib`. -use crate::prelude::*; +use crate::internal_prelude::*; use pueue_lib::network::protocol::*; use pueue_lib::state::State; diff --git a/pueue/src/client/commands/restart.rs b/pueue/src/client/commands/restart.rs index 8a2695399..1621381fc 100644 --- a/pueue/src/client/commands/restart.rs +++ b/pueue/src/client/commands/restart.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use chrono::Local; use pueue_lib::network::message::*; diff --git a/pueue/src/client/commands/wait.rs b/pueue/src/client/commands/wait.rs index 772c47299..48384abea 100644 --- a/pueue/src/client/commands/wait.rs +++ b/pueue/src/client/commands/wait.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::collections::{HashMap, HashSet}; use std::time::Duration; diff --git a/pueue/src/client/display/follow.rs b/pueue/src/client/display/follow.rs index 071db4b02..83d4ac929 100644 --- a/pueue/src/client/display/follow.rs +++ b/pueue/src/client/display/follow.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::io::{self, Write}; use std::path::Path; diff --git a/pueue/src/client/display/log/remote.rs b/pueue/src/client/display/log/remote.rs index 49712d757..dadee5520 100644 --- a/pueue/src/client/display/log/remote.rs +++ b/pueue/src/client/display/log/remote.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::io; diff --git a/pueue/src/client/display/state.rs b/pueue/src/client/display/state.rs index a651e2dd3..cc0a73a51 100644 --- a/pueue/src/client/display/state.rs +++ b/pueue/src/client/display/state.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use pueue_lib::settings::Settings; use pueue_lib::state::{State, PUEUE_DEFAULT_GROUP}; diff --git a/pueue/src/client/query/column_selection.rs b/pueue/src/client/query/column_selection.rs index 14b611673..4d2060311 100644 --- a/pueue/src/client/query/column_selection.rs +++ b/pueue/src/client/query/column_selection.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use pest::iterators::Pair; diff --git a/pueue/src/client/query/filters.rs b/pueue/src/client/query/filters.rs index e63a45087..cec8071a6 100644 --- a/pueue/src/client/query/filters.rs +++ b/pueue/src/client/query/filters.rs @@ -1,5 +1,5 @@ #![allow(bindings_with_variant_name)] -use crate::prelude::*; +use crate::internal_prelude::*; use chrono::{DateTime, Local, NaiveDate, NaiveDateTime, NaiveTime, TimeDelta}; use pest::iterators::Pair; diff --git a/pueue/src/client/query/limit.rs b/pueue/src/client/query/limit.rs index f75f8863e..449213b20 100644 --- a/pueue/src/client/query/limit.rs +++ b/pueue/src/client/query/limit.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use pest::iterators::Pair; diff --git a/pueue/src/client/query/mod.rs b/pueue/src/client/query/mod.rs index 954415812..867569ee9 100644 --- a/pueue/src/client/query/mod.rs +++ b/pueue/src/client/query/mod.rs @@ -1,6 +1,6 @@ // Clippy generates a false-positive for an empty generated docstring in the query parser code. #![allow(clippy::empty_docs)] -use crate::prelude::*; +use crate::internal_prelude::*; use chrono::prelude::*; use pest::Parser; diff --git a/pueue/src/client/query/order_by.rs b/pueue/src/client/query/order_by.rs index 4b6a80738..be0f74c38 100644 --- a/pueue/src/client/query/order_by.rs +++ b/pueue/src/client/query/order_by.rs @@ -1,5 +1,5 @@ #![allow(bindings_with_variant_name)] -use crate::prelude::*; +use crate::internal_prelude::*; use pest::iterators::Pair; diff --git a/pueue/src/daemon/callbacks.rs b/pueue/src/daemon/callbacks.rs index af610fb88..ff04671bc 100644 --- a/pueue/src/daemon/callbacks.rs +++ b/pueue/src/daemon/callbacks.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::collections::HashMap; diff --git a/pueue/src/daemon/mod.rs b/pueue/src/daemon/mod.rs index f71827192..d4b5b5757 100644 --- a/pueue/src/daemon/mod.rs +++ b/pueue/src/daemon/mod.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::path::Path; use std::sync::{Arc, Mutex}; diff --git a/pueue/src/daemon/network/message_handler/log.rs b/pueue/src/daemon/network/message_handler/log.rs index b2f94d14b..cb4c505f6 100644 --- a/pueue/src/daemon/network/message_handler/log.rs +++ b/pueue/src/daemon/network/message_handler/log.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::collections::BTreeMap; use std::io::Read; diff --git a/pueue/src/daemon/network/socket.rs b/pueue/src/daemon/network/socket.rs index e92c23981..8e8641969 100644 --- a/pueue/src/daemon/network/socket.rs +++ b/pueue/src/daemon/network/socket.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::time::{Duration, SystemTime}; diff --git a/pueue/src/daemon/pid.rs b/pueue/src/daemon/pid.rs index d5264c63e..87822282b 100644 --- a/pueue/src/daemon/pid.rs +++ b/pueue/src/daemon/pid.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::fs::File; use std::io::{Read, Write}; diff --git a/pueue/src/daemon/process_handler/finish.rs b/pueue/src/daemon/process_handler/finish.rs index 80173061d..b7d2500da 100644 --- a/pueue/src/daemon/process_handler/finish.rs +++ b/pueue/src/daemon/process_handler/finish.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use chrono::Local; use pueue_lib::log::clean_log_handles; diff --git a/pueue/src/daemon/process_handler/kill.rs b/pueue/src/daemon/process_handler/kill.rs index a37d295d7..f326d6cc7 100644 --- a/pueue/src/daemon/process_handler/kill.rs +++ b/pueue/src/daemon/process_handler/kill.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use pueue_lib::{ network::message::{Signal, TaskSelection}, diff --git a/pueue/src/daemon/process_handler/mod.rs b/pueue/src/daemon/process_handler/mod.rs index 564f82c52..f1825d7ee 100644 --- a/pueue/src/daemon/process_handler/mod.rs +++ b/pueue/src/daemon/process_handler/mod.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use pueue_lib::network::message::{Shutdown, TaskSelection}; use pueue_lib::process_helper::{send_signal_to_child, ProcessAction}; diff --git a/pueue/src/daemon/process_handler/pause.rs b/pueue/src/daemon/process_handler/pause.rs index 55daef67e..cdba3c5c7 100644 --- a/pueue/src/daemon/process_handler/pause.rs +++ b/pueue/src/daemon/process_handler/pause.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use pueue_lib::network::message::TaskSelection; use pueue_lib::process_helper::ProcessAction; diff --git a/pueue/src/daemon/process_handler/spawn.rs b/pueue/src/daemon/process_handler/spawn.rs index de408003e..d23b3f6b6 100644 --- a/pueue/src/daemon/process_handler/spawn.rs +++ b/pueue/src/daemon/process_handler/spawn.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::io::Write; use std::process::Stdio; diff --git a/pueue/src/daemon/process_handler/start.rs b/pueue/src/daemon/process_handler/start.rs index 61343d644..a5cac3d43 100644 --- a/pueue/src/daemon/process_handler/start.rs +++ b/pueue/src/daemon/process_handler/start.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use pueue_lib::{ network::message::TaskSelection, process_helper::ProcessAction, settings::Settings, diff --git a/pueue/src/daemon/state_helper.rs b/pueue/src/daemon/state_helper.rs index c1ae1ad2f..e62a3648a 100644 --- a/pueue/src/daemon/state_helper.rs +++ b/pueue/src/daemon/state_helper.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::fs; use std::path::Path; diff --git a/pueue/src/daemon/task_handler.rs b/pueue/src/daemon/task_handler.rs index 318c2f4e0..65b9c6fe7 100644 --- a/pueue/src/daemon/task_handler.rs +++ b/pueue/src/daemon/task_handler.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::collections::BTreeMap; use std::time::Duration; diff --git a/pueue/src/lib.rs b/pueue/src/lib.rs index 76e662711..9730b6013 100644 --- a/pueue/src/lib.rs +++ b/pueue/src/lib.rs @@ -3,7 +3,7 @@ #![allow(clippy::assigning_clones)] #![doc = include_str!("../README.md")] -pub(crate) mod prelude { +pub(crate) mod internal_prelude { #[allow(unused_imports)] pub(crate) use tracing::{debug, error, info, trace, warn}; diff --git a/pueue/src/tracing.rs b/pueue/src/tracing.rs index 630da7572..3ffa9b17f 100644 --- a/pueue/src/tracing.rs +++ b/pueue/src/tracing.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use tracing::level_filters::LevelFilter; use tracing_subscriber::{ field::MakeExt, fmt::time::ChronoLocal, layer::SubscriberExt, util::SubscriberInitExt, diff --git a/pueue_lib/src/aliasing.rs b/pueue_lib/src/aliasing.rs index ce08a315d..00b2e1887 100644 --- a/pueue_lib/src/aliasing.rs +++ b/pueue_lib/src/aliasing.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::collections::HashMap; use std::fs::File; diff --git a/pueue_lib/src/lib.rs b/pueue_lib/src/lib.rs index 34678a1e6..3e4451c50 100644 --- a/pueue_lib/src/lib.rs +++ b/pueue_lib/src/lib.rs @@ -1,6 +1,6 @@ #![doc = include_str!("../README.md")] -pub(crate) mod prelude { +pub(crate) mod internal_prelude { #[allow(unused_imports)] pub use tracing::{debug, error, info, trace, warn}; } diff --git a/pueue_lib/src/log.rs b/pueue_lib/src/log.rs index 71f9183b4..f13776ccb 100644 --- a/pueue_lib/src/log.rs +++ b/pueue_lib/src/log.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::fs::{remove_file, File}; use std::io::{self, prelude::*, Read, SeekFrom}; diff --git a/pueue_lib/src/network/certificate.rs b/pueue_lib/src/network/certificate.rs index 47eb53deb..3dea16cb6 100644 --- a/pueue_lib/src/network/certificate.rs +++ b/pueue_lib/src/network/certificate.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::fs::File; use std::io::Write; diff --git a/pueue_lib/src/network/protocol.rs b/pueue_lib/src/network/protocol.rs index 8a6e97081..4e06d5c27 100644 --- a/pueue_lib/src/network/protocol.rs +++ b/pueue_lib/src/network/protocol.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::io::Cursor; diff --git a/pueue_lib/src/network/socket/unix.rs b/pueue_lib/src/network/socket/unix.rs index b77cbcab9..d69f6c68e 100644 --- a/pueue_lib/src/network/socket/unix.rs +++ b/pueue_lib/src/network/socket/unix.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::convert::TryFrom; use std::fs::{set_permissions, Permissions}; diff --git a/pueue_lib/src/process_helper/mod.rs b/pueue_lib/src/process_helper/mod.rs index 39d346259..279d9ce22 100644 --- a/pueue_lib/src/process_helper/mod.rs +++ b/pueue_lib/src/process_helper/mod.rs @@ -3,7 +3,7 @@ //! The submodules of this module represent the different implementations for //! each supported platform. //! Depending on the target, the respective platform is read and loaded into this scope. -use crate::prelude::*; +use crate::internal_prelude::*; use std::{collections::HashMap, process::Command}; diff --git a/pueue_lib/src/process_helper/unix.rs b/pueue_lib/src/process_helper/unix.rs index 013700a41..3d0c8b2c5 100644 --- a/pueue_lib/src/process_helper/unix.rs +++ b/pueue_lib/src/process_helper/unix.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; // We allow anyhow in here, as this is a module that'll be strictly used internally. // As soon as it's obvious that this is code is intended to be exposed to library users, we have to @@ -45,7 +45,7 @@ pub fn kill_child(task_id: usize, child: &mut GroupChild) -> std::io::Result<()> #[cfg(test)] mod tests { - use crate::prelude::*; + use crate::internal_prelude::*; use std::process::Command; use std::thread::sleep; diff --git a/pueue_lib/src/settings.rs b/pueue_lib/src/settings.rs index 912e20bca..d6096b5a8 100644 --- a/pueue_lib/src/settings.rs +++ b/pueue_lib/src/settings.rs @@ -1,4 +1,4 @@ -use crate::prelude::*; +use crate::internal_prelude::*; use std::collections::HashMap; use std::fs::{create_dir_all, File}; From b93e1899083c51966532960765d58916ceae4c28 Mon Sep 17 00:00:00 2001 From: Caleb Yates Date: Mon, 10 Feb 2025 11:40:57 +1000 Subject: [PATCH 14/14] fix: final patches before approval --- pueue/Cargo.toml | 1 - pueue_lib/src/process_helper/mod.rs | 15 --------------- 2 files changed, 16 deletions(-) diff --git a/pueue/Cargo.toml b/pueue/Cargo.toml index 63b10d8f8..9323d9ced 100644 --- a/pueue/Cargo.toml +++ b/pueue/Cargo.toml @@ -54,7 +54,6 @@ tracing-subscriber = { version = "0.3.19", features = [ assert_cmd = "2" assert_matches = "1" better-panic.workspace = true -color-eyre.workspace = true pretty_assertions.workspace = true rstest = "0.24" serde_yaml.workspace = true diff --git a/pueue_lib/src/process_helper/mod.rs b/pueue_lib/src/process_helper/mod.rs index 279d9ce22..cceb97bb2 100644 --- a/pueue_lib/src/process_helper/mod.rs +++ b/pueue_lib/src/process_helper/mod.rs @@ -84,21 +84,6 @@ pub fn compile_shell_command(settings: &Settings, command: &str) -> Command { } let executable = compiled_command.remove(0); - let metadata = std::fs::metadata(&executable); - if !std::path::PathBuf::from(&executable).is_file() { - trace!( - message = "Couldn't sanity check that the executale is a real file", - help = "This is expected if the executable is a shell builtin, an alias or in $PATH", - ?executable, - ?metadata - ); - } else { - trace!( - message = "Command sanity check has a file-like executable", - ?executable, - ?metadata - ); - } // Chain two `powershell` commands, one that sets the output encoding to utf8 and then the user provided one. let mut command = Command::new(executable);