| // 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 <string_view> |
| |
| #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 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); |
| |
| // Logs the number of external metrics that were dropped per-project. |
| void LogDroppedProjectExternalMetrics(std::string_view project_name, |
| int num_dropped); |
| |
| // Logs the number of external metrics produced per-project. |
| void LogProducedProjectExternalMetrics(std::string_view project_name, |
| int num_produced); |
| |
| } // namespace metrics::structured |
| |
| #endif // COMPONENTS_METRICS_STRUCTURED_HISTOGRAM_UTIL_H_ |