blob: 1dd235eeae80a7f3ca52ee4fdb9d136d8ef4896e [file] [log] [blame]
// 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<int64_t>(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<int64_t>(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<int> 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<int64_t>(location))
.Record();
}
} // namespace structured
} // namespace metrics