// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/metrics/structured/neutrino_logging.h" #include "base/time/time.h" #include "components/metrics/structured/recorder.h" #include "components/metrics/structured/structured_events.h" namespace { // Return the integer floor of the log base 2 of the time since |timestamp|, // measured in days. int Log2TimeSince(int64_t timestamp) { return floor( log2((base::Time::Now() - base::Time::FromTimeT(timestamp)).InSecondsF() / base::Days(1).InSecondsF())); } } // namespace namespace metrics { namespace structured { void NeutrinoDevicesLog(NeutrinoDevicesLocation location) { NeutrinoDevicesLogWithClientId("", location); } void NeutrinoDevicesLogWithClientId(const std::string& client_id, NeutrinoDevicesLocation location) { events::v2::neutrino_devices::CodePoint code_point; if (!client_id.empty()) code_point.SetClientId(client_id); code_point.SetLocation(static_cast(location)).Record(); } void NeutrinoDevicesLogPolicy(const std::string& client_id, bool is_managed, NeutrinoDevicesLocation location) { events::v2::neutrino_devices::Enrollment enrollment; if (!client_id.empty()) enrollment.SetClientId(client_id); enrollment.SetIsManagedPolicy(is_managed) .SetLocation(static_cast(location)) .Record(); } void NeutrinoDevicesLogClientIdCleared( const std::string& client_id, int64_t install_date_timestamp, int64_t metrics_reporting_enabled_timestamp) { events::v2::neutrino_devices::ClientIdCleared client_id_cleared; if (!client_id.empty()) client_id_cleared.SetInitialClientId(client_id); client_id_cleared .SetLog2TimeSinceInstallation(Log2TimeSince(install_date_timestamp)) .SetLog2TimeSinceMetricsEnabled( Log2TimeSince(metrics_reporting_enabled_timestamp)) .Record(); } void NeutrinoDevicesLogClientIdChanged( const std::string& client_id, const std::string& initial_client_id, int64_t install_date_timestamp, int64_t metrics_reporting_enabled_timestamp, NeutrinoDevicesLocation location) { events::v2::neutrino_devices::ClientIdChanged client_id_changed; if (!initial_client_id.empty()) client_id_changed.SetInitialClientId(initial_client_id); if (!client_id.empty()) client_id_changed.SetFinalClientId(client_id); const absl::optional last_key_rotation = Recorder::GetInstance()->LastKeyRotation(client_id_changed); if (last_key_rotation.has_value()) { int days_since_rotation = (base::Time::Now() - base::Time::UnixEpoch()).InDays() - last_key_rotation.value(); client_id_changed.SetDaysSinceKeyRotation(days_since_rotation); } client_id_changed .SetLog2TimeSinceInstallation(Log2TimeSince(install_date_timestamp)) .SetLog2TimeSinceMetricsEnabled( Log2TimeSince(metrics_reporting_enabled_timestamp)) .SetLocation(static_cast(location)) .Record(); } } // namespace structured } // namespace metrics