130 129 | Sigv4aSigning,
|
131 130 | ResolvedAccountId,
|
132 131 | FlexibleChecksumsReqCrc32,
|
133 132 | FlexibleChecksumsReqCrc32c,
|
134 133 | FlexibleChecksumsReqCrc64,
|
135 134 | FlexibleChecksumsReqSha1,
|
136 135 | FlexibleChecksumsReqSha256,
|
137 136 | FlexibleChecksumsReqWhenSupported,
|
138 137 | FlexibleChecksumsReqWhenRequired,
|
139 138 | FlexibleChecksumsResWhenSupported,
|
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,
|
165 - | SsoLoginDevice,
|
166 - | SsoLoginAuth,
|
167 - | BearerServiceEnvVars
|
139 + | FlexibleChecksumsResWhenRequired
|
168 140 | );
|
169 141 |
|
170 142 | pub(crate) trait ProvideBusinessMetric {
|
171 143 | fn provide_business_metric(&self) -> Option<BusinessMetric>;
|
172 144 | }
|
173 145 |
|
174 146 | impl ProvideBusinessMetric for SmithySdkFeature {
|
175 147 | fn provide_business_metric(&self) -> Option<BusinessMetric> {
|
176 148 | use SmithySdkFeature::*;
|
177 149 | match self {
|
178 150 | Waiter => Some(BusinessMetric::Waiter),
|
179 151 | Paginator => Some(BusinessMetric::Paginator),
|
180 152 | GzipRequestCompression => Some(BusinessMetric::GzipRequestCompression),
|
181 153 | ProtocolRpcV2Cbor => Some(BusinessMetric::ProtocolRpcV2Cbor),
|
182 154 | RetryModeStandard => Some(BusinessMetric::RetryModeStandard),
|
183 155 | RetryModeAdaptive => Some(BusinessMetric::RetryModeAdaptive),
|
184 156 | FlexibleChecksumsReqCrc32 => Some(BusinessMetric::FlexibleChecksumsReqCrc32),
|
185 157 | FlexibleChecksumsReqCrc32c => Some(BusinessMetric::FlexibleChecksumsReqCrc32c),
|
186 158 | FlexibleChecksumsReqCrc64 => Some(BusinessMetric::FlexibleChecksumsReqCrc64),
|
187 159 | FlexibleChecksumsReqSha1 => Some(BusinessMetric::FlexibleChecksumsReqSha1),
|
188 160 | FlexibleChecksumsReqSha256 => Some(BusinessMetric::FlexibleChecksumsReqSha256),
|
189 161 | FlexibleChecksumsReqWhenSupported => {
|
190 162 | Some(BusinessMetric::FlexibleChecksumsReqWhenSupported)
|
191 163 | }
|
192 164 | FlexibleChecksumsReqWhenRequired => {
|
193 165 | Some(BusinessMetric::FlexibleChecksumsReqWhenRequired)
|
194 166 | }
|
195 167 | FlexibleChecksumsResWhenSupported => {
|
196 168 | Some(BusinessMetric::FlexibleChecksumsResWhenSupported)
|
197 169 | }
|
198 170 | FlexibleChecksumsResWhenRequired => {
|
199 171 | Some(BusinessMetric::FlexibleChecksumsResWhenRequired)
|
200 172 | }
|
201 173 | otherwise => {
|
202 174 | // This may occur if a customer upgrades only the `aws-smithy-runtime-api` crate
|
203 175 | // while continuing to use an outdated version of an SDK crate or the `aws-runtime`
|
204 176 | // crate.
|
205 177 | tracing::warn!(
|
206 178 | "Attempted to provide `BusinessMetric` for `{otherwise:?}`, which is not recognized in the current version of the `aws-runtime` crate. \
|
207 179 | Consider upgrading to the latest version to ensure that all tracked features are properly reported in your metrics."
|
208 180 | );
|
209 181 | None
|
210 182 | }
|
211 183 | }
|
212 184 | }
|
213 185 | }
|
214 186 |
|
215 187 | impl ProvideBusinessMetric for AwsSdkFeature {
|
216 188 | fn provide_business_metric(&self) -> Option<BusinessMetric> {
|
217 189 | use AwsSdkFeature::*;
|
218 190 | match self {
|
219 191 | S3Transfer => Some(BusinessMetric::S3Transfer),
|
220 - | SsoLoginDevice => Some(BusinessMetric::SsoLoginDevice),
|
221 - | SsoLoginAuth => Some(BusinessMetric::SsoLoginAuth),
|
222 - | }
|
223 - | }
|
224 - | }
|
225 - |
|
226 - | impl ProvideBusinessMetric for AwsCredentialFeature {
|
227 - | fn provide_business_metric(&self) -> Option<BusinessMetric> {
|
228 - | use AwsCredentialFeature::*;
|
229 - | match self {
|
230 - | CredentialsCode => Some(BusinessMetric::CredentialsCode),
|
231 - | CredentialsEnvVars => Some(BusinessMetric::CredentialsEnvVars),
|
232 - | CredentialsEnvVarsStsWebIdToken => {
|
233 - | Some(BusinessMetric::CredentialsEnvVarsStsWebIdToken)
|
234 - | }
|
235 - | CredentialsStsAssumeRole => Some(BusinessMetric::CredentialsStsAssumeRole),
|
236 - | CredentialsStsAssumeRoleSaml => Some(BusinessMetric::CredentialsStsAssumeRoleSaml),
|
237 - | CredentialsStsAssumeRoleWebId => Some(BusinessMetric::CredentialsStsAssumeRoleWebId),
|
238 - | CredentialsStsFederationToken => Some(BusinessMetric::CredentialsStsFederationToken),
|
239 - | CredentialsStsSessionToken => Some(BusinessMetric::CredentialsStsSessionToken),
|
240 - | CredentialsProfile => Some(BusinessMetric::CredentialsProfile),
|
241 - | CredentialsProfileSourceProfile => {
|
242 - | Some(BusinessMetric::CredentialsProfileSourceProfile)
|
243 - | }
|
244 - | CredentialsProfileNamedProvider => {
|
245 - | Some(BusinessMetric::CredentialsProfileNamedProvider)
|
246 - | }
|
247 - | CredentialsProfileStsWebIdToken => {
|
248 - | Some(BusinessMetric::CredentialsProfileStsWebIdToken)
|
249 - | }
|
250 - | CredentialsProfileSso => Some(BusinessMetric::CredentialsProfileSso),
|
251 - | CredentialsSso => Some(BusinessMetric::CredentialsSso),
|
252 - | CredentialsProfileProcess => Some(BusinessMetric::CredentialsProfileProcess),
|
253 - | CredentialsProcess => Some(BusinessMetric::CredentialsProcess),
|
254 - | CredentialsHttp => Some(BusinessMetric::CredentialsHttp),
|
255 - | CredentialsImds => Some(BusinessMetric::CredentialsImds),
|
256 - | BearerServiceEnvVars => Some(BusinessMetric::BearerServiceEnvVars),
|
257 - | otherwise => {
|
258 - | // This may occur if a customer upgrades only the `aws-smithy-runtime-api` crate
|
259 - | // while continuing to use an outdated version of an SDK crate or the `aws-credential-types`
|
260 - | // crate.
|
261 - | tracing::warn!(
|
262 - | "Attempted to provide `BusinessMetric` for `{otherwise:?}`, which is not recognized in the current version of the `aws-runtime` crate. \
|
263 - | Consider upgrading to the latest version to ensure that all tracked features are properly reported in your metrics."
|
264 - | );
|
265 - | None
|
266 - | }
|
267 192 | }
|
268 193 | }
|
269 194 | }
|
270 195 |
|
271 196 | #[derive(Clone, Debug, Default)]
|
272 197 | pub(super) struct BusinessMetrics(Vec<BusinessMetric>);
|
273 198 |
|
274 199 | impl BusinessMetrics {
|
275 200 | pub(super) fn push(&mut self, metric: BusinessMetric) {
|
276 201 | self.0.push(metric);
|
335 260 | .as_str()
|
336 261 | .from_case(Case::Pascal)
|
337 262 | .with_boundaries(&[Boundary::DigitUpper, Boundary::LowerUpper])
|
338 263 | .to_case(Case::ScreamingSnake),
|
339 264 | )
|
340 265 | }
|
341 266 | }
|
342 267 |
|
343 268 | #[test]
|
344 269 | fn feature_id_to_metric_value() {
|
345 - | const EXPECTED: &str = include_str!("test_data/feature_id_to_metric_value.json");
|
270 + | const EXPECTED: &str = r#"
|
271 + | {
|
272 + | "RESOURCE_MODEL": "A",
|
273 + | "WAITER": "B",
|
274 + | "PAGINATOR": "C",
|
275 + | "RETRY_MODE_LEGACY": "D",
|
276 + | "RETRY_MODE_STANDARD": "E",
|
277 + | "RETRY_MODE_ADAPTIVE": "F",
|
278 + | "S3_TRANSFER": "G",
|
279 + | "S3_CRYPTO_V1N": "H",
|
280 + | "S3_CRYPTO_V2": "I",
|
281 + | "S3_EXPRESS_BUCKET": "J",
|
282 + | "S3_ACCESS_GRANTS": "K",
|
283 + | "GZIP_REQUEST_COMPRESSION": "L",
|
284 + | "PROTOCOL_RPC_V2_CBOR": "M",
|
285 + | "ENDPOINT_OVERRIDE": "N",
|
286 + | "ACCOUNT_ID_ENDPOINT": "O",
|
287 + | "ACCOUNT_ID_MODE_PREFERRED": "P",
|
288 + | "ACCOUNT_ID_MODE_DISABLED": "Q",
|
289 + | "ACCOUNT_ID_MODE_REQUIRED": "R",
|
290 + | "SIGV4A_SIGNING": "S",
|
291 + | "RESOLVED_ACCOUNT_ID": "T",
|
292 + | "FLEXIBLE_CHECKSUMS_REQ_CRC32" : "U",
|
293 + | "FLEXIBLE_CHECKSUMS_REQ_CRC32C" : "V",
|
294 + | "FLEXIBLE_CHECKSUMS_REQ_CRC64" : "W",
|
295 + | "FLEXIBLE_CHECKSUMS_REQ_SHA1" : "X",
|
296 + | "FLEXIBLE_CHECKSUMS_REQ_SHA256" : "Y",
|
297 + | "FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED" : "Z",
|
298 + | "FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED" : "a",
|
299 + | "FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED" : "b",
|
300 + | "FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED" : "c"
|
301 + | }
|
302 + | "#;
|
346 303 |
|
347 304 | let expected: HashMap<&str, &str> = serde_json::from_str(EXPECTED).unwrap();
|
348 305 | assert_eq!(expected.len(), FEATURE_ID_TO_METRIC_VALUE.len());
|
349 306 |
|
350 307 | for (feature_id, metric_value) in &*FEATURE_ID_TO_METRIC_VALUE {
|
351 308 | let expected = expected.get(format!("{feature_id}").as_str());
|
352 309 | assert_eq!(
|
353 310 | expected.unwrap_or_else(|| panic!("Expected {feature_id} to have value `{metric_value}` but it was `{expected:?}` instead.")),
|
354 311 | metric_value,
|
355 312 | );
|