1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_REPORTING_HEALTH_HEALTH_MODULE_DELEGATE_IMPL_H_
#define COMPONENTS_REPORTING_HEALTH_HEALTH_MODULE_DELEGATE_IMPL_H_
#include <memory>
#include <string>
#include "base/files/file.h"
#include "base/sequence_checker.h"
#include "base/thread_annotations.h"
#include "components/reporting/health/health_module_delegate.h"
#include "components/reporting/health/health_module_files.h"
#include "components/reporting/proto/synced/record.pb.h"
#include "components/reporting/util/status.h"
#include "components/reporting/util/statusor.h"
namespace reporting {
// The HealthModuleDelegateImpl is a prod implementation of
// HealthModule::Delegate interface. Keeps track of the local data of ERP Health
// and owns the HealthModuleFiles class which is written to and read from this
// class.
class HealthModuleDelegateImpl : public HealthModuleDelegate {
public:
explicit HealthModuleDelegateImpl(
const base::FilePath& directory,
size_t max_history_storage = kNaxHistoryStorage,
std::string_view file_base_name = kHistoryFileBasename);
HealthModuleDelegateImpl(const HealthModuleDelegateImpl& other) = delete;
HealthModuleDelegateImpl& operator=(const HealthModuleDelegateImpl& other) =
delete;
~HealthModuleDelegateImpl() override;
private:
static constexpr char kHistoryFileBasename[] = "health_info_";
// Default max history size 100 KiB.
static constexpr size_t kNaxHistoryStorage = 100 * 1024u;
// Initializes files_. Returns error on failure.
Status DoInit() override;
// Gets health data from memory, sends to |cb|.
void DoGetERPHealthData(HealthCallback cb) const override;
// Writes a history record to files_, keeps track of data in local
// memory. Can be overridden for tests.
void DoPostHealthRecord(HealthDataHistory history) override;
SEQUENCE_CHECKER(sequence_checker_);
// Local copy of the health data. This is read from storage on startup and
// written to locally. Occasionally this data is written back into memory.
ERPHealthData data_in_memory_ GUARDED_BY_CONTEXT(sequence_checker_);
// Root directory of ERP Health data files.
const base::FilePath directory_;
const std::string file_base_name_;
// Max storage used by health module.
// TODO(tylergarrett) control each history per policy.
const size_t max_history_storage_;
// local storaged used to track health records.
size_t storage_used_ GUARDED_BY_CONTEXT(sequence_checker_) = 0u;
std::unique_ptr<HealthModuleFiles> files_
GUARDED_BY_CONTEXT(sequence_checker_);
};
} // namespace reporting
#endif // COMPONENTS_REPORTING_HEALTH_HEALTH_MODULE_DELEGATE_IMPL_H_
|