From 2159c68688a69af83e1c8d07cf17c40f0c315566 Mon Sep 17 00:00:00 2001 From: "Nathan.fooo" <86001920+appflowy@users.noreply.github.com> Date: Fri, 5 Jan 2024 09:06:08 +0800 Subject: [PATCH] chore: add client api version (#248) * chore: add client api version * chore: update * chore: update * chore: log client version --- libs/client-api/src/http.rs | 2 ++ src/middleware/request_id.rs | 31 +++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/libs/client-api/src/http.rs b/libs/client-api/src/http.rs index ffa942a3..6880ffc6 100644 --- a/libs/client-api/src/http.rs +++ b/libs/client-api/src/http.rs @@ -52,6 +52,7 @@ use gotrue_entity::dto::SignUpResponse::{Authenticated, NotAuthenticated}; use gotrue_entity::dto::{GotrueTokenResponse, UpdateGotrueUserParams, User}; use realtime_entity::realtime_proto::HttpRealtimeMessage; +pub const CLIENT_API_VERSION: &str = "0.0.2"; /// `Client` is responsible for managing communication with the GoTrue API and cloud storage. /// /// It provides methods to perform actions like signing in, signing out, refreshing tokens, @@ -1170,6 +1171,7 @@ impl Client { let request_builder = self .cloud_client .request(method, url) + .header("client-version", CLIENT_API_VERSION) .bearer_auth(access_token); Ok(request_builder) } diff --git a/src/middleware/request_id.rs b/src/middleware/request_id.rs index 43df4ce0..02a7f343 100644 --- a/src/middleware/request_id.rs +++ b/src/middleware/request_id.rs @@ -59,10 +59,12 @@ where request_id }); - let span = match get_payload_size(&req) { - Some(size) => span!(Level::INFO, "request", request_id = %request_id, payload_size = size), - None => span!(Level::INFO, "request", request_id = %request_id), - }; + let client_info = get_client_info(&req); + let span = span!(Level::INFO, "request", + request_id = %request_id, + client_version = client_info.client_version, + payload_size = client_info.payload_size + ); let fut = self.service.call(req); Box::pin(async move { @@ -93,10 +95,27 @@ pub fn get_request_id(req: &ServiceRequest) -> Option { } } -fn get_payload_size(req: &ServiceRequest) -> Option { - req +#[inline] +fn get_client_info(req: &ServiceRequest) -> ClientInfo { + let payload_size = req .headers() .get("content-length") .and_then(|val| val.to_str().ok()) .and_then(|val| val.parse::().ok()) + .unwrap_or_default(); + + let client_version = req + .headers() + .get("client-version") + .and_then(|val| val.to_str().ok()); + + ClientInfo { + payload_size, + client_version, + } +} + +struct ClientInfo<'a> { + payload_size: usize, + client_version: Option<&'a str>, }