blob: cb7adaedb81d006fbbbd26789063e0bcf4b749b2 [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.
#ifndef COBALT_SRC_PB_METADATA_BUILDER_H_
#define COBALT_SRC_PB_METADATA_BUILDER_H_
#include "src/lib/util/clock.h"
#include "src/lib/util/consistent_proto_store.h"
#include "src/lib/util/protected_fields.h"
#include "src/logger/project_context.h"
#include "src/pb/observation_batch.pb.h"
#include "src/pb/system_data_history.pb.h"
#include "src/registry/metric_definition.pb.h"
#include "src/registry/report_definition.pb.h"
#include "src/system_data/system_data.h"
namespace cobalt {
class MetadataBuilder {
public:
MetadataBuilder(system_data::SystemDataInterface *system_data,
std::string system_profile_cache_dir, util::FileSystem *fs)
: MetadataBuilder(system_data, nullptr, std::move(system_profile_cache_dir), fs) {}
MetadataBuilder(system_data::SystemDataInterface *system_data,
util::ValidatedClockInterface *validated_clock,
std::string system_profile_cache_dir, util::FileSystem *fs);
[[nodiscard]] std::unique_ptr<ObservationMetadata> Build(const logger::MetricRef &metric,
const ReportDefinition &report,
uint32_t day_index,
uint32_t hour_id) const;
void SnapshotSystemData();
void CleanupBefore(std::chrono::hours hours_ago);
private:
void FilteredSystemProfile(const ReportDefinition &report, SystemProfile *profile_out) const;
static void FilteredSystemProfile(const ReportDefinition &report, const SystemProfile &profile_in,
SystemProfile *profile_out);
void WriteHistory(util::ProtectedFields<SystemProfileHistory>::LockedFieldsPtr history);
util::ProtectedFields<SystemProfileHistory> system_profile_history_;
system_data::SystemDataInterface *system_data_;
std::unique_ptr<util::AlwaysAccurateClock> owned_clock_;
util::ValidatedClockInterface *validated_clock_;
std::unique_ptr<util::ConsistentProtoStore> history_store_;
};
} // namespace cobalt
#endif // COBALT_SRC_PB_METADATA_BUILDER_H_