Last one of the year! С наступающим)
Fixes:
* users/wpcarro: remove use-package from emacs packages (it has been built-in
for a while now)
* users/sterni: the same thing
* users/aspen: remove `coz`, forwardport `gdmap` from stable
* users/flokli: dropped corneish_zen firmware from CI
This firmware depends on a non-reproducible FOD which, when updated, causes
build failures. We have worked around this repeatedly, but it needs to be
fixed properly.
* tvix: regenerate Go protobufs
* tvix: address new clippy lints
* tvix/{castore,store,build}-go: update grpc/protobuf libraries
* tvix/eval: formatting fixes
* 3p/overlays/tvl: work around GCC 14 -Werrors
Change-Id: Ice5948ca7780192fb7d2abc6a48971fb875f03c9
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12933
Reviewed-by: tazjin <tazjin@tvl.su>
Reviewed-by: sterni <sternenseemann@systemli.org>
Reviewed-by: aspen <root@gws.fyi>
Autosubmit: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
48 lines
1.9 KiB
Rust
48 lines
1.9 KiB
Rust
#[cfg(feature = "otlp")]
|
|
use opentelemetry::{global, propagation::Extractor};
|
|
#[cfg(feature = "otlp")]
|
|
use tracing_opentelemetry::OpenTelemetrySpanExt;
|
|
|
|
// TODO: accept_trace can be shared with tonic, as soon as tonic upstream has a release with
|
|
// support for axum07. Latest master already has support for axum07 but there is not release yet:
|
|
// https://github.com/hyperium/tonic/pull/1740
|
|
|
|
/// Trace context propagation: associate the current span with the otlp trace of the given request,
|
|
/// if any and valid. This only sets the parent trace if the otlp feature is also enabled.
|
|
pub fn accept_trace<B>(request: axum::http::Request<B>) -> axum::http::Request<B> {
|
|
// we only extract and set a parent trace if otlp feature is enabled, otherwise this feature is
|
|
// an noop and we return the request as is
|
|
#[cfg(feature = "otlp")]
|
|
{
|
|
// Current context, if no or invalid data is received.
|
|
let parent_context = global::get_text_map_propagator(|propagator| {
|
|
propagator.extract(&HeaderExtractor(request.headers()))
|
|
});
|
|
tracing::Span::current().set_parent(parent_context);
|
|
}
|
|
request
|
|
}
|
|
|
|
/// Helper for extracting headers from HTTP Requests. This is used for OpenTelemetry context
|
|
/// propagation over HTTP.
|
|
#[cfg(feature = "otlp")]
|
|
struct HeaderExtractor<'a>(&'a axum::http::HeaderMap);
|
|
|
|
#[cfg(feature = "otlp")]
|
|
impl Extractor for HeaderExtractor<'_> {
|
|
/// Get a value for a key from the HeaderMap. If the value is not valid ASCII, returns None.
|
|
fn get(&self, key: &str) -> Option<&str> {
|
|
self.0.get(key).and_then(|v| {
|
|
let s = v.to_str();
|
|
if let Err(ref error) = s {
|
|
tracing::warn!(%error, ?v, "cannot convert header value to ASCII")
|
|
};
|
|
s.ok()
|
|
})
|
|
}
|
|
|
|
/// Collect all the keys from the HeaderMap.
|
|
fn keys(&self) -> Vec<&str> {
|
|
self.0.keys().map(|k| k.as_str()).collect()
|
|
}
|
|
}
|