// Copyright 2020 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_METRICS_STRUCTURED_HISTOGRAM_UTIL_H_ #define COMPONENTS_METRICS_STRUCTURED_HISTOGRAM_UTIL_H_ #include "components/prefs/persistent_pref_store.h" namespace metrics::structured { // Possible internal errors of the structured metrics system. These are events // we expect to never see, so only the absolute counts should be looked at, the // bucket proportion doesn't make sense. These values are persisted to logs. // Entries should not be renumbered and numeric values should never be reused. enum class StructuredMetricsError { kMissingKey = 0, kWrongKeyLength = 1, kMissingLastRotation = 2, kMissingRotationPeriod = 3, kFailedUintConversion = 4, kKeyReadError = 5, kKeyParseError = 6, kKeyWriteError = 7, kKeySerializationError = 8, kEventReadError = 9, kEventParseError = 10, kEventWriteError = 11, kEventSerializationError = 12, kUninitializedClient = 13, kInvalidEventParsed = 14, kMaxValue = kInvalidEventParsed, }; // Whether a single event was recorded correctly, or otherwise what error state // occurred. These values are persisted to logs. Entries should not be // renumbered and numeric values should never be reused. enum class EventRecordingState { kRecorded = 0, kProviderUninitialized = 1, kRecordingDisabled = 2, kProviderMissing = 3, kProjectDisallowed = 4, kLogSizeExceeded = 5, kMaxValue = kLogSizeExceeded, }; // Describes the action taken by KeyData::ValidateAndGetKey on a particular user // event key. A key can either be valid with no action taken, missing and so // created, or out of its rotation period and so re-created. These values are // persisted to logs. Entries should not be renumbered and numeric values should // never be reused. enum class KeyValidationState { kValid = 0, kCreated = 1, kRotated = 2, kMaxValue = kRotated, }; void LogInternalError(StructuredMetricsError error); void LogEventRecordingState(EventRecordingState state); void LogKeyValidation(KeyValidationState state); // Log how many structured metrics events were contained in a call to // ProvideCurrentSessionData. void LogNumEventsInUpload(int num_events); // Logs that an event was recorded using the mojo API. void LogIsEventRecordedUsingMojo(bool used_mojo_api); // Logs the number of events that were recorded before device and user // cryptographic keys have been loaded to hash events. These events will be kept // in memory. void LogNumEventsRecordedBeforeInit(int num_events); // Logs the number of files processed per external metrics scan. void LogNumFilesPerExternalMetricsScan(int num_files); // Logs the file size of an event. void LogEventFileSizeKB(int64_t file_size_kb); // Logs the serialized size of an event when it is recorded in bytes. void LogEventSerializedSizeBytes(int64_t event_size_bytes); // Logs the StructuredMetrics uploaded size to UMA in bytes. void LogUploadSizeBytes(int64_t upload_size_bytes); // Logs the number of external metrics were scanned for an upload. void LogExternalMetricsScanInUpload(int num_scans); // Logs the number of external metrics that were dropped. void LogDroppedExternalMetrics(int num_dropped); } // namespace metrics::structured #endif // COMPONENTS_METRICS_STRUCTURED_HISTOGRAM_UTIL_H_