Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1507)

Unified Diff: chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc

Issue 23271009: Add UMA stats for initial user policy fetch on Chrome OS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
index e3452f9547f8936ef0e6a9c93578f681475bebd0..10d64a0d0bca85df10c4cbcc506417cb7f37276f 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
@@ -7,6 +7,8 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/logging.h"
+#include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h"
#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
@@ -22,6 +24,28 @@ namespace em = enterprise_management;
namespace policy {
+namespace {
+
+// UMA histogram names.
+const char kUMADelayInitialization[] =
+ "Enterprise.UserPolicyChromeOS.DelayInitialization";
+const char kUMAInitialFetchClientError[] =
+ "Enterprise.UserPolicyChromeOS.InitialFetch.ClientError";
+const char kUMAInitialFetchDelayClientRegister[] =
+ "Enterprise.UserPolicyChromeOS.InitialFetch.DelayClientRegister";
+const char kUMAInitialFetchDelayOAuth2Token[] =
+ "Enterprise.UserPolicyChromeOS.InitialFetch.DelayOAuth2Token";
+const char kUMAInitialFetchDelayPolicyFetch[] =
+ "Enterprise.UserPolicyChromeOS.InitialFetch.DelayPolicyFetch";
+const char kUMAInitialFetchDelayTotal[] =
+ "Enterprise.UserPolicyChromeOS.InitialFetch.DelayTotal";
+const char kUMAInitialFetchOAuth2Error[] =
+ "Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2Error";
+const char kUMAInitialFetchOAuth2NetworkError[] =
+ "Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2NetworkError";
+
+} // namespace
+
UserCloudPolicyManagerChromeOS::UserCloudPolicyManagerChromeOS(
scoped_ptr<CloudPolicyStore> store,
scoped_ptr<ResourceCache> resource_cache,
@@ -31,6 +55,7 @@ UserCloudPolicyManagerChromeOS::UserCloudPolicyManagerChromeOS(
store.get()),
store_(store.Pass()),
wait_for_policy_fetch_(wait_for_policy_fetch) {
+ time_init_started_ = base::Time::Now();
if (resource_cache) {
component_policy_service_.reset(new ComponentCloudPolicyService(
this, store_.get(), resource_cache.Pass()));
@@ -120,6 +145,11 @@ void UserCloudPolicyManagerChromeOS::OnInitializationCompleted(
CloudPolicyService* cloud_policy_service) {
DCHECK_EQ(service(), cloud_policy_service);
cloud_policy_service->RemoveObserver(this);
+
+ time_init_completed_ = base::Time::Now();
+ UMA_HISTOGRAM_TIMES(kUMADelayInitialization,
+ time_init_completed_ - time_init_started_);
+
// If the CloudPolicyClient isn't registered at this stage then it needs an
// OAuth token for the initial registration.
//
@@ -161,7 +191,14 @@ void UserCloudPolicyManagerChromeOS::OnPolicyFetched(
void UserCloudPolicyManagerChromeOS::OnRegistrationStateChanged(
CloudPolicyClient* cloud_policy_client) {
DCHECK_EQ(client(), cloud_policy_client);
+
if (wait_for_policy_fetch_) {
+ time_client_registered_ = base::Time::Now();
+ if (!time_token_available_.is_null()) {
+ UMA_HISTOGRAM_TIMES(kUMAInitialFetchDelayClientRegister,
+ time_client_registered_ - time_token_available_);
+ }
+
// If we're blocked on the policy fetch, now is a good time to issue it.
if (client()->is_registered()) {
service()->RefreshPolicy(
@@ -180,6 +217,11 @@ void UserCloudPolicyManagerChromeOS::OnClientError(
CloudPolicyClient* cloud_policy_client) {
DCHECK_EQ(client(), cloud_policy_client);
CancelWaitForPolicyFetch();
+
+ if (wait_for_policy_fetch_) {
+ UMA_HISTOGRAM_SPARSE_SLOWLY(kUMAInitialFetchClientError,
+ cloud_policy_client->status());
+ }
}
void UserCloudPolicyManagerChromeOS::OnComponentCloudPolicyRefreshNeeded() {
@@ -215,6 +257,13 @@ void UserCloudPolicyManagerChromeOS::OnOAuth2PolicyTokenFetched(
const std::string& policy_token,
const GoogleServiceAuthError& error) {
DCHECK(!client()->is_registered());
+
+ time_token_available_ = base::Time::Now();
+ if (wait_for_policy_fetch_) {
+ UMA_HISTOGRAM_TIMES(kUMAInitialFetchDelayOAuth2Token,
+ time_token_available_ - time_init_completed_);
+ }
+
if (error.state() == GoogleServiceAuthError::NONE) {
// Start client registration. Either OnRegistrationStateChanged() or
// OnClientError() will be called back.
@@ -223,6 +272,14 @@ void UserCloudPolicyManagerChromeOS::OnOAuth2PolicyTokenFetched(
} else {
// Failed to get a token, stop waiting and use an empty policy.
CancelWaitForPolicyFetch();
+
+ UMA_HISTOGRAM_ENUMERATION(kUMAInitialFetchOAuth2Error,
+ error.state(),
+ GoogleServiceAuthError::NUM_STATES);
+ if (error.state() == GoogleServiceAuthError::CONNECTION_FAILED) {
+ UMA_HISTOGRAM_SPARSE_SLOWLY(kUMAInitialFetchOAuth2NetworkError,
+ error.network_error());
+ }
}
token_fetcher_.reset();
@@ -230,6 +287,11 @@ void UserCloudPolicyManagerChromeOS::OnOAuth2PolicyTokenFetched(
void UserCloudPolicyManagerChromeOS::OnInitialPolicyFetchComplete(
bool success) {
+
+ const base::Time now = base::Time::Now();
+ UMA_HISTOGRAM_TIMES(kUMAInitialFetchDelayPolicyFetch,
+ now - time_client_registered_);
+ UMA_HISTOGRAM_TIMES(kUMAInitialFetchDelayTotal, now - time_init_started_);
CancelWaitForPolicyFetch();
}

Powered by Google App Engine
This is Rietveld 408576698