/* Copyright 2020 The Chromium OS 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 HARDWARE_VERIFIER_OBSERVER_H_
#define HARDWARE_VERIFIER_OBSERVER_H_

#include <map>
#include <memory>
#include <string>

#include <base/macros.h>
#include <base/no_destructor.h>
#include <base/time/time.h>
#include <metrics/metrics_library.h>

#include "hardware_verifier/hardware_verifier.pb.h"

namespace hardware_verifier {

// Total time to finish execution (initialization + probing + verification).
constexpr auto kMetricTimeToFinish = "ChromeOS.HardwareVerifier.TimeToFinish";

// Total time to finish probing.
constexpr auto kMetricTimeToProbe = "ChromeOS.HardwareVerifier.TimeToProbe";

// Prefix for VerificationReport items.
constexpr auto kMetricVerifierReportPrefix =
    "ChromeOS.HardwareVerifier.Report.";

// The entire program should end within one minutes, so it should be safe to
// assume that all timer samples should be a value in range [0, 60 * 1000] ms.
const int kTimerMinMs_ = 0;
const int kTimerMaxMs_ = 60 * 1000;
// Maximum recommended value.
const int kTimerBuckets_ = 50;

// Observe and potentially logs the behavior of hardware_verifier.
class Observer {
 public:
  static Observer* GetInstance();

  void StartTimer(const std::string& timer_name);
  void StopTimer(const std::string& timer_name);

  void SetMetricsLibrary(std::unique_ptr<MetricsLibraryInterface> metrics);

  void RecordHwVerificationReport(const HwVerificationReport&);

 private:
  friend class base::NoDestructor<Observer>;

  Observer() = default;
  Observer(const Observer&) = delete;
  Observer& operator=(const Observer&) = delete;

  std::map<std::string, base::TimeTicks> timers_;
  std::unique_ptr<MetricsLibraryInterface> metrics_;
};

}  // namespace hardware_verifier

#endif  // HARDWARE_VERIFIER_OBSERVER_H_
