AWS SDK for C++

AWS SDK for C++ Version 1.11.717

Loading...
Searching...
No Matches
TracingUtils.h
1
5#pragma once
6
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>
11#include <functional>
12#include <chrono>
13#include <utility>
14
15namespace smithy {
16 namespace components {
17 namespace tracing {
21 class SMITHY_API TracingUtils {
22 using SteadyTime = std::chrono::steady_clock::time_point;
23
24 static void RecordExecutionDuration(
25 SteadyTime before,
26 SteadyTime after,
27 Aws::String metricName,
28 const Meter &meter,
30 Aws::String description
31 );
32 public:
33 TracingUtils() = default;
34
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[];
56
68 template<typename T>
69 static T MakeCallWithTiming(std::function<T()> func,
70 const Aws::String &metricName,
71 const Meter &meter,
73 const Aws::String &description = "")
74 {
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));
79 return returnValue;
80 }
81
91 static void MakeCallWithTiming(std::function<void(void)> func,
92 Aws::String metricName,
93 const Meter &meter,
95 Aws::String description = "")
96 {
97 auto before = std::chrono::steady_clock::now();
98 func();
99 auto after = std::chrono::steady_clock::now();
100 RecordExecutionDuration(before, after, std::move(metricName), meter, std::move(attributes), std::move(description));
101 }
102
111 const Meter &meter,
113 Aws::String description = "")
114 {
115 for (auto const &entry: metrics) {
116 auto smithyMetric = ConvertCoreMetricToSmithy(entry.first);
117 if (smithyMetric.first != SMITHY_METRICS_UNKNOWN_METRIC) {
118 auto histogram = meter.CreateHistogram(std::move(smithyMetric.first),
119 smithyMetric.second,
120 std::move(description));
121 if (!histogram) {
122 AWS_LOG_ERROR("TracingUtil", "Failed to create histogram");
123 } else {
124 histogram->record((double) entry.second, attributes);
125 }
126 }
127 }
128 }
129
135 static std::pair<Aws::String, Aws::String> ConvertCoreMetricToSmithy(const Aws::String &name) {
137 {
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);
148 default:
149 return std::make_pair(SMITHY_METRICS_UNKNOWN_METRIC, "unknown");
150 }
151 }
152 };
153 }
154 }
155}
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
Definition AWSMap.h:20
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition AWSString.h:97