blob: d94644d37554ce2df7b36e1e16e875b32377d25f [file] [log] [blame]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FBPREPROCESSOR_METRICS_H_
#define FBPREPROCESSOR_METRICS_H_
#include <memory>
#include <metrics/metrics_library.h>
#include "fbpreprocessor/firmware_dump.h"
namespace fbpreprocessor {
// The |Metrics| class emits UMA events with libmetrics
// https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/metrics.
// The metrics collected are described in the "Metrics" section of the design
// document go/cros-fbpreprocessord-dd.
class Metrics {
public:
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused since they will be used by UMA to
// interpret the data.
enum class CollectionAllowedStatus {
kUnknown = 0,
kAllowed = 1,
kDisallowedByPolicy = 2,
kDisallowedByFinch = 3,
kDisallowedForMultipleSessions = 4,
kDisallowedForUserDomain = 5,
kMaxValue = kDisallowedForUserDomain,
};
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused since they will be used by UMA to
// interpret the data.
enum class PseudonymizationResult {
kUnknown = 0,
kSuccess = 1,
kFailedToStart = 2,
kNoOpFailedToMove = 3,
kMaxValue = kNoOpFailedToMove,
};
Metrics();
~Metrics();
// Report whether the collection of firmware dumps is allowed to not and the
// reason.
// Emits "Platform.FbPreprocessor.{FirmwareType}.Collection.Allowed".
bool SendAllowedStatus(FirmwareDump::Type fw_type,
CollectionAllowedStatus status);
// Send the number of firmware dumps of a particular type currently available
// for collection in the next feedback report. Emitted periodically every 5
// minutes by |OutputManager|.
// Emits "Platform.FbPreprocessor.{FirmwareType}.Output.Number".
bool SendNumberOfAvailableDumps(FirmwareDump::Type fw_type, int num);
// Send the type of firmware dump that was just pseudonymized.
// Emits "Platform.FbPreprocessor.Pseudonymization.DumpType".
bool SendPseudonymizationFirmwareType(FirmwareDump::Type fw_type);
// Send the status of the pseudonymization operation.
// Emits "Platform.FbPreprocessor.{FirmwareType}.Pseudonymization.Result".
bool SendPseudonymizationResult(FirmwareDump::Type fw_type,
PseudonymizationResult result);
// Instead of using the "real" metrics library that will send events to UMA,
// unit tests can pass a fake or mock implementation, typically
// |FakeMetricsLibrary| from metrics/fake_metrics_library.h.
// The Metrics object will take ownership of the unique_ptr.
void SetLibraryForTesting(std::unique_ptr<MetricsLibraryInterface> lib);
private:
std::unique_ptr<MetricsLibraryInterface> library_;
};
} // namespace fbpreprocessor
#endif // FBPREPROCESSOR_METRICS_H_