blob: 9976b6f6ca5cdf7b9eacb3a57f50a76c7f39947b [file] [log] [blame]
// Copyright 2018 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 COBALT_SRC_LOGGER_EVENT_RECORD_H_
#define COBALT_SRC_LOGGER_EVENT_RECORD_H_
#include <memory>
#include <third_party/abseil-cpp/absl/strings/str_cat.h>
#include "src/logger/project_context.h"
#include "src/pb/event.pb.h"
#include "src/registry/metric_definition.pb.h"
namespace cobalt::logger {
// A container for an Event proto message and the ProjectContext and the metric within it for which
// that Event should be logged.
class EventRecord {
public:
EventRecord(std::shared_ptr<const ProjectContext> project_context, uint32_t metric_id)
: project_context_(std::move(project_context)), event_(std::make_unique<Event>()) {
metric_ = project_context_->GetMetric(metric_id);
}
~EventRecord() = default;
EventRecord(EventRecord&& rhs) = default;
// Get the ProjectContext associated with this Event.
[[nodiscard]] const ProjectContext* project_context() const { return project_context_.get(); }
// Get the Metric within the ProjectContext that this Event is for.
[[nodiscard]] const MetricDefinition* metric() const { return metric_; }
// Get the Event that is to be logged.
[[nodiscard]] Event* event() const { return event_.get(); }
[[nodiscard]] std::string GetLogDetails() const {
return absl::StrCat("project_id:", metric_->project_id(), " metric_id:", metric_->id());
}
[[nodiscard]] std::string FullMetricName() const {
return project_context_->FullMetricName(*metric_);
}
private:
const std::shared_ptr<const ProjectContext> project_context_;
const MetricDefinition* metric_;
std::unique_ptr<Event> event_;
};
} // namespace cobalt::logger
#endif // COBALT_SRC_LOGGER_EVENT_RECORD_H_