Skip to content

Commit a87086e

Browse files
authored
feat(sidekick/rust): use RequestRecorder (#4883)
In the o11y project, we are adding `RequestRecorder` a new way to capture the data used in o11y signals (spans, logs, and metrics). This starts using it in the generated code.
1 parent fd06320 commit a87086e

File tree

3 files changed

+27
-36
lines changed

3 files changed

+27
-36
lines changed

internal/sidekick/rust/templates/crate/src/tracing.rs.mustache

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,12 @@ where T: super::stub::{{Codec.Name}} + std::fmt::Debug + Send + Sync {
7979
{{#Codec.DetailedTracingAttributes}}
8080
#[cfg(google_cloud_unstable_tracing)]
8181
{
82-
use gaxi::observability::ClientSignalsExt as _;
83-
let (start, span) = gaxi::client_request_signals!(
84-
&info::INSTRUMENTATION_CLIENT_INFO,
85-
&options,
86-
"client::{{Codec.ServiceNameToPascal}}",
87-
"{{Codec.Name}}",
88-
Some("{{SourceService.Package}}.{{SourceService.Name}}/{{Name}}")
89-
);
90-
self.inner
91-
.{{Codec.Name}}(req, options)
92-
.instrument_client(self.duration.clone(), start, span)
93-
.await
82+
let (_span, pending) = gaxi::client_request_signals!(
83+
metric: self.duration.clone(),
84+
info: *info::INSTRUMENTATION_CLIENT_INFO,
85+
method: "client::{{Codec.ServiceNameToPascal}}::{{Codec.Name}}",
86+
self.inner.{{Codec.Name}}(req, options));
87+
pending.await
9488
}
9589
#[cfg(not(google_cloud_unstable_tracing))]
9690
{{/Codec.DetailedTracingAttributes }}

internal/sidekick/rust/templates/crate/src/transport.rs.mustache

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ impl super::stub::{{Codec.Name}} for {{Codec.Name}} {
103103
{{/HasAutoPopulatedFields}}
104104
{{#Codec.HasResourceNameGeneration}}
105105
{{#Codec.DetailedTracingAttributes}}
106-
let (builder, method, _path_template, resource_name) = None
106+
let (builder, method, _path_template, _resource_name) = None
107107
{{/Codec.DetailedTracingAttributes}}
108108
{{^Codec.DetailedTracingAttributes}}
109-
let (builder, method, resource_name) = None
109+
let (builder, method, _resource_name) = None
110110
{{/Codec.DetailedTracingAttributes}}
111111
{{/Codec.HasResourceNameGeneration}}
112112
{{^Codec.HasResourceNameGeneration}}
@@ -202,19 +202,17 @@ impl super::stub::{{Codec.Name}} for {{Codec.Name}} {
202202
})??;
203203
{{#Codec.DetailedTracingAttributes}}
204204
#[cfg(google_cloud_unstable_tracing)]
205-
let options = {
206-
use google_cloud_gax::options::internal::{RequestOptionsExt, PathTemplate};
207-
options.insert_extension(PathTemplate(_path_template))
208-
};
205+
if let Some(recorder) = gaxi::observability::RequestRecorder::current() {
206+
recorder.on_client_request(
207+
gaxi::observability::ClientRequestAttributes::default()
208+
.set_rpc_method("{{SourceService.Package}}.{{SourceService.Name}}/{{Name}}")
209+
.set_url_template(_path_template)
210+
{{#Codec.HasResourceNameGeneration}}
211+
.set_resource_name(_resource_name)
212+
{{/Codec.HasResourceNameGeneration}}
213+
);
214+
}
209215
{{/Codec.DetailedTracingAttributes}}
210-
{{#Codec.HasResourceNameGeneration}}
211-
let options = if !resource_name.is_empty() {
212-
use google_cloud_gax::options::internal::{RequestOptionsExt, ResourceName};
213-
options.insert_extension(ResourceName(resource_name))
214-
} else {
215-
options
216-
};
217-
{{/Codec.HasResourceNameGeneration}}
218216
let options = google_cloud_gax::options::internal::set_default_idempotency(
219217
options,
220218
{{! TODO(#4156) - return idempotency from the above closure }}

internal/sidekick/rust/templates/grpc-client/transport.rs.mustache

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,9 @@ impl super::stub::{{Codec.Name}} for {{Codec.Name}} {
165165
{{/ReturnsEmpty}}
166166
{{#Codec.DetailedTracingAttributes}}
167167
#[cfg(google_cloud_unstable_tracing)]
168-
let options = {
168+
if let Some(recorder) = gaxi::observability::RequestRecorder::current() {
169+
let attributes = gaxi::observability::ClientRequestAttributes::default()
170+
.set_rpc_method("{{SourceService.Package}}.{{SourceService.Name}}/{{Name}}");
169171
{{#Codec.HasGrpcResourceNameArgs}}
170172
let resource_name = (|| {
171173
{{#Codec.ResourceNameTemplateGrpc}}
@@ -180,17 +182,14 @@ impl super::stub::{{Codec.Name}} for {{Codec.Name}} {
180182
Some(String::new())
181183
{{/Codec.ResourceNameTemplateGrpc}}
182184
})();
183-
if let Some(rn) = resource_name.filter(|s| !s.is_empty()) {
184-
use google_cloud_gax::options::internal::{RequestOptionsExt, ResourceName};
185-
options.insert_extension(ResourceName(rn))
185+
let attributes = if let Some(rn) = resource_name.filter(|s| !s.is_empty()) {
186+
attributes.set_resource_name(rn)
186187
} else {
187-
options
188-
}
189-
{{/Codec.HasGrpcResourceNameArgs}}
190-
{{^Codec.HasGrpcResourceNameArgs}}
191-
options
188+
attributes
189+
};
192190
{{/Codec.HasGrpcResourceNameArgs}}
193-
};
191+
recorder.on_client_request(attributes);
192+
}
194193
{{/Codec.DetailedTracingAttributes}}
195194
self.inner
196195
.execute(

0 commit comments

Comments
 (0)