| // 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. |
| |
| #ifndef SRC_LIB_COBALT_CPP_METRIC_EVENT_BUILDER_H_ |
| #define SRC_LIB_COBALT_CPP_METRIC_EVENT_BUILDER_H_ |
| |
| #include <fuchsia/metrics/cpp/fidl.h> |
| |
| namespace cobalt { |
| |
| // MetricEventBuilder is a tool to make it easier and less error-prone to |
| // construct MetricEvent objects. |
| // |
| // Without this API you would log a cobalt event like this: |
| // |
| // MetricEvent event; |
| // event.metric_id = metric_id; |
| // event.event_codes.push_back(dimension_one); |
| // event.event_codes.push_back(dimension_two); |
| // event.payload.set_count(count); |
| // logger_->LogMetricEvent(std::move(event), &status); |
| // |
| // With the API it can be a lot cleaner: |
| // |
| // logger_->LogMetricEvent( |
| // MetricEventBuilder(metric_id) |
| // .with_event_codes({dimension_one, dimension_two}) |
| // .as_occurrence(count), |
| // &status); |
| // |
| class MetricEventBuilder { |
| public: |
| explicit MetricEventBuilder(uint32_t metric_id); |
| |
| MetricEventBuilder &with_event_code(uint32_t event_code); |
| MetricEventBuilder &with_event_codes(std::vector<uint32_t> event_codes); |
| MetricEventBuilder &with_event_code_at(uint32_t index, uint32_t event_code); |
| |
| [[nodiscard]] MetricEventBuilder Clone() const; |
| |
| fuchsia::metrics::MetricEvent as_occurrence(int64_t count); |
| fuchsia::metrics::MetricEvent as_integer(int64_t integer_value); |
| fuchsia::metrics::MetricEvent as_integer_histogram( |
| std::vector<fuchsia::metrics::HistogramBucket> histogram); |
| fuchsia::metrics::MetricEvent as_string(const std::string &string_value); |
| |
| private: |
| MetricEventBuilder() = default; |
| |
| fuchsia::metrics::MetricEvent event_; |
| }; |
| |
| } // namespace cobalt |
| |
| #endif // SRC_LIB_COBALT_CPP_METRIC_EVENT_BUILDER_H_ |