forked from tokio-rs/tokio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
instrument.rs
124 lines (118 loc) · 3.55 KB
/
instrument.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
cfg_trace! {
macro_rules! instrument_resource {
(
pin_project,
$(#[$meta:meta])*
// pin project gets confused when this is a `vis`
// and does not infer the projection visibility correctly
$visibility:ident struct $struct_name:ident {
$(
$(#[$field_attrs:ident])*
$field_vis:vis $field_name:ident : $field_type:ty
),*$(,)+
}
) => {
pin_project_lite::pin_project! {
$(#[$meta])*
$visibility struct $struct_name {
resource_span: tracing::Span,
$(
$(#[$field_attrs])*
$field_vis $field_name : $field_type,
)*
}
}
};
(
$(#[$meta:meta])*
$vis:vis struct $struct_name:ident {
$(
$(#[$field_attrs:ident])*
$field_vis:vis $field_name:ident : $field_type:ty
),*$(,)+
}
) => {
$(#[$meta])*
$vis struct $struct_name {
resource_span: tracing::Span,
$(
$(#[$field_attrs])*
$field_vis $field_name : $field_type,
)*
}
}
}
macro_rules! new_instrumented_resource {
(
$resource_type:literal,
$struct:ident {
$($field:ident),* $(,)* // Handle non shorthand initialization
}
) => {
$struct {
resource_span: tracing::trace_span!(
"resource",
concrete_type = stringify!($struct),
kind = $resource_type
),
$(
$field,
)*
}
};
}
macro_rules! instrument_resource_op {
(
$( #[$attr:meta] )*
$vis:vis fn $name:ident(&mut $self: ident, $($arg_name:ident : $arg_ty:ty),* $(,)*) $(-> $ret:ty)?
$body:block
) => {
$vis fn $name(&mut $self, $($arg_name : $arg_ty,)*) $(-> $ret)? {
let _resource_span_guard = $self.resource_span.enter();
$body
}
};
(
$( #[$attr:meta] )*
$vis:vis fn $name:ident(&$self: ident, $($arg_name:ident : $arg_ty:ty),* $(,)*) $(-> $ret:ty)?
$body:block
) => {
$vis fn $name(&$self, $($arg_name : $arg_ty,)*) $(-> $ret)? {
let _resource_span_guard = $self.resource_span.enter();
$body
}
};
(
$( #[$attr:meta] )*
$vis:vis fn $name:ident($self:tt : $self_type:ty, $($arg_name:ident : $arg_ty:ty),* $(,)*) $(-> $ret:ty)?
$body:block
) => {
$vis fn $name($self : $self_type, $($arg_name : $arg_ty,)*) $(-> $ret)? {
let _span = $self.resource_span.clone().entered();
$body
}
};
}
}
cfg_not_trace! {
macro_rules! instrument_resource {
(pin_project, $($t:tt)*) => {
pin_project_lite::pin_project! {
$($t)*
}
};
($($t:tt)*) => {
$($t)*
}
}
macro_rules! new_instrumented_resource {
($resource_type:literal, $($t:tt)*) => {
$($t)*
}
}
macro_rules! instrument_resource_op {
($($t:tt)*) => {
$($t)*
}
}
}