7#include <aws/core/monitoring/HttpClientMetrics.h>
8#include <aws/core/utils/logging/LogMacros.h>
9#include <smithy/Smithy_EXPORTS.h>
10#include <smithy/tracing/Meter.h>
16 namespace components {
22 using SteadyTime = std::chrono::steady_clock::time_point;
24 static void RecordExecutionDuration(
35 static const char COUNT_METRIC_TYPE[];
36 static const char MICROSECOND_METRIC_TYPE[];
37 static const char BYTES_PER_SECOND_METRIC_TYPE[];
38 static const char SMITHY_CLIENT_DURATION_METRIC[];
39 static const char SMITHY_CLIENT_ENDPOINT_RESOLUTION_METRIC[];
40 static const char SMITHY_CLIENT_DESERIALIZATION_METRIC[];
41 static const char SMITHY_CLIENT_SIGNING_METRIC[];
42 static const char SMITHY_CLIENT_SERIALIZATION_METRIC[];
43 static const char SMITHY_CLIENT_SERVICE_CALL_METRIC[];
44 static const char SMITHY_CLIENT_SERVICE_BACKOFF_DELAY_METRIC[];
45 static const char SMITHY_CLIENT_SERVICE_ATTEMPTS_METRIC[];
46 static const char SMITHY_METHOD_AWS_VALUE[];
47 static const char SMITHY_SERVICE_DIMENSION[];
48 static const char SMITHY_METHOD_DIMENSION[];
49 static const char SMITHY_SYSTEM_DIMENSION[];
50 static const char SMITHY_METRICS_DNS_DURATION[];
51 static const char SMITHY_METRICS_CONNECT_DURATION[];
52 static const char SMITHY_METRICS_SSL_DURATION[];
53 static const char SMITHY_METRICS_DOWNLOAD_SPEED_METRIC[];
54 static const char SMITHY_METRICS_UPLOAD_SPEED_METRIC[];
55 static const char SMITHY_METRICS_UNKNOWN_METRIC[];
75 auto before = std::chrono::steady_clock::now();
76 auto returnValue = func();
77 auto after = std::chrono::steady_clock::now();
78 RecordExecutionDuration(before, after, std::move(metricName), meter, std::move(attributes), std::move(description));
97 auto before = std::chrono::steady_clock::now();
99 auto after = std::chrono::steady_clock::now();
100 RecordExecutionDuration(before, after, std::move(metricName), meter, std::move(attributes), std::move(description));
115 for (
auto const &entry: metrics) {
116 auto smithyMetric = ConvertCoreMetricToSmithy(entry.first);
117 if (smithyMetric.first != SMITHY_METRICS_UNKNOWN_METRIC) {
120 std::move(description));
122 AWS_LOG_ERROR(
"TracingUtil",
"Failed to create histogram");
124 histogram->record((
double) entry.second, attributes);
139 return std::make_pair(SMITHY_METRICS_DNS_DURATION, MICROSECOND_METRIC_TYPE);
141 return std::make_pair(SMITHY_METRICS_CONNECT_DURATION, MICROSECOND_METRIC_TYPE);
143 return std::make_pair(SMITHY_METRICS_SSL_DURATION, MICROSECOND_METRIC_TYPE);
145 return std::make_pair(SMITHY_METRICS_DOWNLOAD_SPEED_METRIC, BYTES_PER_SECOND_METRIC_TYPE);
147 return std::make_pair(SMITHY_METRICS_UPLOAD_SPEED_METRIC, BYTES_PER_SECOND_METRIC_TYPE);
149 return std::make_pair(SMITHY_METRICS_UNKNOWN_METRIC,
"unknown");
virtual Aws::UniquePtr< Histogram > CreateHistogram(Aws::String name, Aws::String units, Aws::String description) const =0
static void EmitCoreHttpMetrics(const Aws::Monitoring::HttpClientMetricsCollection &metrics, const Meter &meter, Aws::Map< Aws::String, Aws::String > &&attributes, Aws::String description="")
static T MakeCallWithTiming(std::function< T()> func, const Aws::String &metricName, const Meter &meter, Aws::Map< Aws::String, Aws::String > &&attributes, const Aws::String &description="")
static std::pair< Aws::String, Aws::String > ConvertCoreMetricToSmithy(const Aws::String &name)
static void MakeCallWithTiming(std::function< void(void)> func, Aws::String metricName, const Meter &meter, Aws::Map< Aws::String, Aws::String > &&attributes, Aws::String description="")
Aws::Map< Aws::String, int64_t > HttpClientMetricsCollection
AWS_CORE_API HttpClientMetricsType GetHttpClientMetricTypeByName(const Aws::String &name)
std::map< K, V, std::less< K >, Aws::Allocator< std::pair< const K, V > > > Map
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String