Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
source: pokemon-service/tests/metrics_test.rs
expression: metrics_output
---
{"_aws":{"CloudWatchMetrics":[{"Namespace":"Ns","Dimensions":[[]],"Metrics":[{"Name":"found"},{"Name":"outstanding_requests"},{"Name":"http_status_code"},{"Name":"error"},{"Name":"fault"},{"Name":"operation_time","Unit":"Milliseconds"}]}],"Timestamp":"[timestamp]},"found":1,"outstanding_requests":1,"http_status_code":200,"error":0,"fault":0,"operation_time":"[operation_time],"test_request_metric":"test request metric","test_response_metric":"test response metric","requested_pokemon_name":"pikachu","service":"PokemonService","service_version":"2024-03-18","operation":"GetPokemonSpecies","request_id":"[request_id]}
{"_aws":{"CloudWatchMetrics":[{"Namespace":"Ns","Dimensions":[[]],"Metrics":[{"Name":"authenticated"},{"Name":"outstanding_requests"},{"Name":"http_status_code"},{"Name":"error"},{"Name":"fault"},{"Name":"operation_time","Unit":"Milliseconds"}]}],"Timestamp":"[timestamp]},"authenticated":0,"outstanding_requests":1,"http_status_code":401,"error":1,"fault":0,"operation_time":"[operation_time],"test_request_metric":"test request metric","test_response_metric":"test response metric","user":"ash","service":"PokemonService","service_version":"2024-03-18","operation":"GetStorage","request_id":"[request_id]}
{"_aws":{"CloudWatchMetrics":[{"Namespace":"Ns","Dimensions":[[]],"Metrics":[{"Name":"supported_region"},{"Name":"outstanding_requests"},{"Name":"http_status_code"},{"Name":"error"},{"Name":"fault"},{"Name":"operation_time","Unit":"Milliseconds"}]}],"Timestamp":"[timestamp]},"supported_region":0,"outstanding_requests":1,"http_status_code":500,"error":0,"fault":1,"operation_time":"[operation_time],"test_request_metric":"test request metric","test_response_metric":"test response metric","requested_region":"trigger500","service":"PokemonService","service_version":"2024-03-18","operation":"CapturePokemon","request_id":"[request_id]}
{"_aws":{"CloudWatchMetrics":[{"Namespace":"Ns","Dimensions":[[]],"Metrics":[{"Name":"found"},{"Name":"outstanding_requests"},{"Name":"http_status_code"},{"Name":"success"},{"Name":"error"},{"Name":"fault"},{"Name":"operation_time","Unit":"Milliseconds"}]}],"Timestamp":"[timestamp]},"found":1,"outstanding_requests":1,"http_status_code":200,"success":1,"error":0,"fault":0,"operation_time":"[operation_time],"test_request_metric":"test request metric","test_response_metric":"test response metric","requested_pokemon_name":"pikachu","service":"PokemonService","service_version":"2024-03-18","operation":"GetPokemonSpecies","request_id":"[request_id]}
{"_aws":{"CloudWatchMetrics":[{"Namespace":"Ns","Dimensions":[[]],"Metrics":[{"Name":"authenticated"},{"Name":"outstanding_requests"},{"Name":"http_status_code"},{"Name":"success"},{"Name":"error"},{"Name":"fault"},{"Name":"operation_time","Unit":"Milliseconds"}]}],"Timestamp":"[timestamp]},"authenticated":0,"outstanding_requests":1,"http_status_code":401,"success":0,"error":1,"fault":0,"operation_time":"[operation_time],"test_request_metric":"test request metric","test_response_metric":"test response metric","user":"ash","service":"PokemonService","service_version":"2024-03-18","operation":"GetStorage","request_id":"[request_id]}
{"_aws":{"CloudWatchMetrics":[{"Namespace":"Ns","Dimensions":[[]],"Metrics":[{"Name":"supported_region"},{"Name":"outstanding_requests"},{"Name":"http_status_code"},{"Name":"success"},{"Name":"error"},{"Name":"fault"},{"Name":"operation_time","Unit":"Milliseconds"}]}],"Timestamp":"[timestamp]},"supported_region":0,"outstanding_requests":1,"http_status_code":500,"success":0,"error":0,"fault":1,"operation_time":"[operation_time],"test_request_metric":"test request metric","test_response_metric":"test response metric","requested_region":"trigger500","service":"PokemonService","service_version":"2024-03-18","operation":"CapturePokemon","request_id":"[request_id]}
14 changes: 7 additions & 7 deletions rust-runtime/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions rust-runtime/aws-smithy-http-server-metrics/src/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,12 @@ pub struct DefaultRequestMetrics {
#[derive(Default, Debug)]
pub struct DefaultResponseMetrics {
pub(crate) http_status_code: Option<u16>,
/// Success indicator (1 if 2xx status code, 0 otherwise)
pub(crate) success: Option<u8>,
/// Client error indicator (1 if 4xx status code, 0 otherwise)
pub(crate) error: Option<u64>,
pub(crate) error: Option<u8>,
/// Server fault indicator (1 if 5xx status code, 0 otherwise)
pub(crate) fault: Option<u64>,
pub(crate) fault: Option<u8>,
/// Wallclock time from pre-deserialization of the model input to post-serialization of the model output
pub(crate) operation_time: Option<Duration>,
}
Expand All @@ -103,6 +105,7 @@ pub struct DefaultRequestMetricsConfig {
pub struct DefaultResponseMetricsConfig {
pub(crate) disable_all: bool,
pub(crate) disable_http_status_code: bool,
pub(crate) disable_success: bool,
pub(crate) disable_error: bool,
pub(crate) disable_fault: bool,
pub(crate) disable_operation_time: bool,
Expand Down
34 changes: 23 additions & 11 deletions rust-runtime/aws-smithy-http-server-metrics/src/layer/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,50 +44,62 @@ macro_rules! impl_disable_methods {
self
}

/// Disable the `request_id` metric
/// Disable the default `outstanding_requests` metric
pub fn disable_default_outstanding_requests_metric(mut self) -> Self {
self.default_req_metrics_config.disable_outstanding_requests = true;
self
}

/// Disable the default `request_id` metric
pub fn disable_default_request_id_metric(mut self) -> Self {
self.default_req_metrics_config.disable_request_id = true;
self
}

/// Disable the `operation_name` metric
/// Disable the default `operation_name` metric
pub fn disable_default_operation_metric(mut self) -> Self {
self.default_req_metrics_config.disable_operation = true;
self
}

/// Disable the `service_name` metric
/// Disable the default `service_name` metric
pub fn disable_default_service_metric(mut self) -> Self {
self.default_req_metrics_config.disable_service = true;
self
}

/// Disable the `service_version` metric
/// Disable the default `service_version` metric
pub fn disable_default_service_version_metric(mut self) -> Self {
self.default_req_metrics_config.disable_service_version = true;
self
}

/// Disable the `http_status_code` metric
/// Disable the default `http_status_code` metric
pub fn disable_default_http_status_code_metric(mut self) -> Self {
self.default_res_metrics_config.disable_http_status_code = true;
self
}

/// Disable the `error` metric
pub fn disable_error_metric(mut self) -> Self {
/// Disable the default `success` metric
pub fn disable_default_success_metric(mut self) -> Self {
self.default_res_metrics_config.disable_success = true;
self
}

/// Disable the default `error` metric
pub fn disable_default_error_metric(mut self) -> Self {
self.default_res_metrics_config.disable_error = true;
self
}

/// Disable the `fault` metric
pub fn disable_fault_metric(mut self) -> Self {
/// Disable the default `fault` metric
pub fn disable_default_fault_metric(mut self) -> Self {
self.default_res_metrics_config.disable_fault = true;
self
}

/// Disable the `operation_time` metric
pub fn disable_operation_time_metric(mut self) -> Self {
/// Disable the default `operation_time` metric
pub fn disable_default_operation_time_metric(mut self) -> Self {
self.default_res_metrics_config.disable_operation_time = true;
self
}
Expand Down
8 changes: 8 additions & 0 deletions rust-runtime/aws-smithy-http-server-metrics/src/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,12 @@ fn get_default_response_metrics(
let status = res.status();
let status_code = status.as_u16();

let success = if (200..300).contains(&status_code) {
Some(1)
} else {
Some(0)
};

let error = if (400..500).contains(&status_code) {
Some(1)
} else {
Expand All @@ -319,6 +325,7 @@ fn get_default_response_metrics(

DefaultResponseMetrics {
http_status_code: Some(status_code),
success,
error,
fault,
operation_time,
Expand Down Expand Up @@ -361,6 +368,7 @@ fn configure_default_response_metrics(
http_status_code: metrics
.http_status_code
.filter(|_| !config.disable_http_status_code),
success: metrics.success.filter(|_| !config.disable_success),
error: metrics.error.filter(|_| !config.disable_error),
fault: metrics.fault.filter(|_| !config.disable_fault),
operation_time: metrics
Expand Down
Loading