OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 //------------------------------------------------------------------------------ | 5 //------------------------------------------------------------------------------ |
6 // Description of the life cycle of a instance of MetricsService. | 6 // Description of the life cycle of a instance of MetricsService. |
7 // | 7 // |
8 // OVERVIEW | 8 // OVERVIEW |
9 // | 9 // |
10 // A MetricsService instance is typically created at application startup. It | 10 // A MetricsService instance is typically created at application startup. It |
(...skipping 1022 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1033 log_manager_.PersistUnsentLogs(); | 1033 log_manager_.PersistUnsentLogs(); |
1034 } | 1034 } |
1035 | 1035 |
1036 void MetricsService::PrepareFetchWithStagedLog() { | 1036 void MetricsService::PrepareFetchWithStagedLog() { |
1037 DCHECK(!log_manager_.staged_log_text().empty()); | 1037 DCHECK(!log_manager_.staged_log_text().empty()); |
1038 DCHECK(!current_fetch_.get()); | 1038 DCHECK(!current_fetch_.get()); |
1039 | 1039 |
1040 current_fetch_.reset(new URLFetcher(GURL(WideToUTF16(server_url_)), | 1040 current_fetch_.reset(new URLFetcher(GURL(WideToUTF16(server_url_)), |
1041 URLFetcher::POST, | 1041 URLFetcher::POST, |
1042 this)); | 1042 this)); |
1043 current_fetch_->set_request_context( | 1043 current_fetch_->SetRequestContext( |
1044 g_browser_process->system_request_context()); | 1044 g_browser_process->system_request_context()); |
1045 current_fetch_->set_upload_data(kMetricsType, | 1045 current_fetch_->SetUploadData(kMetricsType, log_manager_.staged_log_text()); |
1046 log_manager_.staged_log_text()); | |
1047 } | 1046 } |
1048 | 1047 |
1049 static const char* StatusToString(const net::URLRequestStatus& status) { | 1048 static const char* StatusToString(const net::URLRequestStatus& status) { |
1050 switch (status.status()) { | 1049 switch (status.status()) { |
1051 case net::URLRequestStatus::SUCCESS: | 1050 case net::URLRequestStatus::SUCCESS: |
1052 return "SUCCESS"; | 1051 return "SUCCESS"; |
1053 | 1052 |
1054 case net::URLRequestStatus::IO_PENDING: | 1053 case net::URLRequestStatus::IO_PENDING: |
1055 return "IO_PENDING"; | 1054 return "IO_PENDING"; |
1056 | 1055 |
1057 case net::URLRequestStatus::HANDLED_EXTERNALLY: | 1056 case net::URLRequestStatus::HANDLED_EXTERNALLY: |
1058 return "HANDLED_EXTERNALLY"; | 1057 return "HANDLED_EXTERNALLY"; |
1059 | 1058 |
1060 case net::URLRequestStatus::CANCELED: | 1059 case net::URLRequestStatus::CANCELED: |
1061 return "CANCELED"; | 1060 return "CANCELED"; |
1062 | 1061 |
1063 case net::URLRequestStatus::FAILED: | 1062 case net::URLRequestStatus::FAILED: |
1064 return "FAILED"; | 1063 return "FAILED"; |
1065 | 1064 |
1066 default: | 1065 default: |
1067 NOTREACHED(); | 1066 NOTREACHED(); |
1068 return "Unknown"; | 1067 return "Unknown"; |
1069 } | 1068 } |
1070 } | 1069 } |
1071 | 1070 |
1072 void MetricsService::OnURLFetchComplete(const URLFetcher* source) { | 1071 void MetricsService::OnURLFetchComplete(const content::URLFetcher* source) { |
1073 DCHECK(waiting_for_asynchronus_reporting_step_); | 1072 DCHECK(waiting_for_asynchronus_reporting_step_); |
1074 waiting_for_asynchronus_reporting_step_ = false; | 1073 waiting_for_asynchronus_reporting_step_ = false; |
1075 DCHECK(current_fetch_.get()); | 1074 DCHECK(current_fetch_.get()); |
1076 current_fetch_.reset(NULL); // We're not allowed to re-use it. | 1075 current_fetch_.reset(NULL); // We're not allowed to re-use it. |
1077 | 1076 |
1078 // Confirm send so that we can move on. | 1077 // Confirm send so that we can move on. |
1079 VLOG(1) << "METRICS RESPONSE CODE: " << source->response_code() | 1078 VLOG(1) << "METRICS RESPONSE CODE: " << source->GetResponseCode() |
1080 << " status=" << StatusToString(source->status()); | 1079 << " status=" << StatusToString(source->GetStatus()); |
1081 | 1080 |
1082 bool upload_succeeded = source->response_code() == 200; | 1081 bool upload_succeeded = source->GetResponseCode() == 200; |
1083 | 1082 |
1084 // Provide boolean for error recovery (allow us to ignore response_code). | 1083 // Provide boolean for error recovery (allow us to ignore response_code). |
1085 bool discard_log = false; | 1084 bool discard_log = false; |
1086 | 1085 |
1087 if (!upload_succeeded && | 1086 if (!upload_succeeded && |
1088 (log_manager_.staged_log_text().length() > | 1087 (log_manager_.staged_log_text().length() > |
1089 static_cast<size_t>(kUploadLogAvoidRetransmitSize))) { | 1088 static_cast<size_t>(kUploadLogAvoidRetransmitSize))) { |
1090 UMA_HISTOGRAM_COUNTS( | 1089 UMA_HISTOGRAM_COUNTS( |
1091 "UMA.Large Rejected Log was Discarded", | 1090 "UMA.Large Rejected Log was Discarded", |
1092 static_cast<int>(log_manager_.staged_log_text().length())); | 1091 static_cast<int>(log_manager_.staged_log_text().length())); |
1093 discard_log = true; | 1092 discard_log = true; |
1094 } else if (source->response_code() == 400) { | 1093 } else if (source->GetResponseCode() == 400) { |
1095 // Bad syntax. Retransmission won't work. | 1094 // Bad syntax. Retransmission won't work. |
1096 UMA_HISTOGRAM_COUNTS("UMA.Unacceptable_Log_Discarded", state_); | 1095 UMA_HISTOGRAM_COUNTS("UMA.Unacceptable_Log_Discarded", state_); |
1097 discard_log = true; | 1096 discard_log = true; |
1098 } | 1097 } |
1099 | 1098 |
1100 if (!upload_succeeded && !discard_log) { | 1099 if (!upload_succeeded && !discard_log) { |
1101 VLOG(1) << "METRICS: transmission attempt returned a failure code: " | 1100 VLOG(1) << "METRICS: transmission attempt returned a failure code: " |
1102 << source->response_code() << ". Verify network connectivity"; | 1101 << source->GetResponseCode() << ". Verify network connectivity"; |
1103 LogBadResponseCode(); | 1102 LogBadResponseCode(); |
1104 } else { // Successful receipt (or we are discarding log). | 1103 } else { // Successful receipt (or we are discarding log). |
1105 std::string data; | 1104 std::string data; |
1106 source->GetResponseAsString(&data); | 1105 source->GetResponseAsString(&data); |
1107 VLOG(1) << "METRICS RESPONSE DATA: " << data; | 1106 VLOG(1) << "METRICS RESPONSE DATA: " << data; |
1108 switch (state_) { | 1107 switch (state_) { |
1109 case INITIAL_LOG_READY: | 1108 case INITIAL_LOG_READY: |
1110 state_ = SENDING_OLD_LOGS; | 1109 state_ = SENDING_OLD_LOGS; |
1111 break; | 1110 break; |
1112 | 1111 |
(...skipping 16 matching lines...) Expand all Loading... |
1129 DCHECK(local_state); | 1128 DCHECK(local_state); |
1130 if (local_state) | 1129 if (local_state) |
1131 local_state->ScheduleSavePersistentPrefs(); | 1130 local_state->ScheduleSavePersistentPrefs(); |
1132 | 1131 |
1133 if (log_manager_.has_unsent_logs()) | 1132 if (log_manager_.has_unsent_logs()) |
1134 DCHECK(state_ < SENDING_CURRENT_LOGS); | 1133 DCHECK(state_ < SENDING_CURRENT_LOGS); |
1135 } | 1134 } |
1136 | 1135 |
1137 // Error 400 indicates a problem with the log, not with the server, so | 1136 // Error 400 indicates a problem with the log, not with the server, so |
1138 // don't consider that a sign that the server is in trouble. | 1137 // don't consider that a sign that the server is in trouble. |
1139 bool server_is_healthy = upload_succeeded || source->response_code() == 400; | 1138 bool server_is_healthy = upload_succeeded || source->GetResponseCode() == 400; |
1140 | 1139 |
1141 scheduler_->UploadFinished(server_is_healthy, | 1140 scheduler_->UploadFinished(server_is_healthy, |
1142 log_manager_.has_unsent_logs()); | 1141 log_manager_.has_unsent_logs()); |
1143 | 1142 |
1144 // Collect network stats if UMA upload succeeded. | 1143 // Collect network stats if UMA upload succeeded. |
1145 if (server_is_healthy && io_thread_) | 1144 if (server_is_healthy && io_thread_) |
1146 chrome_browser_net::CollectNetworkStats(network_stats_server_, io_thread_); | 1145 chrome_browser_net::CollectNetworkStats(network_stats_server_, io_thread_); |
1147 } | 1146 } |
1148 | 1147 |
1149 void MetricsService::LogBadResponseCode() { | 1148 void MetricsService::LogBadResponseCode() { |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1542 if (local_state) { | 1541 if (local_state) { |
1543 const PrefService::Preference* uma_pref = | 1542 const PrefService::Preference* uma_pref = |
1544 local_state->FindPreference(prefs::kMetricsReportingEnabled); | 1543 local_state->FindPreference(prefs::kMetricsReportingEnabled); |
1545 if (uma_pref) { | 1544 if (uma_pref) { |
1546 bool success = uma_pref->GetValue()->GetAsBoolean(&result); | 1545 bool success = uma_pref->GetValue()->GetAsBoolean(&result); |
1547 DCHECK(success); | 1546 DCHECK(success); |
1548 } | 1547 } |
1549 } | 1548 } |
1550 return result; | 1549 return result; |
1551 } | 1550 } |
OLD | NEW |