[logger] Don't log metrics whose max_release_stage is too low
Change-Id: I4f0b13bd84c9f792d96755db33a44df8c901ff99
diff --git a/logger/logger.cc b/logger/logger.cc
index afbcec1..ba89831 100644
--- a/logger/logger.cc
+++ b/logger/logger.cc
@@ -264,10 +264,19 @@
const Encoder* encoder, EventAggregator* event_aggregator,
ObservationWriter* observation_writer,
LoggerInterface* internal_logger)
+ : Logger(std::move(project_context), encoder, event_aggregator,
+ observation_writer, nullptr, internal_logger) {}
+
+Logger::Logger(std::unique_ptr<ProjectContext> project_context,
+ const Encoder* encoder, EventAggregator* event_aggregator,
+ ObservationWriter* observation_writer,
+ encoder::SystemDataInterface* system_data,
+ LoggerInterface* internal_logger)
: project_context_(std::move(project_context)),
encoder_(encoder),
event_aggregator_(event_aggregator),
observation_writer_(observation_writer),
+ system_data_(system_data),
clock_(new SystemClock()) {
CHECK(project_context_);
CHECK(encoder_);
@@ -524,8 +533,21 @@
EventRecord* event_record) {
TRACE_DURATION("cobalt_core", "EventLogger::Log", "metric_id", metric_id);
- // TODO(rudominer) Check the ReleaseStage of the Metric against the
- // ReleaseStage of the project.
+ if (logger_->system_data_) {
+ if (logger_->system_data_->release_stage() >
+ event_record->metric->meta_data().max_release_stage()) {
+ // Quietly ignore this metric.
+ LOG_FIRST_N(INFO, 10)
+ << "Not logging metric `"
+ << project_context()->FullMetricName(*event_record->metric)
+ << "` because its max_release_stage ("
+ << event_record->metric->meta_data().max_release_stage()
+ << ") is lower than the device's current release_stage: "
+ << logger_->system_data_->release_stage();
+ return kOK;
+ }
+ }
+
auto status = FinalizeEvent(metric_id, expected_metric_type, event_record);
if (status != kOK) {
return status;
diff --git a/logger/logger.h b/logger/logger.h
index ca55dfa..a9bf26f 100644
--- a/logger/logger.h
+++ b/logger/logger.h
@@ -57,12 +57,21 @@
// to write immediate Observations to an ObservationStore. Must remain valid
// as long as the Logger is in use.
//
+ // |system_data| A pointer to a SystemDataInterface.
+ //
// |internal_logger| An instance of LoggerInterface, used internally by the
// Logger to send metrics about Cobalt to Cobalt. If nullptr, no such
// internal logging will be performed by this Logger.
Logger(std::unique_ptr<ProjectContext> project_context,
const Encoder* encoder, EventAggregator* event_aggregator,
ObservationWriter* observation_writer,
+ encoder::SystemDataInterface* system_data,
+ LoggerInterface* internal_logger = nullptr);
+
+ // DEPRECATED Constructor
+ Logger(std::unique_ptr<ProjectContext> project_context,
+ const Encoder* encoder, EventAggregator* event_aggregator,
+ ObservationWriter* observation_writer,
LoggerInterface* internal_logger = nullptr);
virtual ~Logger() = default;
@@ -138,6 +147,7 @@
const Encoder* encoder_;
EventAggregator* event_aggregator_;
const ObservationWriter* observation_writer_;
+ const encoder::SystemDataInterface* system_data_;
std::unique_ptr<util::ClockInterface> clock_;
std::unique_ptr<InternalMetrics> internal_metrics_;