1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-11-20 12:02:22 +03:00

Better OpenTelemetry tracer

This commit is contained in:
Quentin Gliech
2022-02-24 16:03:37 +01:00
parent 4c31f8d831
commit b81f4caace
16 changed files with 712 additions and 224 deletions

View File

@@ -29,9 +29,15 @@ use bytes::Bytes;
use futures_util::{FutureExt, TryFutureExt};
use http::{Request, Response};
use http_body::{combinators::BoxBody, Body};
use hyper::{client::HttpConnector, Client};
use hyper::{
client::{connect::dns::GaiResolver, HttpConnector},
Client,
};
use hyper_rustls::{ConfigBuilderExt, HttpsConnector, HttpsConnectorBuilder};
use layers::client::ClientResponse;
use layers::{
client::ClientResponse,
otel::{TraceDns, TraceLayer},
};
use thiserror::Error;
use tokio::{sync::OnceCell, task::JoinError};
use tower::{util::BoxCloneService, ServiceBuilder, ServiceExt};
@@ -43,7 +49,7 @@ mod layers;
pub use self::{
ext::ServiceExt as HttpServiceExt,
future_service::FutureService,
layers::{client::ClientLayer, json::JsonResponseLayer, server::ServerLayer},
layers::{client::ClientLayer, json::JsonResponseLayer, otel, server::ServerLayer},
};
pub(crate) type BoxError = Box<dyn std::error::Error + Send + Sync>;
@@ -71,13 +77,17 @@ pub enum ClientInitError {
static TLS_CONFIG: OnceCell<rustls::ClientConfig> = OnceCell::const_new();
async fn make_base_client<B, E>(
) -> Result<hyper::Client<HttpsConnector<HttpConnector>, B>, ClientInitError>
) -> Result<hyper::Client<HttpsConnector<HttpConnector<TraceDns<GaiResolver>>>, B>, ClientInitError>
where
B: http_body::Body<Data = Bytes, Error = E> + Send + 'static,
E: Into<BoxError>,
{
// TODO: we could probably hook a tracing DNS resolver there
let mut http = HttpConnector::new();
// Trace DNS requests
let resolver = ServiceBuilder::new()
.layer(TraceLayer::dns())
.service(GaiResolver::new());
let mut http = HttpConnector::new_with_resolver(resolver);
http.enforce_http(false);
let tls_config = TLS_CONFIG