metric_serialization.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  * http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
17 #include <aws/core/utils/Array.h>
18 #include <aws/core/utils/json/JsonSerializer.h>
19 #include <aws/monitoring/model/MetricDatum.h>
20 #include <aws/monitoring/model/StandardUnit.h>
21 #include <iterator>
22 #include <string>
24 
25 namespace Aws {
26 namespace CloudWatchMetrics {
27 namespace Utils {
28 
30 
31 static constexpr const char* kTimestampKey = "timestamp";
32 static constexpr const char* kMetricNameKey = "metric_name";
33 static constexpr const char* kDimensionsKey = "dimensions";
34 static constexpr const char* kDimensionsNameKey = "name";
35 static constexpr const char* kDimensionsValueKey = "value";
36 static constexpr const char* kValueKey = "value";
37 static constexpr const char* kStorageResolutionKey = "storage_resolution";
38 static constexpr const char* kUnitKey = "unit";
39 
40 static const std::vector<Aws::String> required_properties = {
42  kTimestampKey
43 };
44 
51 MetricDatum deserializeMetricDatum(const Aws::String &basic_string) {
52  Aws::String aws_str(basic_string.c_str());
53  JsonValue json_value(aws_str);
54  if (!json_value.WasParseSuccessful()) {
55  throw std::invalid_argument("Failed to parse metric JSON string");
56  }
57  auto view = json_value.View();
58  for (const auto& property : required_properties) {
59  if (!view.KeyExists(property)) {
60  std::string property_name(property.c_str());
61  throw std::invalid_argument("Could not find required property " + property_name + " in JSON string");
62  }
63  }
64 
65  MetricDatum datum;
66  datum.SetMetricName(view.GetString(kMetricNameKey));
67  datum.SetTimestamp(view.GetInt64(kTimestampKey));
68 
69  if (view.KeyExists(kDimensionsKey)) {
70  auto array = view.GetArray(kDimensionsKey) ;
71  Aws::Vector<Aws::CloudWatch::Model::Dimension> dimensions(array.GetLength());
72  for (size_t i = 0; i < array.GetLength(); ++i) {
73  Aws::CloudWatch::Model::Dimension dimension;
74  dimension.SetName(array[i].GetString(kDimensionsNameKey));
75  dimension.SetValue(array[i].GetString(kDimensionsValueKey));
76  dimensions[i] = dimension;
77  }
78  datum.SetDimensions(dimensions);
79  }
80 
81  if (view.KeyExists(kStorageResolutionKey)) {
82  datum.SetStorageResolution(view.GetInteger(kStorageResolutionKey));
83  }
84  if (view.KeyExists(kUnitKey)) {
85  datum.SetUnit(Aws::CloudWatch::Model::StandardUnit(view.GetInteger(kUnitKey)));
86  }
87  if (view.KeyExists(kValueKey)) {
88  datum.SetValue(view.GetDouble(kValueKey));
89  }
90 
91  return datum;
92 }
93 
99 Aws::String serializeMetricDatum(const MetricDatum &datum) {
100  Aws::Utils::Json::JsonValue json_value;
101 
102  const Aws::Vector<Aws::CloudWatch::Model::Dimension>& dimensions = datum.GetDimensions();
103  Aws::Utils::Array<JsonValue> dimensions_array = Aws::Utils::Array<JsonValue>(dimensions.size());
104  for (size_t i = 0; i < dimensions.size(); ++i) {
105  JsonValue dimension_json;
106  dimensions_array[i] = dimension_json
107  .WithString(kDimensionsNameKey, dimensions[i].GetName())
108  .WithString(kDimensionsValueKey, dimensions[i].GetValue());
109  }
110 
111  const Aws::Vector<double>& values = datum.GetValues();
112  Aws::Utils::Array<JsonValue> values_array = Aws::Utils::Array<JsonValue>(values.size());
113  for (size_t i = 0; i < values.size(); ++i) {
114  JsonValue val;
115  values_array[i] = val.AsDouble(values[i]);
116  }
117 
118  json_value
119  .WithInt64(kTimestampKey, datum.GetTimestamp().Millis())
120  .WithString(kMetricNameKey, datum.GetMetricName())
121  .WithInteger(kStorageResolutionKey, datum.GetStorageResolution())
122  .WithInteger(kUnitKey, static_cast<int>(datum.GetUnit()))
123  .WithArray(kDimensionsKey, dimensions_array)
124  .WithDouble(kValueKey, datum.GetValue());
125  return json_value.View().WriteCompact();
126 }
127 
128 } // namespace Utils
129 } // namespace CloudWatchMetrics
130 } // namespace Aws
static constexpr const char * kDimensionsValueKey
static constexpr const char * kTimestampKey
static constexpr const char * kDimensionsKey
static constexpr const char * kMetricNameKey
static constexpr const char * kValueKey
static constexpr const char * kStorageResolutionKey
Aws::String serializeMetricDatum(const MetricDatum &datum)
static const std::vector< Aws::String > required_properties
Aws::CloudWatch::Model::MetricDatum MetricDatum
Definition: definitions.h:22
MetricDatum deserializeMetricDatum(const Aws::String &basic_string)
static constexpr const char * kUnitKey
Aws::Utils::Json::JsonValue JsonValue
static constexpr const char * kDimensionsNameKey


cloudwatch_metrics_common
Author(s): AWS RoboMaker
autogenerated on Fri May 7 2021 02:18:25