summaryrefslogtreecommitdiffstats
path: root/chrome/browser/metrics/metrics_service.cc
diff options
context:
space:
mode:
authorisherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-17 01:02:40 +0000
committerisherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-17 01:02:40 +0000
commit4266def2249351b884b0b9b91eca39c1516a1ba1 (patch)
treeb7c0a312ec68df5bc544f1c10c219cd247fb8a32 /chrome/browser/metrics/metrics_service.cc
parent9c1a5430da331b56b19cc6c6e355ae2091b0af78 (diff)
downloadchromium_src-4266def2249351b884b0b9b91eca39c1516a1ba1.zip
chromium_src-4266def2249351b884b0b9b91eca39c1516a1ba1.tar.gz
chromium_src-4266def2249351b884b0b9b91eca39c1516a1ba1.tar.bz2
Add histograms to track UMA upload success vs. failure rates.
BUG=109818 TEST=none Review URL: https://chromiumcodereview.appspot.com/10332210 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137594 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/metrics/metrics_service.cc')
-rw-r--r--chrome/browser/metrics/metrics_service.cc37
1 files changed, 33 insertions, 4 deletions
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc
index c691f70..ff85f90 100644
--- a/chrome/browser/metrics/metrics_service.cc
+++ b/chrome/browser/metrics/metrics_service.cc
@@ -243,6 +243,24 @@ const int kSaveStateIntervalMinutes = 5;
// e.g., the server is down.
const int kNoResponseCode = content::URLFetcher::RESPONSE_CODE_INVALID - 1;
+enum ResponseStatus {
+ UNKNOWN_FAILURE,
+ SUCCESS,
+ BAD_REQUEST, // Invalid syntax or log too large.
+ NUM_RESPONSE_STATUSES
+};
+
+ResponseStatus ResponseCodeToStatus(int response_code) {
+ switch (response_code) {
+ case 200:
+ return SUCCESS;
+ case 400:
+ return BAD_REQUEST;
+ default:
+ return UNKNOWN_FAILURE;
+ }
+}
+
}
// static
@@ -1242,6 +1260,8 @@ void MetricsService::OnURLFetchComplete(const net::URLFetcher* source) {
DCHECK(waiting_for_asynchronus_reporting_step_);
// We're not allowed to re-use the existing |URLFetcher|s, so free them here.
+ // Note however that |source| is aliased to one of these, so we should be
+ // careful not to delete it too early.
scoped_ptr<content::URLFetcher> s;
if (source == current_fetch_xml_.get()) {
s.reset(current_fetch_xml_.release());
@@ -1251,8 +1271,18 @@ void MetricsService::OnURLFetchComplete(const net::URLFetcher* source) {
response_code_ = source->GetResponseCode();
response_status_ = StatusToString(source->GetStatus());
source->GetResponseAsString(&response_data_);
+
+ // Log a histogram to track response success vs. failure rates.
+ UMA_HISTOGRAM_ENUMERATION("UMA.UploadResponseStatus.XML",
+ ResponseCodeToStatus(response_code_),
+ NUM_RESPONSE_STATUSES);
} else if (source == current_fetch_proto_.get()) {
s.reset(current_fetch_proto_.release());
+
+ // Log a histogram to track response success vs. failure rates.
+ UMA_HISTOGRAM_ENUMERATION("UMA.UploadResponseStatus.Protobuf",
+ ResponseCodeToStatus(source->GetResponseCode()),
+ NUM_RESPONSE_STATUSES);
} else {
NOTREACHED();
return;
@@ -1273,7 +1303,7 @@ void MetricsService::OnURLFetchComplete(const net::URLFetcher* source) {
log_manager_.DiscardLastProvisionalStore();
// Confirm send so that we can move on.
- VLOG(1) << "METRICS RESPONSE CODE: " << response_code_
+ VLOG(1) << "Metrics response code: " << response_code_
<< " status=" << response_status_;
bool upload_succeeded = response_code_ == 200;
@@ -1290,16 +1320,15 @@ void MetricsService::OnURLFetchComplete(const net::URLFetcher* source) {
discard_log = true;
} else if (response_code_ == 400) {
// Bad syntax. Retransmission won't work.
- UMA_HISTOGRAM_COUNTS("UMA.Unacceptable_Log_Discarded", state_);
discard_log = true;
}
if (!upload_succeeded && !discard_log) {
- VLOG(1) << "METRICS: transmission attempt returned a failure code: "
+ VLOG(1) << "Metrics: transmission attempt returned a failure code: "
<< response_code_ << ". Verify network connectivity";
LogBadResponseCode();
} else { // Successful receipt (or we are discarding log).
- VLOG(1) << "METRICS RESPONSE DATA: " << response_data_;
+ VLOG(1) << "Metrics response data: " << response_data_;
switch (state_) {
case INITIAL_LOG_READY:
state_ = SENDING_OLD_LOGS;