metric_file_manager.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 
16 #include <memory>
17 #include <iostream>
18 #include <fstream>
19 
20 #include <aws/core/utils/xml/XmlSerializer.h>
21 
25 #include <aws/core/utils/json/JsonSerializer.h>
26 #include <aws/core/utils/logging/LogMacros.h>
28 
29 namespace Aws {
30 namespace CloudWatchMetrics {
31 namespace Utils {
32 
33 FileObject<MetricDatumCollection> MetricFileManager::readBatch(
34  size_t batch_size) {
35  /* We must sort the metric data chronologically because it is not guaranteed
36  to be ordered chronologically in the file, but CloudWatch requires all
37  puts in a single batch to be sorted chronologically */
38  auto metric_comparison = [](const MetricDatum & metric1, const MetricDatum & metric2)
39  { return metric1.GetTimestamp() < metric2.GetTimestamp(); };
40 
41  std::set<MetricDatum, decltype(metric_comparison)> metrics_set(metric_comparison);
42  FileManagement::DataToken data_token;
43  std::list<FileManagement::DataToken> data_tokens;
44  AWS_LOG_INFO(__func__, "Reading Logbatch");
45  size_t actual_batch_size = 0;
46 
47  for (size_t i = 0; i < batch_size; ++i) {
48  std::string line;
49  if (!file_manager_strategy_->isDataAvailable()) {
50  AWS_LOG_DEBUG(__func__, "No more metric data available on disk");
51  break;
52  }
53  data_token = read(line);
54  Aws::String aws_line(line.c_str());
55  MetricDatum metric_datum;
56  try {
58  } catch (std::invalid_argument &e) {
59  AWS_LOG_ERROR(__func__, e.what());
60  continue;
61  }
62  actual_batch_size++;
63  metrics_set.insert(metric_datum);
64  data_tokens.push_back(data_token);
65  }
66  MetricDatumCollection metrics_data(metrics_set.begin(), metrics_set.end());
67  FileObject<MetricDatumCollection> file_object;
68  file_object.batch_data = metrics_data;
69  file_object.batch_size = actual_batch_size;
70  file_object.data_tokens = data_tokens;
71  return file_object;
72 }
73 
75  for (const MetricDatum &model: data) {
76  auto metric_serial = Aws::CloudWatchMetrics::Utils::serializeMetricDatum(model);
77  file_manager_strategy_->write(metric_serial.c_str());
78  }
79  if (FileManager::file_status_monitor_) {
80  AWS_LOG_DEBUG(__func__,
81  "Set file status available");
82  FileManager::file_status_monitor_->setStatus(Aws::DataFlow::Status::AVAILABLE);
83  }
84 }
85 
86 } // namespace Utils
87 } // namespace CloudWatchMetrics
88 } // namespace Aws
std::list< Aws::CloudWatch::Model::MetricDatum > MetricDatumCollection
Definition: definitions.h:23
void write(const MetricDatumCollection &data) override
FileObject< MetricDatumCollection > readBatch(size_t batch_size) override
Aws::String serializeMetricDatum(const MetricDatum &datum)
Aws::CloudWatch::Model::MetricDatum MetricDatum
Definition: definitions.h:22
MetricDatum deserializeMetricDatum(const Aws::String &basic_string)


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