diff --git a/Cargo.lock b/Cargo.lock index 2be2e6a..be66a65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,9 +21,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4fb03b18c988b0944792e2538c7c1a4b32d3019214e2a734846e45207743e" +checksum = "a5885cb81a0d4d0d322864bea1bb6c2a8144626b4fdc625d4c51eba197e7797a" dependencies = [ "actix-codec", "actix-rt", @@ -79,9 +79,9 @@ dependencies = [ [[package]] name = "actix-rt" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf3f2183be1241ed4dd22611850b85d38de0b08a09f1f7bcccbd0809084b359" +checksum = "7ea16c295198e958ef31930a6ef37d0fb64e9ca3b6116e6b93a8bdae96ee1000" dependencies = [ "actix-macros", "futures-core", @@ -90,20 +90,20 @@ dependencies = [ [[package]] name = "actix-server" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9e7472ac180abb0a8e592b653744345983a7a14f44691c8394a799d0df4dbbf" +checksum = "0da34f8e659ea1b077bb4637948b815cd3768ad5a188fdcd74ff4d84240cd824" dependencies = [ "actix-rt", "actix-service", "actix-utils", "futures-core", "futures-util", - "log", "mio", "num_cpus", "socket2", "tokio", + "tracing", ] [[package]] @@ -224,9 +224,9 @@ checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" [[package]] name = "async-stream" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" +checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" dependencies = [ "async-stream-impl", "futures-core", @@ -234,9 +234,9 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" +checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" dependencies = [ "proc-macro2", "quote", @@ -424,9 +424,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ "libc", ] @@ -442,9 +442,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" dependencies = [ "cfg-if", "crossbeam-utils", @@ -452,9 +452,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ "cfg-if", "lazy_static", @@ -657,14 +657,14 @@ checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.10.2+wasi-snapshot-preview1", ] [[package]] name = "h2" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b" dependencies = [ "bytes", "fnv", @@ -758,9 +758,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.17" +version = "0.14.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" dependencies = [ "bytes", "futures-channel", @@ -860,9 +860,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.119" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" +checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" [[package]] name = "local-channel" @@ -893,9 +893,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ "cfg-if", ] @@ -962,14 +962,15 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2" +checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" dependencies = [ "libc", "log", "miow", "ntapi", + "wasi 0.11.0+wasi-snapshot-preview1", "winapi", ] @@ -990,13 +991,12 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "nom" -version = "7.1.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] @@ -1072,9 +1072,9 @@ dependencies = [ [[package]] name = "num_threads" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ba99ba6393e2c3734791401b66902d981cb03bf190af674ca69949b6d5fb15" +checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" dependencies = [ "libc", ] @@ -1171,7 +1171,7 @@ dependencies = [ [[package]] name = "pict-rs-proxy" -version = "0.3.0-rc.2" +version = "0.3.0-rc.3" dependencies = [ "actix-rt", "actix-web", @@ -1325,9 +1325,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "b4af2ec4714533fcdf07e886f17025ace8b997b9ce51204ee69b6da831c3da57" dependencies = [ "proc-macro2", ] @@ -1590,9 +1590,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54" dependencies = [ "proc-macro2", "quote", @@ -1653,9 +1653,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004cbc98f30fa233c61a38bc77e96a9106e65c88f2d3bef182ae952027e5753d" +checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" dependencies = [ "itoa", "libc", @@ -1835,9 +1835,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f" +checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" dependencies = [ "cfg-if", "log", @@ -1863,9 +1863,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716" +checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" dependencies = [ "proc-macro2", "quote", @@ -1891,9 +1891,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" +checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" dependencies = [ "lazy_static", "valuable", @@ -2061,6 +2061,12 @@ version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" version = "0.2.79" @@ -2117,9 +2123,9 @@ checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" [[package]] name = "which" -version = "4.2.4" +version = "4.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5a7e487e921cf220206864a94a89b6c6905bfc19f1057fa26a4cb360e5c1d2" +checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" dependencies = [ "either", "lazy_static", diff --git a/Cargo.toml b/Cargo.toml index 32367a9..6eabd06 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "pict-rs-proxy" description = "A simple web frontend for pict-rs" -version = "0.3.0-rc.2" +version = "0.3.0-rc.3" authors = ["asonix "] license = "AGPL-3.0" readme = "README.md" @@ -11,8 +11,7 @@ edition = "2021" build = "src/build.rs" [features] -console = ["console-subscriber"] -default = ["console"] +default = [] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -21,7 +20,7 @@ actix-rt = "2.6.0" actix-web = { version = "4.0.0", default-features = false } anyhow = "1.0" awc = { version = "3.0.0", default-features = false } -console-subscriber = { version = "0.1", optional = true } +console-subscriber = "0.1" dotenv = "0.15.0" mime = "0.3" minify-html = "0.8.0" diff --git a/README.md b/README.md index cb3d160..89accd2 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ _a demo frontend for pict-rs supporting noscript_ ## Usage ### Running ``` -pict-rs-proxy 0.1.0 +pict-rs-proxy 0.3.0-rc.3 USAGE: pict-rs-proxy [OPTIONS] @@ -17,13 +17,20 @@ FLAGS: -V, --version Prints version information OPTIONS: - -a, --addr The address and port the server binds to [env: PICTRS_PROXY_ADDR=] [default: - 0.0.0.0:8081] - -d, --domain The scheme, domain, and optional port of the pict-rs proxy server [env: - PICTRS_PROXY_DOMAIN=] [default: http://localhost:8081] - -u, --upstream The url of the upstream pict-rs server [env: PICTRS_PROXY_UPSTREAM=] [default: - http://localhost:8080] + -a, --addr + The address and port the server binds to [env: PICTRS_PROXY_ADDR=] [default: 0.0.0.0:8081] + --console-event-buffer-size + Number of events to buffer for the console subscriber. When unset, console will be disabled [env: + PICTRS_PROXY_CONSOLE_BUFFER_SIZE=] + -d, --domain + The scheme, domain, and optional port of the pict-rs proxy server [env: PICTRS_PROXY_DOMAIN=] [default: + http://localhost:8081] + -o, --opentelemetry-url + URL of OpenTelemetry Collector [env: PICTRS_PROXY_OPENTELEMETRY_URL=] + + -u, --upstream + The url of the upstream pict-rs server [env: PICTRS_PROXY_UPSTREAM=] [default: http://localhost:8080] ``` #### Examples diff --git a/src/main.rs b/src/main.rs index e84be96..225a2cf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,7 +10,6 @@ use actix_web::{ web, App, HttpRequest, HttpResponse, HttpResponseBuilder, HttpServer, ResponseError, }; use awc::Client; -#[cfg(feature = "console")] use console_subscriber::ConsoleLayer; use once_cell::sync::Lazy; use opentelemetry::{ @@ -29,7 +28,8 @@ use tracing_awc::Tracing; use tracing_error::{ErrorLayer, SpanTrace}; use tracing_log::LogTracer; use tracing_subscriber::{ - filter::Targets, fmt::format::FmtSpan, layer::SubscriberExt, Layer, Registry, + filter::Targets, fmt::format::FmtSpan, layer::SubscriberExt, registry::LookupSpan, Layer, + Registry, }; use url::Url; @@ -67,6 +67,13 @@ struct Config { )] domain: Url, + #[structopt( + long, + env = "PICTRS_PROXY_CONSOLE_BUFFER_SIZE", + help = "Number of events to buffer for the console subscriber. When unset, console will be disabled" + )] + console_event_buffer_size: Option, + #[structopt( short, long, @@ -614,6 +621,7 @@ fn render( fn init_tracing( service_name: &'static str, opentelemetry_url: Option<&Url>, + console_event_buffer_size: Option, ) -> Result<(), anyhow::Error> { opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new()); @@ -627,20 +635,35 @@ fn init_tracing( .with_span_events(FmtSpan::NEW | FmtSpan::CLOSE) .with_filter(targets.clone()); - #[cfg(feature = "console")] - let console_layer = ConsoleLayer::builder() - .with_default_env() - .server_addr(([0, 0, 0, 0], 6669)) - .event_buffer_capacity(1024 * 1024) - .spawn(); - let subscriber = Registry::default() .with(format_layer) .with(ErrorLayer::default()); - #[cfg(feature = "console")] - let subscriber = subscriber.with(console_layer); + if let Some(buffer_size) = console_event_buffer_size { + let console_layer = ConsoleLayer::builder() + .with_default_env() + .server_addr(([0, 0, 0, 0], 6669)) + .event_buffer_capacity(buffer_size) + .spawn(); + let subscriber = subscriber.with(console_layer); + + init_subscriber(subscriber, targets, opentelemetry_url, service_name) + } else { + init_subscriber(subscriber, targets, opentelemetry_url, service_name) + } +} + +fn init_subscriber( + subscriber: S, + targets: Targets, + opentelemetry_url: Option<&Url>, + service_name: &'static str, +) -> anyhow::Result<()> +where + S: SubscriberExt + Send + Sync, + for<'a> S: LookupSpan<'a>, +{ if let Some(url) = opentelemetry_url { let tracer = opentelemetry_otlp::new_pipeline() @@ -673,7 +696,11 @@ fn init_tracing( async fn main() -> Result<(), anyhow::Error> { dotenv::dotenv().ok(); - init_tracing("pict-rs-proxy", CONFIG.opentelemetry_url.as_ref())?; + init_tracing( + "pict-rs-proxy", + CONFIG.opentelemetry_url.as_ref(), + CONFIG.console_event_buffer_size, + )?; HttpServer::new(move || { let client = Client::builder()