Skip to content

Commit 2ff5cac

Browse files
add getters for more metrics
1 parent 70aacd2 commit 2ff5cac

File tree

2 files changed

+174
-0
lines changed

2 files changed

+174
-0
lines changed

include/aws/s3/s3_client.h

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,6 +1376,72 @@ int aws_s3_request_metrics_get_receive_end_timestamp_ns(
13761376
const struct aws_s3_request_metrics *metrics,
13771377
uint64_t *out_receive_end_time);
13781378

1379+
/* Get the time stamp when the signing for the request started. Timestamps are from
1380+
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1381+
AWS_S3_API
1382+
int aws_s3_request_metrics_get_sign_start_timestamp_ns(
1383+
const struct aws_s3_request_metrics *metrics,
1384+
uint64_t *out_signing_start_time);
1385+
1386+
/* Get the time stamp when the signing for the request ended. Timestamps are from
1387+
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1388+
AWS_S3_API
1389+
int aws_s3_request_metrics_get_sign_end_timestamp_ns(
1390+
const struct aws_s3_request_metrics *metrics,
1391+
uint64_t *out_signing_end_time);
1392+
1393+
/* The time duration for the request singing (sign_end_timestamp_ns -
1394+
* sign_start_timestamp_ns).
1395+
* AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1396+
AWS_S3_API
1397+
int aws_s3_request_metrics_get_signing_duration_ns(
1398+
const struct aws_s3_request_metrics *metrics,
1399+
uint64_t *out_signing_duration);
1400+
1401+
/* Get the time stamp when the memory acquisition for the request started. Timestamps are from
1402+
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1403+
AWS_S3_API
1404+
int aws_s3_request_metrics_get_mem_acquire_start_timestamp_ns(
1405+
const struct aws_s3_request_metrics *metrics,
1406+
uint64_t *out_mem_acquire_start_time);
1407+
1408+
/* Get the time stamp when the memory acquisition for the request ended. Timestamps are from
1409+
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1410+
AWS_S3_API
1411+
int aws_s3_request_metrics_get_mem_acquire_end_timestamp_ns(
1412+
const struct aws_s3_request_metrics *metrics,
1413+
uint64_t *out_mem_acquire_end_time);
1414+
1415+
/* The time duration for the request memory acquisition (mem_acquire_end_timestamp_ns -
1416+
* mem_acquire_start_timestamp_ns).
1417+
* AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1418+
AWS_S3_API
1419+
int aws_s3_request_metrics_get_mem_acquire_duration_ns(
1420+
const struct aws_s3_request_metrics *metrics,
1421+
uint64_t *out_mem_acquire_duration);
1422+
1423+
/* Get the time stamp when the delivery of the request response started. Timestamps are from
1424+
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1425+
AWS_S3_API
1426+
int aws_s3_request_metrics_get_delivery_start_timestamp_ns(
1427+
const struct aws_s3_request_metrics *metrics,
1428+
uint64_t *out_delivery_start_time);
1429+
1430+
/* Get the time stamp when the delivery of the request response ended. Timestamps are from
1431+
* `aws_high_res_clock_get_ticks` AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1432+
AWS_S3_API
1433+
int aws_s3_request_metrics_get_delivery_end_timestamp_ns(
1434+
const struct aws_s3_request_metrics *metrics,
1435+
uint64_t *out_delivery_end_time);
1436+
1437+
/* The time duration for the request delivery(delivery_end_timestamp_ns -
1438+
* delivery_start_timestamp_ns).
1439+
* AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */
1440+
AWS_S3_API
1441+
int aws_s3_request_metrics_get_delivery_duration_ns(
1442+
const struct aws_s3_request_metrics *metrics,
1443+
uint64_t *out_delivery_duration);
1444+
13791445
/* The time duration for the request from start receiving to finish receiving (receive_end_timestamp_ns -
13801446
* receive_start_timestamp_ns).
13811447
* AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if data not available. */

source/s3_request.c

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,114 @@ int aws_s3_request_metrics_get_receiving_duration_ns(
325325
return AWS_OP_SUCCESS;
326326
}
327327

