diff options
author | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-17 01:02:40 +0000 |
---|---|---|
committer | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-17 01:02:40 +0000 |
commit | 4266def2249351b884b0b9b91eca39c1516a1ba1 (patch) | |
tree | b7c0a312ec68df5bc544f1c10c219cd247fb8a32 /chrome/browser/metrics/metrics_service.cc | |
parent | 9c1a5430da331b56b19cc6c6e355ae2091b0af78 (diff) | |
download | chromium_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.cc | 37 |
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; |