@@ -92,23 +92,11 @@ void aws_s3_request_setup_send_data(struct aws_s3_request *request, struct aws_h
9292 if (request -> num_times_prepared > 0 && request -> send_data .metrics != NULL ) {
9393 /* If there is a metrics from previous attempt, complete it now. */
9494
95- /* checkpoint retry_delay_end and calculate duration */
96- aws_high_res_clock_get_ticks (
97- (uint64_t * )& request -> send_data .metrics -> time_metrics .retry_delay_end_timestamp_ns );
98- request -> send_data .metrics -> time_metrics .retry_delay_duration_ns =
99- request -> send_data .metrics -> time_metrics .retry_delay_end_timestamp_ns -
100- request -> send_data .metrics -> time_metrics .retry_delay_start_timestamp_ns ;
101-
10295 struct aws_s3_request_metrics * metric = request -> send_data .metrics ;
10396 aws_high_res_clock_get_ticks ((uint64_t * )& metric -> time_metrics .end_timestamp_ns );
10497 metric -> time_metrics .total_duration_ns =
10598 metric -> time_metrics .end_timestamp_ns - metric -> time_metrics .start_timestamp_ns ;
10699
107- if (metric -> time_metrics .receive_start_timestamp_ns != -1 ) {
108- metric -> time_metrics .service_call_duration_ns =
109- metric -> time_metrics .receive_start_timestamp_ns - metric -> time_metrics .conn_acquire_start_timestamp_ns ;
110- }
111-
112100 struct aws_s3_meta_request * meta_request = request -> meta_request ;
113101 if (meta_request != NULL && meta_request -> telemetry_callback != NULL ) {
114102
@@ -120,7 +108,7 @@ void aws_s3_request_setup_send_data(struct aws_s3_request *request, struct aws_h
120108 }
121109
122110 /* retain the first attempt timestamp since we should not re-initialize it. */
123- first_attempt_start_timestamp_ns = metric -> time_metrics .request_start_timestamp_ns ;
111+ first_attempt_start_timestamp_ns = metric -> time_metrics .s3_request_first_attempt_start_timestamp_ns ;
124112
125113 request -> send_data .metrics = aws_s3_request_metrics_release (metric );
126114 aws_s3_request_clean_up_send_data (request );
@@ -129,20 +117,24 @@ void aws_s3_request_setup_send_data(struct aws_s3_request *request, struct aws_h
129117
130118 // metrics persisted to the next request
131119 request -> send_data .metrics -> crt_info_metrics .retry_attempt = request -> num_times_prepared ;
132- request -> send_data .metrics -> time_metrics .request_start_timestamp_ns = first_attempt_start_timestamp_ns ;
133- }
134-
135- /* Set request start timestamp */
136- if (first_attempt_start_timestamp_ns == -1 ) {
137- aws_high_res_clock_get_ticks ((uint64_t * )& request -> send_data .metrics -> time_metrics .request_start_timestamp_ns );
120+ request -> send_data .metrics -> time_metrics .s3_request_first_attempt_start_timestamp_ns = first_attempt_start_timestamp_ns ;
138121 }
139122
140123 request -> send_data .message = message ;
141124 s_populate_metrics_from_message (request , message );
142125 /* Start the timestamp */
143126 aws_high_res_clock_get_ticks ((uint64_t * )& request -> send_data .metrics -> time_metrics .start_timestamp_ns );
144127
145- request -> send_data .metrics -> crt_info_metrics .part_number = request -> part_number ;
128+ /* Set s3 request start timestamp if first attempt*/
129+ if (first_attempt_start_timestamp_ns == -1 ) {
130+ request -> send_data .metrics -> time_metrics .s3_request_first_attempt_start_timestamp_ns =
131+ request -> send_data .metrics -> time_metrics .start_timestamp_ns ;
132+ }
133+
134+ /* copy delay duration since previous attempt */
135+ request -> send_data .metrics -> time_metrics .retry_delay_start_timestamp_ns = request -> retry_start_timestamp_ns ;
136+ request -> send_data .metrics -> time_metrics .retry_delay_end_timestamp_ns = request -> retry_end_timestamp_ns ;
137+ request -> send_data .metrics -> time_metrics .retry_delay_duration_ns = request -> retry_duration_ns ;
146138
147139 aws_http_message_acquire (message );
148140}
@@ -233,9 +225,9 @@ struct aws_s3_request_metrics *aws_s3_request_metrics_new(struct aws_allocator *
233225 struct aws_s3_request_metrics * metrics = aws_mem_calloc (allocator , 1 , sizeof (struct aws_s3_request_metrics ));
234226 metrics -> allocator = allocator ;
235227
236- metrics -> time_metrics .request_start_timestamp_ns = -1 ;
237- metrics -> time_metrics .request_end_timestamp_ns = -1 ;
238- metrics -> time_metrics .request_duration_ns = -1 ;
228+ metrics -> time_metrics .s3_request_first_attempt_start_timestamp_ns = -1 ;
229+ metrics -> time_metrics .s3_request_last_attempt_end_timestamp_ns = -1 ;
230+ metrics -> time_metrics .s3_request_total_duration_ns = -1 ;
239231
240232 metrics -> time_metrics .start_timestamp_ns = -1 ;
241233 metrics -> time_metrics .end_timestamp_ns = -1 ;
@@ -617,35 +609,35 @@ uint32_t aws_s3_request_metrics_get_retry_attempt(const struct aws_s3_request_me
617609 return metrics -> crt_info_metrics .retry_attempt ;
618610}
619611
620- void aws_s3_request_metrics_get_request_start_timestamp_ns (
612+ void aws_s3_request_metrics_get_s3_request_first_attempt_start_timestamp_ns (
621613 const struct aws_s3_request_metrics * metrics ,
622- uint64_t * out_request_start_time ) {
614+ uint64_t * out_s3_request_first_attempt_start_time ) {
623615 AWS_PRECONDITION (metrics );
624- AWS_PRECONDITION (out_request_start_time );
625- * out_request_start_time = metrics -> time_metrics .request_start_timestamp_ns ;
616+ AWS_PRECONDITION (out_s3_request_first_attempt_start_time );
617+ * out_s3_request_first_attempt_start_time = metrics -> time_metrics .s3_request_first_attempt_start_timestamp_ns ;
626618}
627619
628- int aws_s3_request_metrics_get_request_end_timestamp_ns (
620+ int aws_s3_request_metrics_get_s3_request_last_attempt_end_timestamp_ns (
629621 const struct aws_s3_request_metrics * metrics ,
630- uint64_t * out_request_end_time ) {
622+ uint64_t * out_s3_request_last_attempt_end_time ) {
631623 AWS_PRECONDITION (metrics );
632- AWS_PRECONDITION (out_request_end_time );
633- if (metrics -> time_metrics .request_end_timestamp_ns < 0 ) {
624+ AWS_PRECONDITION (out_s3_request_last_attempt_end_time );
625+ if (metrics -> time_metrics .s3_request_last_attempt_end_timestamp_ns < 0 ) {
634626 return aws_raise_error (AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE );
635627 }
636- * out_request_end_time = metrics -> time_metrics .request_end_timestamp_ns ;
628+ * out_s3_request_last_attempt_end_time = metrics -> time_metrics .s3_request_last_attempt_end_timestamp_ns ;
637629 return AWS_OP_SUCCESS ;
638630}
639631
640- int aws_s3_request_metrics_get_request_duration_ns (
632+ int aws_s3_request_metrics_get_s3_request_total_duration_ns (
641633 const struct aws_s3_request_metrics * metrics ,
642634 uint64_t * out_request_duration ) {
643635 AWS_PRECONDITION (metrics );
644636 AWS_PRECONDITION (out_request_duration );
645- if (metrics -> time_metrics .request_duration_ns < 0 ) {
637+ if (metrics -> time_metrics .s3_request_total_duration_ns < 0 ) {
646638 return aws_raise_error (AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE );
647639 }
648- * out_request_duration = metrics -> time_metrics .request_duration_ns ;
640+ * out_request_duration = metrics -> time_metrics .s3_request_total_duration_ns ;
649641 return AWS_OP_SUCCESS ;
650642}
651643
0 commit comments