Skip to main content

telemetry_rust/middleware/aws/instrumentation/fluent_builder/
secretsmanager.rs

1/// AWS Secrets Manager fluent builder instrumentation implementations
2use super::{utils::*, *};
3
4// Secret value operations
5impl<'a> AwsBuilderInstrument<'a> for GetSecretValueFluentBuilder {
6    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
7        let secret_id = self.get_secret_id().clone().unwrap_or_default();
8        let attributes = attributes![
9            self.get_version_id()
10                .as_attribute("aws.secretsmanager.version_id"),
11            self.get_version_stage()
12                .as_attribute("aws.secretsmanager.version_stage"),
13        ];
14        SecretsManagerSpanBuilder::get_secret_value(secret_id).attributes(attributes)
15    }
16}
17impl InstrumentedFluentBuilderOutput for GetSecretValueOutput {
18    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
19        attributes![
20            self.version_id()
21                .as_attribute("aws.secretsmanager.version_id"),
22            self.version_stages()
23                .len()
24                .as_attribute("aws.secretsmanager.version_stages_count"),
25        ]
26    }
27}
28instrument_aws_operation!(aws_sdk_secretsmanager::operation::get_secret_value);
29
30impl<'a> AwsBuilderInstrument<'a> for PutSecretValueFluentBuilder {
31    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
32        let secret_id = self.get_secret_id().clone().unwrap_or_default();
33        SecretsManagerSpanBuilder::put_secret_value(secret_id)
34    }
35}
36impl InstrumentedFluentBuilderOutput for PutSecretValueOutput {
37    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
38        attributes![
39            self.version_id()
40                .as_attribute("aws.secretsmanager.version_id"),
41            self.version_stages()
42                .len()
43                .as_attribute("aws.secretsmanager.version_stages_count"),
44        ]
45    }
46}
47instrument_aws_operation!(aws_sdk_secretsmanager::operation::put_secret_value);
48
49impl<'a> AwsBuilderInstrument<'a> for CreateSecretFluentBuilder {
50    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
51        let name = self.get_name().clone().unwrap_or_default();
52        SecretsManagerSpanBuilder::create_secret(name)
53    }
54}
55impl InstrumentedFluentBuilderOutput for CreateSecretOutput {
56    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
57        attributes![
58            self.version_id()
59                .as_attribute("aws.secretsmanager.version_id"),
60        ]
61    }
62}
63instrument_aws_operation!(aws_sdk_secretsmanager::operation::create_secret);
64
65// Secret lifecycle operations
66impl<'a> AwsBuilderInstrument<'a> for DeleteSecretFluentBuilder {
67    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
68        let secret_id = self.get_secret_id().clone().unwrap_or_default();
69        let attributes = attributes![
70            self.get_force_delete_without_recovery()
71                .as_attribute("aws.secretsmanager.force_delete"),
72            self.get_recovery_window_in_days()
73                .map(|d| KeyValue::new("aws.secretsmanager.recovery_window_days", d)),
74        ];
75        SecretsManagerSpanBuilder::delete_secret(secret_id).attributes(attributes)
76    }
77}
78impl InstrumentedFluentBuilderOutput for DeleteSecretOutput {}
79instrument_aws_operation!(aws_sdk_secretsmanager::operation::delete_secret);
80
81impl<'a> AwsBuilderInstrument<'a> for DescribeSecretFluentBuilder {
82    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
83        let secret_id = self.get_secret_id().clone().unwrap_or_default();
84        SecretsManagerSpanBuilder::describe_secret(secret_id)
85    }
86}
87impl InstrumentedFluentBuilderOutput for DescribeSecretOutput {
88    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
89        attributes![
90            self.rotation_enabled()
91                .as_attribute("aws.secretsmanager.rotation_enabled"),
92        ]
93    }
94}
95instrument_aws_operation!(aws_sdk_secretsmanager::operation::describe_secret);
96
97impl<'a> AwsBuilderInstrument<'a> for UpdateSecretFluentBuilder {
98    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
99        let secret_id = self.get_secret_id().clone().unwrap_or_default();
100        SecretsManagerSpanBuilder::update_secret(secret_id)
101    }
102}
103impl InstrumentedFluentBuilderOutput for UpdateSecretOutput {
104    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
105        attributes![
106            self.version_id()
107                .as_attribute("aws.secretsmanager.version_id"),
108        ]
109    }
110}
111instrument_aws_operation!(aws_sdk_secretsmanager::operation::update_secret);
112
113impl<'a> AwsBuilderInstrument<'a> for RestoreSecretFluentBuilder {
114    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
115        let secret_id = self.get_secret_id().clone().unwrap_or_default();
116        SecretsManagerSpanBuilder::restore_secret(secret_id)
117    }
118}
119impl InstrumentedFluentBuilderOutput for RestoreSecretOutput {}
120instrument_aws_operation!(aws_sdk_secretsmanager::operation::restore_secret);
121
122// Rotation operations
123impl<'a> AwsBuilderInstrument<'a> for RotateSecretFluentBuilder {
124    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
125        let secret_id = self.get_secret_id().clone().unwrap_or_default();
126        SecretsManagerSpanBuilder::rotate_secret(secret_id)
127    }
128}
129impl InstrumentedFluentBuilderOutput for RotateSecretOutput {
130    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
131        attributes![
132            self.version_id()
133                .as_attribute("aws.secretsmanager.version_id"),
134        ]
135    }
136}
137instrument_aws_operation!(aws_sdk_secretsmanager::operation::rotate_secret);
138
139impl<'a> AwsBuilderInstrument<'a> for CancelRotateSecretFluentBuilder {
140    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
141        let secret_id = self.get_secret_id().clone().unwrap_or_default();
142        SecretsManagerSpanBuilder::cancel_rotate_secret(secret_id)
143    }
144}
145impl InstrumentedFluentBuilderOutput for CancelRotateSecretOutput {
146    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
147        attributes![
148            self.version_id()
149                .as_attribute("aws.secretsmanager.version_id"),
150        ]
151    }
152}
153instrument_aws_operation!(aws_sdk_secretsmanager::operation::cancel_rotate_secret);
154
155// Version operations
156impl<'a> AwsBuilderInstrument<'a> for UpdateSecretVersionStageFluentBuilder {
157    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
158        let secret_id = self.get_secret_id().clone().unwrap_or_default();
159        let attributes = attributes![
160            self.get_version_stage()
161                .as_attribute("aws.secretsmanager.version_stage"),
162            self.get_move_to_version_id()
163                .as_attribute("aws.secretsmanager.move_to_version_id"),
164            self.get_remove_from_version_id()
165                .as_attribute("aws.secretsmanager.remove_from_version_id"),
166        ];
167        SecretsManagerSpanBuilder::update_secret_version_stage(secret_id)
168            .attributes(attributes)
169    }
170}
171impl InstrumentedFluentBuilderOutput for UpdateSecretVersionStageOutput {}
172instrument_aws_operation!(aws_sdk_secretsmanager::operation::update_secret_version_stage);
173
174impl<'a> AwsBuilderInstrument<'a> for ListSecretVersionIdsFluentBuilder {
175    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
176        let secret_id = self.get_secret_id().clone().unwrap_or_default();
177        let attributes = attributes![
178            self.get_max_results()
179                .map(|v| KeyValue::new("aws.secretsmanager.max_results", v as i64)),
180        ];
181        SecretsManagerSpanBuilder::list_secret_version_ids(secret_id)
182            .attributes(attributes)
183    }
184}
185impl InstrumentedFluentBuilderOutput for ListSecretVersionIdsOutput {
186    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
187        attributes![
188            self.versions()
189                .len()
190                .as_attribute("aws.secretsmanager.version_count"),
191        ]
192    }
193}
194instrument_aws_operation!(aws_sdk_secretsmanager::operation::list_secret_version_ids);
195
196// Tagging operations
197impl<'a> AwsBuilderInstrument<'a> for TagResourceFluentBuilder {
198    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
199        let secret_id = self.get_secret_id().clone().unwrap_or_default();
200        SecretsManagerSpanBuilder::tag_resource(secret_id)
201    }
202}
203impl InstrumentedFluentBuilderOutput for TagResourceOutput {}
204instrument_aws_operation!(aws_sdk_secretsmanager::operation::tag_resource);
205
206impl<'a> AwsBuilderInstrument<'a> for UntagResourceFluentBuilder {
207    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
208        let secret_id = self.get_secret_id().clone().unwrap_or_default();
209        SecretsManagerSpanBuilder::untag_resource(secret_id)
210    }
211}
212impl InstrumentedFluentBuilderOutput for UntagResourceOutput {}
213instrument_aws_operation!(aws_sdk_secretsmanager::operation::untag_resource);
214
215// Resource policy operations
216impl<'a> AwsBuilderInstrument<'a> for GetResourcePolicyFluentBuilder {
217    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
218        let secret_id = self.get_secret_id().clone().unwrap_or_default();
219        SecretsManagerSpanBuilder::get_resource_policy(secret_id)
220    }
221}
222impl InstrumentedFluentBuilderOutput for GetResourcePolicyOutput {}
223instrument_aws_operation!(aws_sdk_secretsmanager::operation::get_resource_policy);
224
225impl<'a> AwsBuilderInstrument<'a> for PutResourcePolicyFluentBuilder {
226    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
227        let secret_id = self.get_secret_id().clone().unwrap_or_default();
228        SecretsManagerSpanBuilder::put_resource_policy(secret_id)
229    }
230}
231impl InstrumentedFluentBuilderOutput for PutResourcePolicyOutput {}
232instrument_aws_operation!(aws_sdk_secretsmanager::operation::put_resource_policy);
233
234impl<'a> AwsBuilderInstrument<'a> for DeleteResourcePolicyFluentBuilder {
235    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
236        let secret_id = self.get_secret_id().clone().unwrap_or_default();
237        SecretsManagerSpanBuilder::delete_resource_policy(secret_id)
238    }
239}
240impl InstrumentedFluentBuilderOutput for DeleteResourcePolicyOutput {}
241instrument_aws_operation!(aws_sdk_secretsmanager::operation::delete_resource_policy);
242
243impl<'a> AwsBuilderInstrument<'a> for ValidateResourcePolicyFluentBuilder {
244    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
245        let secret_id = self.get_secret_id().clone().unwrap_or_default();
246        SecretsManagerSpanBuilder::validate_resource_policy(secret_id)
247    }
248}
249impl InstrumentedFluentBuilderOutput for ValidateResourcePolicyOutput {
250    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
251        attributes![
252            Some(KeyValue::new(
253                "aws.secretsmanager.policy_validation_passed",
254                self.policy_validation_passed(),
255            )),
256            self.validation_errors()
257                .len()
258                .as_attribute("aws.secretsmanager.validation_error_count"),
259        ]
260    }
261}
262instrument_aws_operation!(aws_sdk_secretsmanager::operation::validate_resource_policy);
263
264// Replication operations
265impl<'a> AwsBuilderInstrument<'a> for RemoveRegionsFromReplicationFluentBuilder {
266    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
267        let secret_id = self.get_secret_id().clone().unwrap_or_default();
268        SecretsManagerSpanBuilder::remove_regions_from_replication(secret_id)
269    }
270}
271impl InstrumentedFluentBuilderOutput for RemoveRegionsFromReplicationOutput {}
272instrument_aws_operation!(
273    aws_sdk_secretsmanager::operation::remove_regions_from_replication
274);
275
276impl<'a> AwsBuilderInstrument<'a> for ReplicateSecretToRegionsFluentBuilder {
277    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
278        let secret_id = self.get_secret_id().clone().unwrap_or_default();
279        SecretsManagerSpanBuilder::replicate_secret_to_regions(secret_id)
280    }
281}
282impl InstrumentedFluentBuilderOutput for ReplicateSecretToRegionsOutput {}
283instrument_aws_operation!(aws_sdk_secretsmanager::operation::replicate_secret_to_regions);
284
285impl<'a> AwsBuilderInstrument<'a> for StopReplicationToReplicaFluentBuilder {
286    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
287        let secret_id = self.get_secret_id().clone().unwrap_or_default();
288        SecretsManagerSpanBuilder::stop_replication_to_replica(secret_id)
289    }
290}
291impl InstrumentedFluentBuilderOutput for StopReplicationToReplicaOutput {}
292instrument_aws_operation!(aws_sdk_secretsmanager::operation::stop_replication_to_replica);
293
294// Global operations
295impl<'a> AwsBuilderInstrument<'a> for ListSecretsFluentBuilder {
296    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
297        let attributes = attributes![
298            self.get_max_results()
299                .map(|v| KeyValue::new("aws.secretsmanager.max_results", v as i64)),
300        ];
301        SecretsManagerSpanBuilder::list_secrets().attributes(attributes)
302    }
303}
304impl InstrumentedFluentBuilderOutput for ListSecretsOutput {
305    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
306        attributes![
307            self.secret_list()
308                .len()
309                .as_attribute("aws.secretsmanager.secret_count"),
310        ]
311    }
312}
313instrument_aws_operation!(aws_sdk_secretsmanager::operation::list_secrets);
314
315impl<'a> AwsBuilderInstrument<'a> for BatchGetSecretValueFluentBuilder {
316    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
317        let attributes =
318            attributes![self.get_secret_id_list().as_ref().map(|ids| KeyValue::new(
319                "aws.secretsmanager.secret_count",
320                ids.len() as i64
321            )),];
322        SecretsManagerSpanBuilder::batch_get_secret_value().attributes(attributes)
323    }
324}
325impl InstrumentedFluentBuilderOutput for BatchGetSecretValueOutput {
326    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
327        attributes![
328            self.secret_values()
329                .len()
330                .as_attribute("aws.secretsmanager.secret_values_count"),
331            self.errors()
332                .len()
333                .as_attribute("aws.secretsmanager.error_count"),
334        ]
335    }
336}
337instrument_aws_operation!(aws_sdk_secretsmanager::operation::batch_get_secret_value);
338
339impl<'a> AwsBuilderInstrument<'a> for GetRandomPasswordFluentBuilder {
340    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
341        let attributes = attributes![
342            self.get_password_length()
343                .map(|v| KeyValue::new("aws.secretsmanager.password_length", v)),
344        ];
345        SecretsManagerSpanBuilder::get_random_password().attributes(attributes)
346    }
347}
348impl InstrumentedFluentBuilderOutput for GetRandomPasswordOutput {}
349instrument_aws_operation!(aws_sdk_secretsmanager::operation::get_random_password);