Add a conventional per-request OTel server span using the standard tracing-actix-web middleware (TracingLogger) as the outermost middleware, so the whole request lives under one root span and an incoming W3C traceparent is extracted onto it via the global text-map propagator (installed in #138). extract_context_from_request now sources the operation span's parent from that root span (tracing::Span::current().context()) instead of re-parsing the header, so per-handler operation spans nest under the root span as one trace tree rather than duplicating it as a sibling. Header parsing remains as a fallback for handlers invoked without the middleware (tests). The literal per-handler span boilerplate is intentionally NOT removed here; it becomes #[instrument] in the LLM (#140) and DAO (#141) migrations, where the &Context threading disappears entirely. tests/otel_traceparent.rs pins the behavior end-to-end: an incoming traceparent's trace_id propagates to the request, the root span is parented on the caller's (remote) span, and the operation span nests under the root span rather than alongside it.
84 lines
2.7 KiB
TOML
84 lines
2.7 KiB
TOML
[package]
|
|
name = "image-api"
|
|
version = "1.5.0"
|
|
authors = ["Cameron Cordes <cameronc.dev@gmail.com>"]
|
|
edition = "2024"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
|
|
[profile.dev]
|
|
debug = "line-tables-only"
|
|
|
|
[dependencies]
|
|
actix = "0.13.1"
|
|
actix-web = "4"
|
|
actix-rt = "2.6"
|
|
tokio = { version = "1.42.0", features = ["default", "process", "sync", "macros", "rt-multi-thread"] }
|
|
actix-files = "0.6"
|
|
actix-cors = "0.7"
|
|
actix-multipart = "0.7.2"
|
|
actix-governor = "0.5"
|
|
futures = "0.3.5"
|
|
jsonwebtoken = "9.3.0"
|
|
serde = "1"
|
|
serde_json = "1"
|
|
diesel = { version = "2.2.10", features = ["sqlite", "64-column-tables"] }
|
|
libsqlite3-sys = "0.35"
|
|
diesel_migrations = "2.2.0"
|
|
chrono = "0.4"
|
|
clap = { version = "4.5", features = ["derive"] }
|
|
dotenv = "0.15"
|
|
bcrypt = "0.17.1"
|
|
image = { version = "0.25.5", default-features = false, features = ["jpeg", "png", "rayon", "webp", "tiff", "avif"] }
|
|
infer = "0.16"
|
|
walkdir = "2.4.0"
|
|
rayon = "1.5"
|
|
path-absolutize = "3.1"
|
|
log = "0.4"
|
|
env_logger = "0.11.5"
|
|
# default-features = false keeps the `tracing-log` bridge OFF so the console
|
|
# fmt layer prints tracing spans only; `log` records stay on their existing
|
|
# path (env_logger in debug, OTel logs in release) without double-printing.
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", default-features = false, features = ["std", "registry", "env-filter", "fmt", "ansi"] }
|
|
tracing-opentelemetry = "0.32"
|
|
tracing-actix-web = { version = "0.7", features = ["opentelemetry_0_31"] }
|
|
actix-web-prom = "0.9.0"
|
|
prometheus = "0.13"
|
|
lazy_static = "1.5"
|
|
anyhow = "1.0"
|
|
rand = "0.8.5"
|
|
opentelemetry = { version = "0.31.0", features = ["default", "metrics", "tracing"] }
|
|
opentelemetry_sdk = { version = "0.31.0", features = ["default", "rt-tokio-current-thread", "metrics", "testing"] }
|
|
opentelemetry-otlp = { version = "0.31.0", features = ["default", "metrics", "tracing", "grpc-tonic"] }
|
|
opentelemetry-stdout = "0.31.0"
|
|
opentelemetry-appender-log = "0.31.0"
|
|
tempfile = "3.20.0"
|
|
regex = "1.11.1"
|
|
exif = { package = "kamadak-exif", version = "0.6.1" }
|
|
reqwest = { version = "0.12", features = ["json", "stream", "multipart"] }
|
|
async-stream = "0.3"
|
|
tokio-util = { version = "0.7", features = ["io"] }
|
|
bytes = "1"
|
|
urlencoding = "2.1"
|
|
zerocopy = "0.8"
|
|
ical = "0.11"
|
|
scraper = "0.20"
|
|
base64 = "0.22"
|
|
blake3 = "1.5"
|
|
image_hasher = "3.0"
|
|
bk-tree = "0.5"
|
|
async-trait = "0.1"
|
|
indicatif = "0.17"
|
|
uuid = { version = "1.10", features = ["v4", "serde"] }
|
|
chrono-tz = "0.10"
|
|
tzf-rs = "2.1.2"
|
|
|
|
# Windows lacks system sqlite3, so re-enable the bundled C build there.
|
|
# Linux/macOS use the system library (faster builds, smaller binary).
|
|
[target.'cfg(windows)'.dependencies]
|
|
libsqlite3-sys = { version = "0.35", features = ["bundled"] }
|