129 130 | Sigv4aSigning,
|
130 131 | ResolvedAccountId,
|
131 132 | FlexibleChecksumsReqCrc32,
|
132 133 | FlexibleChecksumsReqCrc32c,
|
133 134 | FlexibleChecksumsReqCrc64,
|
134 135 | FlexibleChecksumsReqSha1,
|
135 136 | FlexibleChecksumsReqSha256,
|
136 137 | FlexibleChecksumsReqWhenSupported,
|
137 138 | FlexibleChecksumsReqWhenRequired,
|
138 139 | FlexibleChecksumsResWhenSupported,
|
139 - | FlexibleChecksumsResWhenRequired
|
140 + | FlexibleChecksumsResWhenRequired,
|
141 + | DdbMapper,
|
142 + | CredentialsCode,
|
143 + | CredentialsJvmSystemProperties,
|
144 + | CredentialsEnvVars,
|
145 + | CredentialsEnvVarsStsWebIdToken,
|
146 + | CredentialsStsAssumeRole,
|
147 + | CredentialsStsAssumeRoleSaml,
|
148 + | CredentialsStsAssumeRoleWebId,
|
149 + | CredentialsStsFederationToken,
|
150 + | CredentialsStsSessionToken,
|
151 + | CredentialsProfile,
|
152 + | CredentialsProfileSourceProfile,
|
153 + | CredentialsProfileNamedProvider,
|
154 + | CredentialsProfileStsWebIdToken,
|
155 + | CredentialsProfileSso,
|
156 + | CredentialsSso,
|
157 + | CredentialsProfileSsoLegacy,
|
158 + | CredentialsSsoLegacy,
|
159 + | CredentialsProfileProcess,
|
160 + | CredentialsProcess,
|
161 + | CredentialsBoto2ConfigFile,
|
162 + | CredentialsAwsSdkStore,
|
163 + | CredentialsHttp,
|
164 + | CredentialsImds
|
140 165 | );
|
141 166 |
|
142 167 | pub(crate) trait ProvideBusinessMetric {
|
143 168 | fn provide_business_metric(&self) -> Option<BusinessMetric>;
|
144 169 | }
|
145 170 |
|
146 171 | impl ProvideBusinessMetric for SmithySdkFeature {
|
147 172 | fn provide_business_metric(&self) -> Option<BusinessMetric> {
|
148 173 | use SmithySdkFeature::*;
|
149 174 | match self {
|
150 175 | Waiter => Some(BusinessMetric::Waiter),
|
151 176 | Paginator => Some(BusinessMetric::Paginator),
|
152 177 | GzipRequestCompression => Some(BusinessMetric::GzipRequestCompression),
|
153 178 | ProtocolRpcV2Cbor => Some(BusinessMetric::ProtocolRpcV2Cbor),
|
154 179 | RetryModeStandard => Some(BusinessMetric::RetryModeStandard),
|
155 180 | RetryModeAdaptive => Some(BusinessMetric::RetryModeAdaptive),
|
156 181 | FlexibleChecksumsReqCrc32 => Some(BusinessMetric::FlexibleChecksumsReqCrc32),
|
157 182 | FlexibleChecksumsReqCrc32c => Some(BusinessMetric::FlexibleChecksumsReqCrc32c),
|
158 183 | FlexibleChecksumsReqCrc64 => Some(BusinessMetric::FlexibleChecksumsReqCrc64),
|
159 184 | FlexibleChecksumsReqSha1 => Some(BusinessMetric::FlexibleChecksumsReqSha1),
|
160 185 | FlexibleChecksumsReqSha256 => Some(BusinessMetric::FlexibleChecksumsReqSha256),
|
161 186 | FlexibleChecksumsReqWhenSupported => {
|
162 187 | Some(BusinessMetric::FlexibleChecksumsReqWhenSupported)
|
163 188 | }
|
164 189 | FlexibleChecksumsReqWhenRequired => {
|
165 190 | Some(BusinessMetric::FlexibleChecksumsReqWhenRequired)
|
166 191 | }
|
167 192 | FlexibleChecksumsResWhenSupported => {
|
168 193 | Some(BusinessMetric::FlexibleChecksumsResWhenSupported)
|
169 194 | }
|
170 195 | FlexibleChecksumsResWhenRequired => {
|
171 196 | Some(BusinessMetric::FlexibleChecksumsResWhenRequired)
|
172 197 | }
|
173 198 | otherwise => {
|
174 199 | // This may occur if a customer upgrades only the `aws-smithy-runtime-api` crate
|
175 200 | // while continuing to use an outdated version of an SDK crate or the `aws-runtime`
|
176 201 | // crate.
|
177 202 | tracing::warn!(
|
178 203 | "Attempted to provide `BusinessMetric` for `{otherwise:?}`, which is not recognized in the current version of the `aws-runtime` crate. \
|
179 204 | Consider upgrading to the latest version to ensure that all tracked features are properly reported in your metrics."
|
180 205 | );
|
181 206 | None
|
182 207 | }
|
183 208 | }
|
184 209 | }
|
185 210 | }
|
186 211 |
|
187 212 | impl ProvideBusinessMetric for AwsSdkFeature {
|
188 213 | fn provide_business_metric(&self) -> Option<BusinessMetric> {
|
189 214 | use AwsSdkFeature::*;
|
190 215 | match self {
|
191 216 | S3Transfer => Some(BusinessMetric::S3Transfer),
|
192 217 | }
|
193 218 | }
|
194 219 | }
|
195 220 |
|
221 + | impl ProvideBusinessMetric for AwsCredentialFeature {
|
222 + | fn provide_business_metric(&self) -> Option<BusinessMetric> {
|
223 + | use AwsCredentialFeature::*;
|
224 + | match self {
|
225 + | CredentialsCode => Some(BusinessMetric::CredentialsCode),
|
226 + | CredentialsEnvVars => Some(BusinessMetric::CredentialsEnvVars),
|
227 + | CredentialsEnvVarsStsWebIdToken => {
|
228 + | Some(BusinessMetric::CredentialsEnvVarsStsWebIdToken)
|
229 + | }
|
230 + | CredentialsStsAssumeRole => Some(BusinessMetric::CredentialsStsAssumeRole),
|
231 + | CredentialsStsAssumeRoleSaml => Some(BusinessMetric::CredentialsStsAssumeRoleSaml),
|
232 + | CredentialsStsAssumeRoleWebId => Some(BusinessMetric::CredentialsStsAssumeRoleWebId),
|
233 + | CredentialsStsFederationToken => Some(BusinessMetric::CredentialsStsFederationToken),
|
234 + | CredentialsStsSessionToken => Some(BusinessMetric::CredentialsStsSessionToken),
|
235 + | CredentialsProfile => Some(BusinessMetric::CredentialsProfile),
|
236 + | CredentialsProfileSourceProfile => {
|
237 + | Some(BusinessMetric::CredentialsProfileSourceProfile)
|
238 + | }
|
239 + | CredentialsProfileNamedProvider => {
|
240 + | Some(BusinessMetric::CredentialsProfileNamedProvider)
|
241 + | }
|
242 + | CredentialsProfileStsWebIdToken => {
|
243 + | Some(BusinessMetric::CredentialsProfileStsWebIdToken)
|
244 + | }
|
245 + | CredentialsProfileSso => Some(BusinessMetric::CredentialsProfileSso),
|
246 + | CredentialsSso => Some(BusinessMetric::CredentialsSso),
|
247 + | CredentialsProfileProcess => Some(BusinessMetric::CredentialsProfileProcess),
|
248 + | CredentialsProcess => Some(BusinessMetric::CredentialsProcess),
|
249 + | CredentialsHttp => Some(BusinessMetric::CredentialsHttp),
|
250 + | CredentialsImds => Some(BusinessMetric::CredentialsImds),
|
251 + | otherwise => {
|
252 + | // This may occur if a customer upgrades only the `aws-smithy-runtime-api` crate
|
253 + | // while continuing to use an outdated version of an SDK crate or the `aws-credential-types`
|
254 + | // crate.
|
255 + | tracing::warn!(
|
256 + | "Attempted to provide `BusinessMetric` for `{otherwise:?}`, which is not recognized in the current version of the `aws-runtime` crate. \
|
257 + | Consider upgrading to the latest version to ensure that all tracked features are properly reported in your metrics."
|
258 + | );
|
259 + | None
|
260 + | }
|
261 + | }
|
262 + | }
|
263 + | }
|
264 + |
|
196 265 | #[derive(Clone, Debug, Default)]
|
197 266 | pub(super) struct BusinessMetrics(Vec<BusinessMetric>);
|
198 267 |
|
199 268 | impl BusinessMetrics {
|
200 269 | pub(super) fn push(&mut self, metric: BusinessMetric) {
|
201 270 | self.0.push(metric);
|
202 271 | }
|
203 272 |
|
204 273 | pub(super) fn is_empty(&self) -> bool {
|
205 274 | self.0.is_empty()
|
290 359 | "SIGV4A_SIGNING": "S",
|
291 360 | "RESOLVED_ACCOUNT_ID": "T",
|
292 361 | "FLEXIBLE_CHECKSUMS_REQ_CRC32" : "U",
|
293 362 | "FLEXIBLE_CHECKSUMS_REQ_CRC32C" : "V",
|
294 363 | "FLEXIBLE_CHECKSUMS_REQ_CRC64" : "W",
|
295 364 | "FLEXIBLE_CHECKSUMS_REQ_SHA1" : "X",
|
296 365 | "FLEXIBLE_CHECKSUMS_REQ_SHA256" : "Y",
|
297 366 | "FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED" : "Z",
|
298 367 | "FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED" : "a",
|
299 368 | "FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED" : "b",
|
300 - | "FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED" : "c"
|
369 + | "FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED" : "c",
|
370 + | "DDB_MAPPER" : "d",
|
371 + | "CREDENTIALS_CODE" : "e",
|
372 + | "CREDENTIALS_JVM_SYSTEM_PROPERTIES" : "f",
|
373 + | "CREDENTIALS_ENV_VARS" : "g",
|
374 + | "CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN" : "h",
|
375 + | "CREDENTIALS_STS_ASSUME_ROLE" : "i",
|
376 + | "CREDENTIALS_STS_ASSUME_ROLE_SAML" : "j",
|
377 + | "CREDENTIALS_STS_ASSUME_ROLE_WEB_ID" : "k",
|
378 + | "CREDENTIALS_STS_FEDERATION_TOKEN" : "l",
|
379 + | "CREDENTIALS_STS_SESSION_TOKEN" : "m",
|
380 + | "CREDENTIALS_PROFILE" : "n",
|
381 + | "CREDENTIALS_PROFILE_SOURCE_PROFILE" : "o",
|
382 + | "CREDENTIALS_PROFILE_NAMED_PROVIDER" : "p",
|
383 + | "CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN" : "q",
|
384 + | "CREDENTIALS_PROFILE_SSO" : "r",
|
385 + | "CREDENTIALS_SSO" : "s",
|
386 + | "CREDENTIALS_PROFILE_SSO_LEGACY" : "t",
|
387 + | "CREDENTIALS_SSO_LEGACY" : "u",
|
388 + | "CREDENTIALS_PROFILE_PROCESS" : "v",
|
389 + | "CREDENTIALS_PROCESS" : "w",
|
390 + | "CREDENTIALS_BOTO2_CONFIG_FILE" : "x",
|
391 + | "CREDENTIALS_AWS_SDK_STORE" : "y",
|
392 + | "CREDENTIALS_HTTP" : "z",
|
393 + | "CREDENTIALS_IMDS" : "0"
|
394 + |
|
301 395 | }
|
302 396 | "#;
|
303 397 |
|
304 398 | let expected: HashMap<&str, &str> = serde_json::from_str(EXPECTED).unwrap();
|
305 399 | assert_eq!(expected.len(), FEATURE_ID_TO_METRIC_VALUE.len());
|
306 400 |
|
307 401 | for (feature_id, metric_value) in &*FEATURE_ID_TO_METRIC_VALUE {
|
308 402 | let expected = expected.get(format!("{feature_id}").as_str());
|
309 403 | assert_eq!(
|
310 404 | expected.unwrap_or_else(|| panic!("Expected {feature_id} to have value `{metric_value}` but it was `{expected:?}` instead.")),
|