328+
int aws_s3_request_metrics_get_sign_start_timestamp_ns(
329+
const struct aws_s3_request_metrics *metrics,
330+
uint64_t *out_signing_start_time) {
331+
AWS_PRECONDITION(metrics);
332+
AWS_PRECONDITION(out_signing_start_time);
333+
if (metrics->time_metrics.sign_start_timestamp_ns < 0) {
334+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
335+
}
336+
*out_signing_start_time = metrics->time_metrics.sign_start_timestamp_ns;
337+
return AWS_OP_SUCCESS;
338+
}
339+
340+
int aws_s3_request_metrics_get_sign_end_timestamp_ns(
341+
const struct aws_s3_request_metrics *metrics,
342+
uint64_t *out_signing_end_time) {
343+
AWS_PRECONDITION(metrics);
344+
AWS_PRECONDITION(out_signing_end_time);
345+
if (metrics->time_metrics.sign_end_timestamp_ns < 0) {
346+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
347+
}
348+
*out_signing_end_time = metrics->time_metrics.sign_end_timestamp_ns;
349+
return AWS_OP_SUCCESS;
350+
}
351+
352+
int aws_s3_request_metrics_get_signing_duration_ns(
353+
const struct aws_s3_request_metrics *metrics,
354+
uint64_t *out_signing_duration) {
355+
AWS_PRECONDITION(metrics);
356+
AWS_PRECONDITION(out_signing_duration);
357+
if (metrics->time_metrics.signing_duration_ns < 0) {
358+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
359+
}
360+
*out_signing_duration = metrics->time_metrics.signing_duration_ns;
361+
return AWS_OP_SUCCESS;
362+
}
363+
364+
int aws_s3_request_metrics_get_mem_acquire_start_timestamp_ns(
365+
const struct aws_s3_request_metrics *metrics,
366+
uint64_t *out_mem_acquire_start_time) {
367+
AWS_PRECONDITION(metrics);
368+
AWS_PRECONDITION(out_mem_acquire_start_time);
369+
if (metrics->time_metrics.mem_acquire_start_timestamp_ns < 0) {
370+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
371+
}
372+
*out_mem_acquire_start_time = metrics->time_metrics.mem_acquire_start_timestamp_ns;
373+
return AWS_OP_SUCCESS;
374+
}
375+
376+
int aws_s3_request_metrics_get_mem_acquire_end_timestamp_ns(
377+
const struct aws_s3_request_metrics *metrics,
378+
uint64_t *out_mem_acquire_end_time) {
379+
AWS_PRECONDITION(metrics);
380+
AWS_PRECONDITION(out_mem_acquire_end_time);
381+
if (metrics->time_metrics.mem_acquire_end_timestamp_ns < 0) {
382+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
383+
}
384+
*out_mem_acquire_end_time = metrics->time_metrics.mem_acquire_end_timestamp_ns;
385+
return AWS_OP_SUCCESS;
386+
}
387+
388+
int aws_s3_request_metrics_get_mem_acquire_duration_ns(
389+
const struct aws_s3_request_metrics *metrics,
390+
uint64_t *out_mem_acquire_duration) {
391+
AWS_PRECONDITION(metrics);
392+
AWS_PRECONDITION(out_mem_acquire_duration);
393+
if (metrics->time_metrics.mem_acquire_duration_ns < 0) {
394+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
395+
}
396+
*out_mem_acquire_duration = metrics->time_metrics.mem_acquire_duration_ns;
397+
return AWS_OP_SUCCESS;
398+
}
399+
400+
int aws_s3_request_metrics_get_delivery_start_timestamp_ns(
401+
const struct aws_s3_request_metrics *metrics,
402+
uint64_t *out_delivery_start_time) {
403+
AWS_PRECONDITION(metrics);
404+
AWS_PRECONDITION(out_delivery_start_time);
405+
if (metrics->time_metrics.deliver_start_timestamp_ns < 0) {
406+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
407+
}
408+
*out_delivery_start_time = metrics->time_metrics.deliver_start_timestamp_ns;
409+
return AWS_OP_SUCCESS;
410+
}
411+
412+
int aws_s3_request_metrics_get_delivery_end_timestamp_ns(
413+
const struct aws_s3_request_metrics *metrics,
414+
uint64_t *out_delivery_end_time) {
415+
AWS_PRECONDITION(metrics);
416+
AWS_PRECONDITION(out_delivery_end_time);
417+
if (metrics->time_metrics.deliver_end_timestamp_ns < 0) {
418+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
419+
}
420+
*out_delivery_end_time = metrics->time_metrics.deliver_end_timestamp_ns;
421+
return AWS_OP_SUCCESS;
422+
}
423+
424+
int aws_s3_request_metrics_get_delivery_duration_ns(
425+
const struct aws_s3_request_metrics *metrics,
426+
uint64_t *out_delivery_duration) {
427+
AWS_PRECONDITION(metrics);
428+
AWS_PRECONDITION(out_delivery_duration);
429+
if (metrics->time_metrics.deliver_duration_ns < 0) {
430+
return aws_raise_error(AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE);
431+
}
432+
*out_delivery_duration = metrics->time_metrics.deliver_duration_ns;
433+
return AWS_OP_SUCCESS;
434+
}
435+
328436
int aws_s3_request_metrics_get_response_status_code(
329437
const struct aws_s3_request_metrics *metrics,
330438
int *response_status) {

0 commit comments

Comments
 (0)