blob: ab6dc2780c3cbd8306d4a34bf628dce2b4915e84 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/local_aggregation_1_1/aggregation_procedures/sum_and_count_aggregation_procedure.h"
#include <tuple>
#include "src/local_aggregation_1_1/aggregation_procedures/aggregation_procedure.h"
#include "src/logger/encoder.h"
#include "src/logging.h"
#include "src/pb/observation.pb.h"
#include "src/public/lib/statusor/status_macros.h"
namespace cobalt::local_aggregation {
void SumAndCountAggregationProcedure::UpdateAggregateData(const logger::EventRecord& event_record,
AggregateData* aggregate_data,
AggregationPeriodBucket* /*bucket*/) {
SumAndCount* sum_and_count = aggregate_data->mutable_sum_and_count();
sum_and_count->set_count(sum_and_count->count() + 1);
sum_and_count->set_sum(sum_and_count->sum() + event_record.event()->integer_event().value());
}
lib::statusor::StatusOr<std::unique_ptr<Observation>>
SumAndCountAggregationProcedure::GenerateHourlyObservation(const AggregateDataToGenerate& bucket) {
std::vector<std::tuple<std::vector<uint32_t>, int64_t, uint32_t>> data;
data.reserve(bucket.aggregate_data.size());
for (const EventCodesAggregateData* aggregate_data : bucket.aggregate_data) {
std::vector<uint32_t> event_codes(aggregate_data->event_codes().begin(),
aggregate_data->event_codes().end());
data.emplace_back(std::make_tuple(event_codes, aggregate_data->data().sum_and_count().sum(),
aggregate_data->data().sum_and_count().count()));
}
if (data.empty()) {
return {nullptr};
}
return logger::Encoder::EncodeSumAndCountObservation(data);
}
std::string SumAndCountAggregationProcedure::DebugString() const { return "SUM_AND_COUNT"; }
} // namespace cobalt::local_aggregation