Skip to content

Commit 124ed8e

Browse files
committed
better trace event levels, otel.name attribute
1 parent 0a83179 commit 124ed8e

File tree

4 files changed

+87
-17
lines changed

4 files changed

+87
-17
lines changed

tokio-postgres/src/client.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::simple_query::SimpleQueryStream;
99
#[cfg(feature = "runtime")]
1010
use crate::tls::MakeTlsConnect;
1111
use crate::tls::TlsConnect;
12-
use crate::trace::make_span;
12+
use crate::trace::{make_span, SpanOperation};
1313
use crate::types::{Oid, ToSql, Type};
1414
#[cfg(feature = "runtime")]
1515
use crate::Socket;
@@ -258,8 +258,7 @@ impl Client {
258258
query: &str,
259259
parameter_types: &[Type],
260260
) -> Result<Statement, Error> {
261-
let span = make_span(&self.inner);
262-
span.record("db.operation", "prepare");
261+
let span = make_span(&self.inner, SpanOperation::Prepare);
263262

264263
prepare::prepare(&self.inner, query, parameter_types)
265264
.instrument(span)

tokio-postgres/src/prepare.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::client::InnerClient;
22
use crate::codec::FrontendMessage;
33
use crate::connection::RequestMessages;
44
use crate::error::SqlState;
5-
use crate::trace::make_span;
5+
use crate::trace::{make_span, SpanOperation};
66
use crate::types::{Field, Kind, Oid, Type};
77
use crate::{query, slice_iter};
88
use crate::{Column, Error, Statement};
@@ -116,8 +116,7 @@ fn prepare_rec<'a>(
116116
query: &'a str,
117117
types: &'a [Type],
118118
) -> Pin<Box<dyn Future<Output = Result<Statement, Error>> + 'a + Send>> {
119-
let span = make_span(client);
120-
span.record("db.operation", "prepare");
119+
let span = make_span(client, SpanOperation::Prepare);
121120
Box::pin(prepare(client, query, types).instrument(span))
122121
}
123122

tokio-postgres/src/query.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::client::{InnerClient, Responses};
22
use crate::codec::FrontendMessage;
33
use crate::connection::RequestMessages;
4-
use crate::trace::make_span;
4+
use crate::trace::{make_span, SpanOperation};
55
use crate::types::{BorrowToSql, IsNull};
66
use crate::{Error, Portal, Row, Statement};
77
use bytes::{Bytes, BytesMut};
@@ -84,7 +84,7 @@ where
8484
I: IntoIterator<Item = P>,
8585
I::IntoIter: ExactSizeIterator,
8686
{
87-
let span = make_span(client);
87+
let span = make_span(client, SpanOperation::Query);
8888
span.record("db.operation", "query");
8989

9090
let buf = encode_with_logs(client, &span, &statement, params)?;
@@ -108,9 +108,8 @@ pub async fn query_portal(
108108
portal: &Portal,
109109
max_rows: i32,
110110
) -> Result<RowStream, Error> {
111-
let span = make_span(client);
111+
let span = make_span(client, SpanOperation::Portal);
112112
span.record("db.statement", portal.statement().query());
113-
span.record("db.operation", "portal");
114113

115114
let buf = client.with_buf(|buf| {
116115
frontend::execute(portal.name(), max_rows, buf).map_err(Error::encode)?;
@@ -152,8 +151,7 @@ where
152151
I: IntoIterator<Item = P>,
153152
I::IntoIter: ExactSizeIterator,
154153
{
155-
let span = make_span(client);
156-
span.record("db.operation", "execute");
154+
let span = make_span(client, SpanOperation::Execute);
157155

158156
let buf = encode_with_logs(client, &span, &statement, params)?;
159157

tokio-postgres/src/trace.rs

Lines changed: 79 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,83 @@
1-
use tracing::{field::Empty, Span};
1+
use tracing::{field::Empty, Level, Span};
22

33
use crate::client::{Addr, InnerClient};
44

5-
pub(crate) fn make_span(client: &InnerClient) -> Span {
6-
let span = tracing::debug_span!("query",
5+
pub(crate) enum SpanOperation {
6+
Query,
7+
Portal,
8+
Execute,
9+
Prepare,
10+
}
11+
12+
impl SpanOperation {
13+
const fn name(&self) -> &'static str {
14+
match self {
15+
SpanOperation::Query => "query",
16+
SpanOperation::Portal => "portal",
17+
SpanOperation::Execute => "execute",
18+
SpanOperation::Prepare => "prepare",
19+
}
20+
}
21+
22+
const fn level(&self) -> Level {
23+
match self {
24+
SpanOperation::Query => Level::DEBUG,
25+
SpanOperation::Portal => Level::DEBUG,
26+
SpanOperation::Execute => Level::DEBUG,
27+
SpanOperation::Prepare => Level::TRACE,
28+
}
29+
}
30+
}
31+
32+
macro_rules! span_dynamic_lvl {
33+
( $(target: $target:expr,)? $(parent: $parent:expr,)? $lvl:expr, $($tt:tt)* ) => {
34+
match $lvl {
35+
tracing::Level::ERROR => {
36+
tracing::span!(
37+
$(target: $target,)?
38+
$(parent: $parent,)?
39+
tracing::Level::ERROR,
40+
$($tt)*
41+
)
42+
}
43+
tracing::Level::WARN => {
44+
tracing::span!(
45+
$(target: $target,)?
46+
$(parent: $parent,)?
47+
tracing::Level::WARN,
48+
$($tt)*
49+
)
50+
}
51+
tracing::Level::INFO => {
52+
tracing::span!(
53+
$(target: $target,)?
54+
$(parent: $parent,)?
55+
tracing::Level::INFO,
56+
$($tt)*
57+
)
58+
}
59+
tracing::Level::DEBUG => {
60+
tracing::span!(
61+
$(target: $target,)?
62+
$(parent: $parent,)?
63+
tracing::Level::DEBUG,
64+
$($tt)*
65+
)
66+
}
67+
tracing::Level::TRACE => {
68+
tracing::span!(
69+
$(target: $target,)?
70+
$(parent: $parent,)?
71+
tracing::Level::TRACE,
72+
$($tt)*
73+
)
74+
}
75+
}
76+
};
77+
}
78+
79+
pub(crate) fn make_span(client: &InnerClient, operation: SpanOperation) -> Span {
80+
let span = span_dynamic_lvl!(operation.level(), "query",
781
db.system = "postgresql",
882
server.address = Empty,
983
server.socket.address = Empty,
@@ -12,13 +86,13 @@ pub(crate) fn make_span(client: &InnerClient) -> Span {
1286
network.transport = Empty,
1387
db.name = %client.db_name(),
1488
db.user = %client.db_user(),
15-
otel.name = %format!("psql {}", client.db_name()),
89+
otel.name = %format!("PSQL {} {}", operation.name(), client.db_name()),
1690
otel.kind = "Client",
1791

1892
// to set when output
1993
otel.status_code = Empty,
2094
exception.message = Empty,
21-
db.operation = Empty,
95+
db.operation = operation.name(),
2296

2397
// for queries
2498
db.statement = Empty,

0 commit comments

Comments
 (0)