Skip to content

Commit 991e012

Browse files
committed
Apply map, dateutil, measurement
1 parent 2bca311 commit 991e012

File tree

4 files changed

+54
-30
lines changed

4 files changed

+54
-30
lines changed

tests/performance-tests/include/performance_tests/reporting/JsonReportingMetrics.h

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,50 @@
1010
#include <aws/core/monitoring/CoreMetrics.h>
1111
#include <aws/core/monitoring/MonitoringFactory.h>
1212
#include <aws/core/monitoring/MonitoringInterface.h>
13+
#include <aws/core/utils/DateTime.h>
1314
#include <aws/core/utils/memory/AWSMemory.h>
15+
#include <aws/core/utils/memory/stl/AWSMap.h>
1416
#include <aws/core/utils/memory/stl/AWSSet.h>
1517
#include <aws/core/utils/memory/stl/AWSString.h>
1618
#include <aws/core/utils/memory/stl/AWSVector.h>
1719

1820
#include <cstdint>
1921
#include <memory>
20-
#include <utility>
2122

2223
namespace PerformanceTest {
2324
namespace Reporting {
25+
/**
26+
* A measurement value that supports different numeric types.
27+
*/
28+
class Measurement {
29+
public:
30+
enum Type { INTEGER, DOUBLE };
31+
32+
Measurement(int64_t value) : m_type(INTEGER) { m_data.i = value; }
33+
Measurement(double value) : m_type(DOUBLE) { m_data.d = value; }
34+
bool IsInt64() const { return m_type == INTEGER; }
35+
bool IsDouble() const { return m_type == DOUBLE; }
36+
int64_t AsInt64() const { return m_type == INTEGER ? m_data.i : static_cast<int64_t>(m_data.d); }
37+
double AsDouble() const { return m_type == DOUBLE ? m_data.d : static_cast<double>(m_data.i); }
38+
39+
private:
40+
Type m_type;
41+
union {
42+
int64_t i;
43+
double d;
44+
} m_data;
45+
};
46+
2447
/**
2548
* Container for a single performance metric record that stores measurement data and associated metadata.
2649
*/
2750
struct PerformanceMetricRecord {
2851
Aws::String name;
2952
Aws::String description;
3053
Aws::String unit;
31-
int64_t date;
32-
Aws::Vector<int64_t> measurements;
33-
Aws::Vector<std::pair<Aws::String, Aws::String>> dimensions;
54+
Aws::Utils::DateTime date;
55+
Aws::Vector<Measurement> measurements;
56+
Aws::Map<Aws::String, Aws::String> dimensions;
3457
};
3558

3659
/**
@@ -101,7 +124,7 @@ class JsonReportingMetrics : public Aws::Monitoring::MonitoringInterface {
101124
* Sets test dimensions that will be included with all performance records.
102125
* @param dimensions Vector of key-value pairs representing test dimensions (e.g., size, bucket type)
103126
*/
104-
static void SetTestContext(const Aws::Vector<std::pair<Aws::String, Aws::String>>& dimensions);
127+
static void SetTestContext(const Aws::Map<Aws::String, Aws::String>& dimensions);
105128

106129
/**
107130
* Registers specific operations to monitor. If empty, all operations are monitored.
@@ -140,7 +163,7 @@ class JsonReportingMetrics : public Aws::Monitoring::MonitoringInterface {
140163
void DumpJson() const;
141164

142165
mutable Aws::Vector<PerformanceMetricRecord> m_performanceRecords;
143-
static Aws::Vector<std::pair<Aws::String, Aws::String>> TestDimensions;
166+
static Aws::Map<Aws::String, Aws::String> TestDimensions;
144167
static Aws::Set<Aws::String> MonitoredOperations;
145168
static Aws::String ProductId;
146169
static Aws::String SdkVersion;

tests/performance-tests/src/reporting/JsonReportingMetrics.cpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,14 @@
2626

2727
using namespace PerformanceTest::Reporting;
2828

29-
Aws::Vector<std::pair<Aws::String, Aws::String>> JsonReportingMetrics::TestDimensions;
29+
Aws::Map<Aws::String, Aws::String> JsonReportingMetrics::TestDimensions;
3030
Aws::Set<Aws::String> JsonReportingMetrics::MonitoredOperations;
3131
Aws::String JsonReportingMetrics::ProductId = "unknown";
3232
Aws::String JsonReportingMetrics::SdkVersion = "unknown";
3333
Aws::String JsonReportingMetrics::CommitId = "unknown";
3434
Aws::String JsonReportingMetrics::OutputFilename = "performance-test-results.json";
3535

36-
void JsonReportingMetrics::SetTestContext(const Aws::Vector<std::pair<Aws::String, Aws::String>>& dimensions) {
37-
TestDimensions = dimensions;
38-
}
36+
void JsonReportingMetrics::SetTestContext(const Aws::Map<Aws::String, Aws::String>& dimensions) { TestDimensions = dimensions; }
3937

4038
void JsonReportingMetrics::RegisterOperationsToMonitor(const Aws::Vector<Aws::String>& operations) {
4139
MonitoredOperations.clear();
@@ -78,8 +76,8 @@ void JsonReportingMetrics::AddPerformanceRecord(const Aws::String& serviceName,
7876
Aws::Utils::StringUtils::ToLower(serviceName.c_str()) + "." + Aws::Utils::StringUtils::ToLower(requestName.c_str()) + ".latency";
7977
record.description = "Time to complete " + requestName + " operation";
8078
record.unit = "Milliseconds";
81-
record.date = Aws::Utils::DateTime::Now().Seconds();
82-
record.measurements.push_back(durationMs);
79+
record.date = Aws::Utils::DateTime::Now();
80+
record.measurements.emplace_back(durationMs);
8381
record.dimensions = TestDimensions;
8482

8583
m_performanceRecords.push_back(record);
@@ -146,24 +144,29 @@ void JsonReportingMetrics::DumpJson() const {
146144
jsonMetric.WithString("name", record.name);
147145
jsonMetric.WithString("description", record.description);
148146
jsonMetric.WithString("unit", record.unit);
149-
jsonMetric.WithInt64("date", record.date);
147+
jsonMetric.WithInt64("date", record.date.Seconds());
150148

151149
if (!record.dimensions.empty()) {
152150
Aws::Utils::Array<Aws::Utils::Json::JsonValue> dimensionsArray(record.dimensions.size());
153-
for (size_t j = 0; j < record.dimensions.size(); ++j) {
151+
size_t dimensionIndex = 0;
152+
for (const auto& dim : record.dimensions) {
154153
Aws::Utils::Json::JsonValue dimension;
155-
dimension.WithString("name", record.dimensions[j].first);
156-
dimension.WithString("value", record.dimensions[j].second);
157-
dimensionsArray[j] = std::move(dimension);
154+
dimension.WithString("name", dim.first);
155+
dimension.WithString("value", dim.second);
156+
dimensionsArray[dimensionIndex++] = std::move(dimension);
158157
}
159158
jsonMetric.WithArray("dimensions", std::move(dimensionsArray));
160159
}
161160

162161
Aws::Utils::Array<Aws::Utils::Json::JsonValue> measurementsArray(record.measurements.size());
163-
for (size_t j = 0; j < record.measurements.size(); ++j) {
162+
for (size_t measurementIndex = 0; measurementIndex < record.measurements.size(); ++measurementIndex) {
164163
Aws::Utils::Json::JsonValue measurementValue;
165-
measurementValue.AsInt64(record.measurements[j]);
166-
measurementsArray[j] = std::move(measurementValue);
164+
if (record.measurements[measurementIndex].IsDouble()) {
165+
measurementValue.AsDouble(record.measurements[measurementIndex].AsDouble());
166+
} else {
167+
measurementValue.AsInt64(record.measurements[measurementIndex].AsInt64());
168+
}
169+
measurementsArray[measurementIndex] = std::move(measurementValue);
167170
}
168171
jsonMetric.WithArray("measurements", std::move(measurementsArray));
169172

tests/performance-tests/src/services/dynamodb/DynamoDBPerformanceTest.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include <aws/core/utils/UUID.h>
88
#include <aws/core/utils/memory/stl/AWSMap.h>
99
#include <aws/core/utils/memory/stl/AWSString.h>
10-
#include <aws/core/utils/memory/stl/AWSVector.h>
1110
#include <aws/dynamodb/DynamoDBClient.h>
1211
#include <aws/dynamodb/model/AttributeDefinition.h>
1312
#include <aws/dynamodb/model/AttributeValue.h>
@@ -28,11 +27,10 @@
2827
#include <iostream>
2928
#include <string>
3029
#include <thread>
31-
#include <utility>
3230

3331
bool PerformanceTest::Services::DynamoDB::RunTest(Aws::DynamoDB::DynamoDBClient& dynamodb, const TestCase& config, int iterations) {
34-
Aws::Vector<std::pair<Aws::String, Aws::String>> dimensions;
35-
dimensions.emplace_back("Size", config.sizeLabel);
32+
Aws::Map<Aws::String, Aws::String> dimensions;
33+
dimensions["Size"] = config.sizeLabel;
3634
PerformanceTest::Reporting::JsonReportingMetrics::SetTestContext(dimensions);
3735

3836
Aws::String tableName;

tests/performance-tests/src/services/s3/S3PerformanceTest.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
#include <aws/core/utils/StringUtils.h>
99
#include <aws/core/utils/UUID.h>
1010
#include <aws/core/utils/memory/stl/AWSAllocator.h>
11+
#include <aws/core/utils/memory/stl/AWSMap.h>
1112
#include <aws/core/utils/memory/stl/AWSString.h>
1213
#include <aws/core/utils/memory/stl/AWSStringStream.h>
13-
#include <aws/core/utils/memory/stl/AWSVector.h>
1414
#include <aws/s3/S3Client.h>
1515
#include <aws/s3/model/BucketInfo.h>
1616
#include <aws/s3/model/BucketType.h>
@@ -26,13 +26,12 @@
2626

2727
#include <iostream>
2828
#include <string>
29-
#include <utility>
3029

3130
bool PerformanceTest::Services::S3::RunTest(Aws::S3::S3Client& s3, const TestCase& config, const Aws::String& availabilityZoneId,
3231
int iterations) {
33-
Aws::Vector<std::pair<Aws::String, Aws::String>> dimensions;
34-
dimensions.emplace_back("Size", config.sizeLabel);
35-
dimensions.emplace_back("BucketType", config.bucketTypeLabel);
32+
Aws::Map<Aws::String, Aws::String> dimensions;
33+
dimensions["Size"] = config.sizeLabel;
34+
dimensions["BucketType"] = config.bucketTypeLabel;
3635
PerformanceTest::Reporting::JsonReportingMetrics::SetTestContext(dimensions);
3736

3837
Aws::String bucketName;
@@ -87,7 +86,8 @@ bool PerformanceTest::Services::S3::RunTest(Aws::S3::S3Client& s3, const TestCas
8786
}
8887

8988
for (int i = 0; i < iterations; i++) {
90-
s3.DeleteObject(Aws::S3::Model::DeleteObjectRequest().WithBucket(bucketName).WithKey("test-object-" + Aws::Utils::StringUtils::to_string(i)));
89+
s3.DeleteObject(
90+
Aws::S3::Model::DeleteObjectRequest().WithBucket(bucketName).WithKey("test-object-" + Aws::Utils::StringUtils::to_string(i)));
9191
}
9292
s3.DeleteBucket(Aws::S3::Model::DeleteBucketRequest().WithBucket(bucketName));
9393

0 commit comments

Comments
 (0)