telemetry_rust/middleware/aws/instrumentation/fluent_builder/
dynamodb.rs1use super::{utils::*, *};
4use crate::semconv;
5
6trait ToUniqOwned<'a, T: ToOwned + ?Sized + 'a>: Iterator<Item = &'a T> {
10 fn uniq_owned(self) -> impl Iterator<Item = T::Owned>;
12}
13
14impl<'a, T, I> ToUniqOwned<'a, T> for I
15where
16 T: Ord + ToOwned + ?Sized + 'a,
17 I: Iterator<Item = &'a T>,
18{
19 fn uniq_owned(self) -> impl Iterator<Item = T::Owned> {
25 let mut input = self.collect::<Vec<_>>();
26 input.sort_unstable();
27 input.dedup();
28 input.into_iter().map(ToOwned::to_owned)
29 }
30}
31
32impl<'a> AwsBuilderInstrument<'a> for GetItemFluentBuilder {
33 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
34 let table_name = self.get_table_name().clone().unwrap_or_default();
35 let attributes = attributes![
36 self.get_consistent_read()
37 .as_attribute(semconv::AWS_DYNAMODB_CONSISTENT_READ),
38 self.get_projection_expression()
39 .as_attribute(semconv::AWS_DYNAMODB_PROJECTION),
40 ];
41 DynamodbSpanBuilder::get_item(table_name).attributes(attributes)
42 }
43}
44impl InstrumentedFluentBuilderOutput for GetItemOutput {}
45instrument_aws_operation!(aws_sdk_dynamodb::operation::get_item);
46
47impl<'a> AwsBuilderInstrument<'a> for GetResourcePolicyFluentBuilder {
48 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
49 let table_name = self.get_resource_arn().clone().unwrap_or_default();
50 DynamodbSpanBuilder::get_resource_policy(table_name)
51 }
52}
53impl InstrumentedFluentBuilderOutput for GetResourcePolicyOutput {}
54instrument_aws_operation!(aws_sdk_dynamodb::operation::get_resource_policy);
55
56impl<'a> AwsBuilderInstrument<'a> for PutItemFluentBuilder {
57 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
58 let table_name = self.get_table_name().clone().unwrap_or_default();
59 DynamodbSpanBuilder::put_item(table_name)
60 }
61}
62impl InstrumentedFluentBuilderOutput for PutItemOutput {}
63instrument_aws_operation!(aws_sdk_dynamodb::operation::put_item);
64
65impl<'a> AwsBuilderInstrument<'a> for PutResourcePolicyFluentBuilder {
66 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
67 let table_name = self.get_resource_arn().clone().unwrap_or_default();
68 DynamodbSpanBuilder::put_resource_policy(table_name)
69 }
70}
71impl InstrumentedFluentBuilderOutput for PutResourcePolicyOutput {}
72instrument_aws_operation!(aws_sdk_dynamodb::operation::put_resource_policy);
73
74impl<'a> AwsBuilderInstrument<'a> for UpdateItemFluentBuilder {
75 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
76 let table_name = self.get_table_name().clone().unwrap_or_default();
77 DynamodbSpanBuilder::update_item(table_name)
78 }
79}
80impl InstrumentedFluentBuilderOutput for UpdateItemOutput {}
81instrument_aws_operation!(aws_sdk_dynamodb::operation::update_item);
82
83impl<'a> AwsBuilderInstrument<'a> for DeleteItemFluentBuilder {
84 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
85 let table_name = self.get_table_name().clone().unwrap_or_default();
86 DynamodbSpanBuilder::delete_item(table_name)
87 }
88}
89impl InstrumentedFluentBuilderOutput for DeleteItemOutput {}
90instrument_aws_operation!(aws_sdk_dynamodb::operation::delete_item);
91
92impl<'a> AwsBuilderInstrument<'a> for DeleteResourcePolicyFluentBuilder {
93 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
94 let table_name = self.get_resource_arn().clone().unwrap_or_default();
95 DynamodbSpanBuilder::delete_resource_policy(table_name)
96 }
97}
98impl InstrumentedFluentBuilderOutput for DeleteResourcePolicyOutput {}
99instrument_aws_operation!(aws_sdk_dynamodb::operation::delete_resource_policy);
100
101impl<'a> AwsBuilderInstrument<'a> for QueryFluentBuilder {
102 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
103 let table_name = self.get_table_name().clone().unwrap_or_default();
104 let attributes = attributes![
105 self.get_attributes_to_get()
106 .as_attribute(semconv::AWS_DYNAMODB_ATTRIBUTES_TO_GET),
107 self.get_consistent_read()
108 .as_attribute(semconv::AWS_DYNAMODB_CONSISTENT_READ),
109 self.get_index_name()
110 .as_attribute(semconv::AWS_DYNAMODB_INDEX_NAME),
111 self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
112 self.get_projection_expression()
113 .as_attribute(semconv::AWS_DYNAMODB_PROJECTION),
114 self.get_scan_index_forward()
115 .as_attribute(semconv::AWS_DYNAMODB_SCAN_FORWARD),
116 self.get_select().as_attribute(semconv::AWS_DYNAMODB_SELECT),
117 ];
118 DynamodbSpanBuilder::query(table_name).attributes(attributes)
119 }
120}
121impl InstrumentedFluentBuilderOutput for QueryOutput {
122 fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
123 [
124 KeyValue::new(semconv::AWS_DYNAMODB_COUNT, self.count() as i64),
125 KeyValue::new(
126 semconv::AWS_DYNAMODB_SCANNED_COUNT,
127 self.scanned_count() as i64,
128 ),
129 ]
130 }
131}
132instrument_aws_operation!(aws_sdk_dynamodb::operation::query);
133
134impl<'a> AwsBuilderInstrument<'a> for ScanFluentBuilder {
135 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
136 let table_name = self.get_table_name().clone().unwrap_or_default();
137 let attributes = attributes![
138 self.get_attributes_to_get()
139 .as_attribute(semconv::AWS_DYNAMODB_ATTRIBUTES_TO_GET),
140 self.get_consistent_read()
141 .as_attribute(semconv::AWS_DYNAMODB_CONSISTENT_READ),
142 self.get_index_name()
143 .as_attribute(semconv::AWS_DYNAMODB_INDEX_NAME),
144 self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
145 self.get_projection_expression()
146 .as_attribute(semconv::AWS_DYNAMODB_PROJECTION),
147 self.get_select().as_attribute(semconv::AWS_DYNAMODB_SELECT),
148 self.get_segment()
149 .as_attribute(semconv::AWS_DYNAMODB_SEGMENT),
150 self.get_total_segments()
151 .as_attribute(semconv::AWS_DYNAMODB_TOTAL_SEGMENTS),
152 ];
153 DynamodbSpanBuilder::scan(table_name).attributes(attributes)
154 }
155}
156impl InstrumentedFluentBuilderOutput for ScanOutput {
157 fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
158 [
159 KeyValue::new(semconv::AWS_DYNAMODB_COUNT, self.count() as i64),
160 KeyValue::new(
161 semconv::AWS_DYNAMODB_SCANNED_COUNT,
162 self.scanned_count() as i64,
163 ),
164 ]
165 }
166}
167instrument_aws_operation!(aws_sdk_dynamodb::operation::scan);
168
169impl<'a> AwsBuilderInstrument<'a> for BatchGetItemFluentBuilder {
170 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
171 let table_names = self
172 .get_request_items()
173 .iter()
174 .flat_map(|items| items.keys())
175 .map(ToOwned::to_owned);
176 let attributes = attributes![
177 self.get_request_items()
178 .as_ref()
179 .map(|items| items.len())
180 .as_attribute(semconv::DB_OPERATION_BATCH_SIZE)
181 ];
182 DynamodbSpanBuilder::batch_get_item(table_names).attributes(attributes)
183 }
184}
185impl InstrumentedFluentBuilderOutput for BatchGetItemOutput {}
186instrument_aws_operation!(aws_sdk_dynamodb::operation::batch_get_item);
187
188impl<'a> AwsBuilderInstrument<'a> for BatchWriteItemFluentBuilder {
189 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
190 let table_names = self
191 .get_request_items()
192 .iter()
193 .flat_map(|items| items.keys())
194 .map(ToOwned::to_owned);
195 let attributes = attributes![
196 self.get_request_items()
197 .as_ref()
198 .map(|items| items.len())
199 .as_attribute(semconv::DB_OPERATION_BATCH_SIZE)
200 ];
201 DynamodbSpanBuilder::batch_write_item(table_names).attributes(attributes)
202 }
203}
204impl InstrumentedFluentBuilderOutput for BatchWriteItemOutput {}
205instrument_aws_operation!(aws_sdk_dynamodb::operation::batch_write_item);
206
207impl<'a> AwsBuilderInstrument<'a> for TransactGetItemsFluentBuilder {
208 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
209 let table_names = self
210 .get_transact_items()
211 .iter()
212 .flatten()
213 .flat_map(|item| item.get().map(|op| op.table_name()))
214 .uniq_owned();
215 DynamodbSpanBuilder::transact_get_items(table_names)
216 }
217}
218impl InstrumentedFluentBuilderOutput for TransactGetItemsOutput {}
219instrument_aws_operation!(aws_sdk_dynamodb::operation::transact_get_items);
220
221impl<'a> AwsBuilderInstrument<'a> for TransactWriteItemsFluentBuilder {
222 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
223 let table_names = self
224 .get_transact_items()
225 .iter()
226 .flatten()
227 .flat_map(|item| {
228 [
229 item.condition_check().map(|op| op.table_name()),
230 item.put().map(|op| op.table_name()),
231 item.delete().map(|op| op.table_name()),
232 item.update().map(|op| op.table_name()),
233 ]
234 })
235 .flatten()
236 .uniq_owned();
237 DynamodbSpanBuilder::transact_write_items(table_names)
238 }
239}
240impl InstrumentedFluentBuilderOutput for TransactWriteItemsOutput {}
241instrument_aws_operation!(aws_sdk_dynamodb::operation::transact_write_items);
242
243impl<'a> AwsBuilderInstrument<'a> for CreateTableFluentBuilder {
245 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
246 let table_name = self.get_table_name().clone().unwrap_or_default();
247 let throughput = self.get_provisioned_throughput().as_ref();
248 let attributes = attributes![
249 throughput
250 .map(|pt| pt.read_capacity_units())
251 .as_attribute(semconv::AWS_DYNAMODB_PROVISIONED_READ_CAPACITY),
252 throughput
253 .map(|pt| pt.write_capacity_units())
254 .as_attribute(semconv::AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY),
255 ];
256 DynamodbSpanBuilder::create_table(table_name).attributes(attributes)
257 }
258}
259impl InstrumentedFluentBuilderOutput for CreateTableOutput {}
260instrument_aws_operation!(aws_sdk_dynamodb::operation::create_table);
261
262impl<'a> AwsBuilderInstrument<'a> for DeleteTableFluentBuilder {
263 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
264 let table_name = self.get_table_name().clone().unwrap_or_default();
265 DynamodbSpanBuilder::delete_table(table_name)
266 }
267}
268impl InstrumentedFluentBuilderOutput for DeleteTableOutput {}
269instrument_aws_operation!(aws_sdk_dynamodb::operation::delete_table);
270
271impl<'a> AwsBuilderInstrument<'a> for DescribeTableFluentBuilder {
272 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
273 let table_name = self.get_table_name().clone().unwrap_or_default();
274 DynamodbSpanBuilder::describe_table(table_name)
275 }
276}
277impl InstrumentedFluentBuilderOutput for DescribeTableOutput {}
278instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_table);
279
280impl<'a> AwsBuilderInstrument<'a> for UpdateTableFluentBuilder {
281 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
282 let table_name = self.get_table_name().clone().unwrap_or_default();
283 let throughput = self.get_provisioned_throughput().as_ref();
284 let attributes = attributes![
285 throughput
286 .map(|pt| pt.read_capacity_units())
287 .as_attribute(semconv::AWS_DYNAMODB_PROVISIONED_READ_CAPACITY),
288 throughput
289 .map(|pt| pt.write_capacity_units())
290 .as_attribute(semconv::AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY),
291 ];
292 DynamodbSpanBuilder::update_table(table_name).attributes(attributes)
293 }
294}
295impl InstrumentedFluentBuilderOutput for UpdateTableOutput {}
296instrument_aws_operation!(aws_sdk_dynamodb::operation::update_table);
297
298impl<'a> AwsBuilderInstrument<'a> for ListTablesFluentBuilder {
299 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
300 let attributes = attributes![
301 self.get_exclusive_start_table_name()
302 .as_attribute(semconv::AWS_DYNAMODB_EXCLUSIVE_START_TABLE),
303 self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
304 ];
305 DynamodbSpanBuilder::list_tables().attributes(attributes)
306 }
307}
308impl InstrumentedFluentBuilderOutput for ListTablesOutput {}
309instrument_aws_operation!(aws_sdk_dynamodb::operation::list_tables);
310
311impl<'a> AwsBuilderInstrument<'a> for CreateBackupFluentBuilder {
313 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
314 let table_name = self.get_table_name().clone().unwrap_or_default();
315 DynamodbSpanBuilder::create_backup(table_name)
316 }
317}
318impl InstrumentedFluentBuilderOutput for CreateBackupOutput {}
319instrument_aws_operation!(aws_sdk_dynamodb::operation::create_backup);
320
321impl<'a> AwsBuilderInstrument<'a> for DeleteBackupFluentBuilder {
322 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
323 DynamodbSpanBuilder::delete_backup()
324 }
325}
326impl InstrumentedFluentBuilderOutput for DeleteBackupOutput {}
327instrument_aws_operation!(aws_sdk_dynamodb::operation::delete_backup);
328
329impl<'a> AwsBuilderInstrument<'a> for DescribeBackupFluentBuilder {
330 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
331 DynamodbSpanBuilder::describe_backup()
332 }
333}
334impl InstrumentedFluentBuilderOutput for DescribeBackupOutput {}
335instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_backup);
336
337impl<'a> AwsBuilderInstrument<'a> for ListBackupsFluentBuilder {
338 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
339 let table_name = self.get_table_name().clone().unwrap_or_default();
340 DynamodbSpanBuilder::list_backups(table_name)
341 }
342}
343impl InstrumentedFluentBuilderOutput for ListBackupsOutput {}
344instrument_aws_operation!(aws_sdk_dynamodb::operation::list_backups);
345
346impl<'a> AwsBuilderInstrument<'a> for RestoreTableFromBackupFluentBuilder {
347 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
348 let target_table_name = self.get_target_table_name().clone().unwrap_or_default();
349 DynamodbSpanBuilder::restore_table_from_backup(target_table_name)
350 }
351}
352impl InstrumentedFluentBuilderOutput for RestoreTableFromBackupOutput {}
353instrument_aws_operation!(aws_sdk_dynamodb::operation::restore_table_from_backup);
354
355impl<'a> AwsBuilderInstrument<'a> for RestoreTableToPointInTimeFluentBuilder {
356 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
357 let target_table_name = self.get_target_table_name().clone().unwrap_or_default();
358 DynamodbSpanBuilder::restore_table_to_point_in_time(target_table_name)
359 }
360}
361impl InstrumentedFluentBuilderOutput for RestoreTableToPointInTimeOutput {}
362instrument_aws_operation!(aws_sdk_dynamodb::operation::restore_table_to_point_in_time);
363
364impl<'a> AwsBuilderInstrument<'a> for ExecuteStatementFluentBuilder {
366 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
367 let table = self
368 .get_statement()
369 .as_deref()
370 .map(TableReference::from)
371 .unwrap_or_default();
372
373 let attributes = attributes![
374 table.index_name(),
375 self.get_consistent_read()
376 .as_attribute(semconv::AWS_DYNAMODB_CONSISTENT_READ),
377 self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
378 ];
379
380 DynamodbSpanBuilder::execute_statement(table.name.to_owned())
381 .attributes(attributes)
382 }
383}
384impl InstrumentedFluentBuilderOutput for ExecuteStatementOutput {
385 fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
386 attributes![self.items().len().as_attribute(semconv::AWS_DYNAMODB_COUNT)]
387 }
388}
389instrument_aws_operation!(aws_sdk_dynamodb::operation::execute_statement);
390
391impl<'a> AwsBuilderInstrument<'a> for BatchExecuteStatementFluentBuilder {
392 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
393 let table_names = self
394 .get_statements()
395 .iter()
396 .flatten()
397 .map(|op| TableReference::from(op.statement()).name)
398 .uniq_owned();
399
400 let attributes = attributes![
401 self.get_statements()
402 .as_ref()
403 .map(|statements| statements.len())
404 .as_attribute(semconv::DB_OPERATION_BATCH_SIZE)
405 ];
406
407 DynamodbSpanBuilder::batch_execute_statement(table_names).attributes(attributes)
408 }
409}
410impl InstrumentedFluentBuilderOutput for BatchExecuteStatementOutput {
411 fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
412 let errors = self
413 .responses()
414 .iter()
415 .filter_map(|resp| resp.error())
416 .count();
417 attributes![errors.as_attribute("db.operation.batch.errors")]
418 }
419}
420instrument_aws_operation!(aws_sdk_dynamodb::operation::batch_execute_statement);
421
422impl<'a> AwsBuilderInstrument<'a> for ExecuteTransactionFluentBuilder {
423 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
424 let table_names = self
425 .get_transact_statements()
426 .iter()
427 .flatten()
428 .map(|t| TableReference::from(t.statement()).name)
429 .uniq_owned();
430
431 let attributes = attributes![
432 self.get_transact_statements()
433 .as_ref()
434 .map(|statements| statements.len())
435 .as_attribute(semconv::DB_OPERATION_BATCH_SIZE)
436 ];
437
438 DynamodbSpanBuilder::execute_transaction(table_names).attributes(attributes)
439 }
440}
441impl InstrumentedFluentBuilderOutput for ExecuteTransactionOutput {}
442instrument_aws_operation!(aws_sdk_dynamodb::operation::execute_transaction);
443
444impl<'a> AwsBuilderInstrument<'a> for DescribeEndpointsFluentBuilder {
446 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
447 DynamodbSpanBuilder::describe_endpoints()
448 }
449}
450impl InstrumentedFluentBuilderOutput for DescribeEndpointsOutput {}
451instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_endpoints);
452
453impl<'a> AwsBuilderInstrument<'a> for DescribeLimitsFluentBuilder {
454 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
455 DynamodbSpanBuilder::describe_limits()
456 }
457}
458impl InstrumentedFluentBuilderOutput for DescribeLimitsOutput {}
459instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_limits);
460
461impl<'a> AwsBuilderInstrument<'a> for ListGlobalTablesFluentBuilder {
462 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
463 let attributes = attributes![
464 self.get_exclusive_start_global_table_name()
465 .as_attribute(semconv::AWS_DYNAMODB_EXCLUSIVE_START_TABLE),
466 self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
467 self.get_region_name().as_attribute(semconv::CLOUD_REGION),
468 ];
469 DynamodbSpanBuilder::list_global_tables().attributes(attributes)
470 }
471}
472impl InstrumentedFluentBuilderOutput for ListGlobalTablesOutput {}
473instrument_aws_operation!(aws_sdk_dynamodb::operation::list_global_tables);
474
475impl<'a> AwsBuilderInstrument<'a> for DescribeExportFluentBuilder {
477 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
478 DynamodbSpanBuilder::describe_export()
479 }
480}
481impl InstrumentedFluentBuilderOutput for DescribeExportOutput {}
482instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_export);
483
484impl<'a> AwsBuilderInstrument<'a> for DescribeImportFluentBuilder {
485 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
486 DynamodbSpanBuilder::describe_import()
487 }
488}
489impl InstrumentedFluentBuilderOutput for DescribeImportOutput {}
490instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_import);
491
492impl<'a> AwsBuilderInstrument<'a> for ImportTableFluentBuilder {
493 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
494 let table_name = self
495 .get_table_creation_parameters()
496 .as_ref()
497 .map(|p| p.table_name())
498 .map(ToOwned::to_owned)
499 .unwrap_or_default();
500 DynamodbSpanBuilder::import_table(table_name)
501 }
502}
503impl InstrumentedFluentBuilderOutput for ImportTableOutput {}
504instrument_aws_operation!(aws_sdk_dynamodb::operation::import_table);
505
506impl<'a> AwsBuilderInstrument<'a> for ExportTableToPointInTimeFluentBuilder {
507 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
508 let table_arn = self.get_table_arn().clone().unwrap_or_default();
509 DynamodbSpanBuilder::export_table_to_point_in_time(table_arn)
510 }
511}
512impl InstrumentedFluentBuilderOutput for ExportTableToPointInTimeOutput {}
513instrument_aws_operation!(aws_sdk_dynamodb::operation::export_table_to_point_in_time);
514
515impl<'a> AwsBuilderInstrument<'a> for ListExportsFluentBuilder {
516 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
517 let table_arn = self.get_table_arn().clone().unwrap_or_default();
518 let attributes = attributes![
519 self.get_max_results()
520 .as_attribute(semconv::AWS_DYNAMODB_LIMIT)
521 ];
522 DynamodbSpanBuilder::list_exports(table_arn).attributes(attributes)
523 }
524}
525impl InstrumentedFluentBuilderOutput for ListExportsOutput {}
526instrument_aws_operation!(aws_sdk_dynamodb::operation::list_exports);
527
528impl<'a> AwsBuilderInstrument<'a> for ListImportsFluentBuilder {
529 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
530 let table_arn = self.get_table_arn().clone().unwrap_or_default();
531 let attributes = attributes![
532 self.get_page_size()
533 .as_attribute(semconv::AWS_DYNAMODB_LIMIT)
534 ];
535 DynamodbSpanBuilder::list_imports(table_arn).attributes(attributes)
536 }
537}
538impl InstrumentedFluentBuilderOutput for ListImportsOutput {}
539instrument_aws_operation!(aws_sdk_dynamodb::operation::list_imports);
540
541impl<'a> AwsBuilderInstrument<'a> for CreateGlobalTableFluentBuilder {
543 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
544 let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
545 DynamodbSpanBuilder::create_global_table(global_table_name)
546 }
547}
548impl InstrumentedFluentBuilderOutput for CreateGlobalTableOutput {}
549instrument_aws_operation!(aws_sdk_dynamodb::operation::create_global_table);
550
551impl<'a> AwsBuilderInstrument<'a> for DescribeGlobalTableFluentBuilder {
552 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
553 let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
554 DynamodbSpanBuilder::describe_global_table(global_table_name)
555 }
556}
557impl InstrumentedFluentBuilderOutput for DescribeGlobalTableOutput {}
558instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_global_table);
559
560impl<'a> AwsBuilderInstrument<'a> for DescribeGlobalTableSettingsFluentBuilder {
561 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
562 let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
563 DynamodbSpanBuilder::describe_global_table_settings(global_table_name)
564 }
565}
566impl InstrumentedFluentBuilderOutput for DescribeGlobalTableSettingsOutput {}
567instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_global_table_settings);
568
569impl<'a> AwsBuilderInstrument<'a> for UpdateGlobalTableFluentBuilder {
570 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
571 let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
572 DynamodbSpanBuilder::update_global_table(global_table_name)
573 }
574}
575impl InstrumentedFluentBuilderOutput for UpdateGlobalTableOutput {}
576instrument_aws_operation!(aws_sdk_dynamodb::operation::update_global_table);
577
578impl<'a> AwsBuilderInstrument<'a> for UpdateGlobalTableSettingsFluentBuilder {
579 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
580 let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
581 DynamodbSpanBuilder::update_global_table_settings(global_table_name)
582 }
583}
584impl InstrumentedFluentBuilderOutput for UpdateGlobalTableSettingsOutput {}
585instrument_aws_operation!(aws_sdk_dynamodb::operation::update_global_table_settings);
586
587impl<'a> AwsBuilderInstrument<'a> for DescribeContinuousBackupsFluentBuilder {
589 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
590 let table_name = self.get_table_name().clone().unwrap_or_default();
591 DynamodbSpanBuilder::describe_continuous_backups(table_name)
592 }
593}
594impl InstrumentedFluentBuilderOutput for DescribeContinuousBackupsOutput {}
595instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_continuous_backups);
596
597impl<'a> AwsBuilderInstrument<'a> for UpdateContinuousBackupsFluentBuilder {
598 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
599 let table_name = self.get_table_name().clone().unwrap_or_default();
600 DynamodbSpanBuilder::update_continuous_backups(table_name)
601 }
602}
603impl InstrumentedFluentBuilderOutput for UpdateContinuousBackupsOutput {}
604instrument_aws_operation!(aws_sdk_dynamodb::operation::update_continuous_backups);
605
606impl<'a> AwsBuilderInstrument<'a> for DescribeTimeToLiveFluentBuilder {
607 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
608 let table_name = self.get_table_name().clone().unwrap_or_default();
609 DynamodbSpanBuilder::describe_time_to_live(table_name)
610 }
611}
612impl InstrumentedFluentBuilderOutput for DescribeTimeToLiveOutput {}
613instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_time_to_live);
614
615impl<'a> AwsBuilderInstrument<'a> for UpdateTimeToLiveFluentBuilder {
616 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
617 let table_name = self.get_table_name().clone().unwrap_or_default();
618 DynamodbSpanBuilder::update_time_to_live(table_name)
619 }
620}
621impl InstrumentedFluentBuilderOutput for UpdateTimeToLiveOutput {}
622instrument_aws_operation!(aws_sdk_dynamodb::operation::update_time_to_live);
623
624impl<'a> AwsBuilderInstrument<'a> for DescribeTableReplicaAutoScalingFluentBuilder {
625 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
626 let table_name = self.get_table_name().clone().unwrap_or_default();
627 DynamodbSpanBuilder::describe_table_replica_auto_scaling(table_name)
628 }
629}
630impl InstrumentedFluentBuilderOutput for DescribeTableReplicaAutoScalingOutput {}
631instrument_aws_operation!(
632 aws_sdk_dynamodb::operation::describe_table_replica_auto_scaling
633);
634
635impl<'a> AwsBuilderInstrument<'a> for UpdateTableReplicaAutoScalingFluentBuilder {
636 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
637 let table_name = self.get_table_name().clone().unwrap_or_default();
638 DynamodbSpanBuilder::update_table_replica_auto_scaling(table_name)
639 }
640}
641impl InstrumentedFluentBuilderOutput for UpdateTableReplicaAutoScalingOutput {}
642instrument_aws_operation!(aws_sdk_dynamodb::operation::update_table_replica_auto_scaling);
643
644impl<'a> AwsBuilderInstrument<'a> for DescribeKinesisStreamingDestinationFluentBuilder {
646 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
647 let table_name = self.get_table_name().clone().unwrap_or_default();
648 DynamodbSpanBuilder::describe_kinesis_streaming_destination(table_name)
649 }
650}
651impl InstrumentedFluentBuilderOutput for DescribeKinesisStreamingDestinationOutput {}
652instrument_aws_operation!(
653 aws_sdk_dynamodb::operation::describe_kinesis_streaming_destination
654);
655
656impl<'a> AwsBuilderInstrument<'a> for EnableKinesisStreamingDestinationFluentBuilder {
657 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
658 let table_name = self.get_table_name().clone().unwrap_or_default();
659 DynamodbSpanBuilder::enable_kinesis_streaming_destination(table_name)
660 }
661}
662impl InstrumentedFluentBuilderOutput for EnableKinesisStreamingDestinationOutput {}
663instrument_aws_operation!(
664 aws_sdk_dynamodb::operation::enable_kinesis_streaming_destination
665);
666
667impl<'a> AwsBuilderInstrument<'a> for DisableKinesisStreamingDestinationFluentBuilder {
668 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
669 let table_name = self.get_table_name().clone().unwrap_or_default();
670 DynamodbSpanBuilder::disable_kinesis_streaming_destination(table_name)
671 }
672}
673impl InstrumentedFluentBuilderOutput for DisableKinesisStreamingDestinationOutput {}
674instrument_aws_operation!(
675 aws_sdk_dynamodb::operation::disable_kinesis_streaming_destination
676);
677
678impl<'a> AwsBuilderInstrument<'a> for UpdateKinesisStreamingDestinationFluentBuilder {
679 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
680 let table_name = self.get_table_name().clone().unwrap_or_default();
681 DynamodbSpanBuilder::update_kinesis_streaming_destination(table_name)
682 }
683}
684impl InstrumentedFluentBuilderOutput for UpdateKinesisStreamingDestinationOutput {}
685instrument_aws_operation!(
686 aws_sdk_dynamodb::operation::update_kinesis_streaming_destination
687);
688
689impl<'a> AwsBuilderInstrument<'a> for DescribeContributorInsightsFluentBuilder {
691 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
692 let table_name = self.get_table_name().clone().unwrap_or_default();
693 let attributes = attributes![
694 self.get_index_name()
695 .as_attribute(semconv::AWS_DYNAMODB_INDEX_NAME)
696 ];
697 DynamodbSpanBuilder::describe_contributor_insights(table_name)
698 .attributes(attributes)
699 }
700}
701impl InstrumentedFluentBuilderOutput for DescribeContributorInsightsOutput {}
702instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_contributor_insights);
703
704impl<'a> AwsBuilderInstrument<'a> for ListContributorInsightsFluentBuilder {
705 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
706 let table_name = self.get_table_name().clone().unwrap_or_default();
707 let attributes = attributes![
708 self.get_max_results()
709 .as_attribute(semconv::AWS_DYNAMODB_LIMIT)
710 ];
711 DynamodbSpanBuilder::list_contributor_insights(table_name).attributes(attributes)
712 }
713}
714impl InstrumentedFluentBuilderOutput for ListContributorInsightsOutput {}
715instrument_aws_operation!(aws_sdk_dynamodb::operation::list_contributor_insights);
716
717impl<'a> AwsBuilderInstrument<'a> for UpdateContributorInsightsFluentBuilder {
718 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
719 let table_name = self.get_table_name().clone().unwrap_or_default();
720 let attributes = attributes![
721 self.get_index_name()
722 .as_attribute(semconv::AWS_DYNAMODB_INDEX_NAME)
723 ];
724 DynamodbSpanBuilder::update_contributor_insights(table_name)
725 .attributes(attributes)
726 }
727}
728impl InstrumentedFluentBuilderOutput for UpdateContributorInsightsOutput {}
729instrument_aws_operation!(aws_sdk_dynamodb::operation::update_contributor_insights);
730
731impl<'a> AwsBuilderInstrument<'a> for ListTagsOfResourceFluentBuilder {
733 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
734 let resource_arn = self.get_resource_arn().clone().unwrap_or_default();
735 DynamodbSpanBuilder::list_tags_of_resource(resource_arn)
736 }
737}
738impl InstrumentedFluentBuilderOutput for ListTagsOfResourceOutput {}
739instrument_aws_operation!(aws_sdk_dynamodb::operation::list_tags_of_resource);
740
741impl<'a> AwsBuilderInstrument<'a> for TagResourceFluentBuilder {
742 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
743 let resource_arn = self.get_resource_arn().clone().unwrap_or_default();
744 DynamodbSpanBuilder::tag_resource(resource_arn)
745 }
746}
747impl InstrumentedFluentBuilderOutput for TagResourceOutput {}
748instrument_aws_operation!(aws_sdk_dynamodb::operation::tag_resource);
749
750impl<'a> AwsBuilderInstrument<'a> for UntagResourceFluentBuilder {
751 fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
752 let resource_arn = self.get_resource_arn().clone().unwrap_or_default();
753 DynamodbSpanBuilder::untag_resource(resource_arn)
754 }
755}
756impl InstrumentedFluentBuilderOutput for UntagResourceOutput {}
757instrument_aws_operation!(aws_sdk_dynamodb::operation::untag_resource);