Skip to content

Commit

Permalink
feat(js-connectors): enable metrics and query tracing (#4178)
Browse files Browse the repository at this point in the history
* feat(js-connectors): enable metrics and query tracing

* chore: nit on imports
  • Loading branch information
jkomyno committed Aug 30, 2023
1 parent 82dcdd6 commit ed0165d
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 14 deletions.
4 changes: 3 additions & 1 deletion quaint/src/connector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
//! querying interface.

mod connection_info;
pub(crate) mod metrics;
pub mod metrics;
mod queryable;
mod result_set;
#[cfg(any(feature = "mssql", feature = "postgresql", feature = "mysql"))]
Expand Down Expand Up @@ -42,3 +42,5 @@ pub use transaction::*;
#[cfg(any(feature = "sqlite", feature = "mysql", feature = "postgresql"))]
#[allow(unused_imports)]
pub(crate) use type_identifier::*;

pub use self::metrics::query;
7 changes: 1 addition & 6 deletions quaint/src/connector/metrics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,7 @@ use tracing::{info_span, Instrument};
use crate::ast::{Params, Value};
use std::{future::Future, time::Instant};

pub(crate) async fn query<'a, F, T, U>(
tag: &'static str,
query: &'a str,
params: &'a [Value<'_>],
f: F,
) -> crate::Result<T>
pub async fn query<'a, F, T, U>(tag: &'static str, query: &'a str, params: &'a [Value<'_>], f: F) -> crate::Result<T>
where
F: FnOnce() -> U + 'a,
U: Future<Output = crate::Result<T>>,
Expand Down
25 changes: 18 additions & 7 deletions query-engine/js-connectors/src/queryable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ use async_trait::async_trait;
use napi::{Env, JsObject};
use psl::datamodel_connector::Flavour;
use quaint::{
connector::{IsolationLevel, Transaction},
connector::{
metrics::{self},
IsolationLevel, Transaction,
},
error::{Error, ErrorKind},
prelude::{Query as QuaintQuery, Queryable as QuaintQueryable, ResultSet, TransactionCapable},
visitor::{self, Visitor},
Expand Down Expand Up @@ -56,8 +59,10 @@ impl QuaintQueryable for JsBaseQueryable {
}

async fn query_raw(&self, sql: &str, params: &[Value<'_>]) -> quaint::Result<ResultSet> {
let span = info_span!("js:query", user_facing = true);
self.do_query_raw(sql, params).instrument(span).await
metrics::query("js.query_raw", sql, params, move || async move {
self.do_query_raw(sql, params).await
})
.await
}

async fn query_raw_typed(&self, sql: &str, params: &[Value<'_>]) -> quaint::Result<ResultSet> {
Expand All @@ -70,17 +75,23 @@ impl QuaintQueryable for JsBaseQueryable {
}

async fn execute_raw(&self, sql: &str, params: &[Value<'_>]) -> quaint::Result<u64> {
let span = info_span!("js:query", user_facing = true);
self.do_execute_raw(sql, params).instrument(span).await
metrics::query("js.execute_raw", sql, params, move || async move {
self.do_execute_raw(sql, params).await
})
.await
}

async fn execute_raw_typed(&self, sql: &str, params: &[Value<'_>]) -> quaint::Result<u64> {
self.execute_raw(sql, params).await
}

async fn raw_cmd(&self, cmd: &str) -> quaint::Result<()> {
self.execute_raw(cmd, &[]).await?;
Ok(())
let params = &[];
metrics::query("js.raw_cmd", cmd, params, move || async move {
self.do_execute_raw(cmd, params).await?;
Ok(())
})
.await
}

async fn version(&self) -> quaint::Result<Option<String>> {
Expand Down

0 comments on commit ed0165d

Please sign in to comment.