Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
66 changes: 66 additions & 0 deletions include/aws/s3/s3_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -1376,6 +1376,72 @@ int aws_s3_request_metrics_get_receive_end_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_receive_end_time);

/* Get the time stamp when the signing for the request started. Timestamps are from
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_sign_start_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_signing_start_time);

/* Get the time stamp when the signing for the request ended. Timestamps are from
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_sign_end_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_signing_end_time);

/* The time duration for the request singing (sign_end_timestamp_ns -
* sign_start_timestamp_ns).
* AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_signing_duration_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_signing_duration);

/* Get the time stamp when the memory acquisition for the request started. Timestamps are from
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_mem_acquire_start_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_mem_acquire_start_time);

/* Get the time stamp when the memory acquisition for the request ended. Timestamps are from
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_mem_acquire_end_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_mem_acquire_end_time);

/* The time duration for the request memory acquisition (mem_acquire_end_timestamp_ns -
* mem_acquire_start_timestamp_ns).
* AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_mem_acquire_duration_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_mem_acquire_duration);

/* Get the time stamp when the delivery of the request response started. Timestamps are from
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_delivery_start_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_delivery_start_time);

/* Get the time stamp when the delivery of the request response ended. Timestamps are from
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_delivery_end_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_delivery_end_time);

/* The time duration for the request delivery(delivery_end_timestamp_ns -
* delivery_start_timestamp_ns).
* AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
AWS_S3_API
int aws_s3_request_metrics_get_delivery_duration_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_delivery_duration);

/* The time duration for the request from start receiving to finish receiving (receive_end_timestamp_ns -
* receive_start_timestamp_ns).
* AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
Expand Down
108 changes: 108 additions & 0 deletions source/s3_request.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,114 @@ int aws_s3_request_metrics_get_receiving_duration_ns(
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_sign_start_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_signing_start_time) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_signing_start_time);
if (metrics->time_metrics.sign_start_timestamp_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_signing_start_time = metrics->time_metrics.sign_start_timestamp_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_sign_end_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_signing_end_time) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_signing_end_time);
if (metrics->time_metrics.sign_end_timestamp_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_signing_end_time = metrics->time_metrics.sign_end_timestamp_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_signing_duration_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_signing_duration) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_signing_duration);
if (metrics->time_metrics.signing_duration_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_signing_duration = metrics->time_metrics.signing_duration_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_mem_acquire_start_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_mem_acquire_start_time) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_mem_acquire_start_time);
if (metrics->time_metrics.mem_acquire_start_timestamp_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_mem_acquire_start_time = metrics->time_metrics.mem_acquire_start_timestamp_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_mem_acquire_end_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_mem_acquire_end_time) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_mem_acquire_end_time);
if (metrics->time_metrics.mem_acquire_end_timestamp_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_mem_acquire_end_time = metrics->time_metrics.mem_acquire_end_timestamp_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_mem_acquire_duration_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_mem_acquire_duration) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_mem_acquire_duration);
if (metrics->time_metrics.mem_acquire_duration_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_mem_acquire_duration = metrics->time_metrics.mem_acquire_duration_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_delivery_start_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_delivery_start_time) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_delivery_start_time);
if (metrics->time_metrics.deliver_start_timestamp_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_delivery_start_time = metrics->time_metrics.deliver_start_timestamp_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_delivery_end_timestamp_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_delivery_end_time) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_delivery_end_time);
if (metrics->time_metrics.deliver_end_timestamp_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_delivery_end_time = metrics->time_metrics.deliver_end_timestamp_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_delivery_duration_ns(
const struct aws_s3_request_metrics *metrics,
uint64_t *out_delivery_duration) {
AWS_PRECONDITION(metrics);
AWS_PRECONDITION(out_delivery_duration);
if (metrics->time_metrics.deliver_duration_ns < 0) {
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
}
*out_delivery_duration = metrics->time_metrics.deliver_duration_ns;
return AWS_OP_SUCCESS;
}

int aws_s3_request_metrics_get_response_status_code(
const struct aws_s3_request_metrics *metrics,
int *response_status) {
Expand Down