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

Side by Side Diff: components/metrics/reporting_service.cc

Issue 2770853002: Create Ukm ReportingService implementation. (Closed)
Patch Set: Fix register prefs Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 // ReportingService handles uploading serialized logs to a server. 5 // ReportingService handles uploading serialized logs to a server.
6 6
7 #include "components/metrics/reporting_service.h" 7 #include "components/metrics/reporting_service.h"
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 } 114 }
115 if (!log_store()->has_staged_log()) 115 if (!log_store()->has_staged_log())
116 log_store()->StageNextLog(); 116 log_store()->StageNextLog();
117 117
118 // Proceed to stage the log for upload if log size satisfies cellular log 118 // Proceed to stage the log for upload if log size satisfies cellular log
119 // upload constrains. 119 // upload constrains.
120 bool upload_canceled = false; 120 bool upload_canceled = false;
121 bool is_cellular_logic = client_->IsUMACellularUploadLogicEnabled(); 121 bool is_cellular_logic = client_->IsUMACellularUploadLogicEnabled();
122 if (is_cellular_logic && data_use_tracker_ && 122 if (is_cellular_logic && data_use_tracker_ &&
123 !data_use_tracker_->ShouldUploadLogOnCellular( 123 !data_use_tracker_->ShouldUploadLogOnCellular(
124 log_store()->staged_log_hash().size())) { 124 log_store()->staged_log_hash().size(), service_type())) {
125 upload_scheduler_->UploadOverDataUsageCap(); 125 upload_scheduler_->UploadOverDataUsageCap();
126 upload_canceled = true; 126 upload_canceled = true;
127 } else { 127 } else {
128 SendStagedLog(); 128 SendStagedLog();
129 } 129 }
130 if (is_cellular_logic) { 130 if (is_cellular_logic) {
131 LogCellularConstraint(upload_canceled); 131 LogCellularConstraint(upload_canceled);
132 } 132 }
133 } 133 }
134 134
(...skipping 23 matching lines...) Expand all
158 DVLOG(1) << "OnLogUploadComplete:" << response_code; 158 DVLOG(1) << "OnLogUploadComplete:" << response_code;
159 DCHECK(thread_checker_.CalledOnValidThread()); 159 DCHECK(thread_checker_.CalledOnValidThread());
160 DCHECK(log_upload_in_progress_); 160 DCHECK(log_upload_in_progress_);
161 log_upload_in_progress_ = false; 161 log_upload_in_progress_ = false;
162 162
163 // Log a histogram to track response success vs. failure rates. 163 // Log a histogram to track response success vs. failure rates.
164 LogResponseCode(response_code); 164 LogResponseCode(response_code);
165 165
166 bool upload_succeeded = response_code == 200; 166 bool upload_succeeded = response_code == 200;
167 167
168 // Provide boolean for error recovery (allow us to ignore response_code). 168 // Staged log could have been removed already (such as by Purge() in some
169 bool discard_log = false; 169 // implementations), otherwise we may remove it here.
170 const size_t log_size = log_store()->staged_log().length(); 170 if (log_store()->has_staged_log()) {
171 if (upload_succeeded) { 171 // Provide boolean for error recovery (allow us to ignore response_code).
172 LogSuccess(log_size); 172 bool discard_log = false;
173 } else if (log_size > max_retransmit_size_) { 173 const size_t log_size = log_store()->staged_log().length();
174 LogLargeRejection(log_size); 174 if (upload_succeeded) {
175 discard_log = true; 175 LogSuccess(log_size);
176 } else if (response_code == 400) { 176 } else if (log_size > max_retransmit_size_) {
177 // Bad syntax. Retransmission won't work. 177 LogLargeRejection(log_size);
178 discard_log = true; 178 discard_log = true;
179 } 179 } else if (response_code == 400) {
180 // Bad syntax. Retransmission won't work.
181 discard_log = true;
182 }
180 183
181 if (upload_succeeded || discard_log) { 184 if (upload_succeeded || discard_log) {
182 log_store()->DiscardStagedLog(); 185 log_store()->DiscardStagedLog();
183 // Store the updated list to disk now that the removed log is uploaded. 186 // Store the updated list to disk now that the removed log is uploaded.
184 log_store()->PersistUnsentLogs(); 187 log_store()->PersistUnsentLogs();
188 }
185 } 189 }
186 190
187 // Error 400 indicates a problem with the log, not with the server, so 191 // Error 400 indicates a problem with the log, not with the server, so
188 // don't consider that a sign that the server is in trouble. 192 // don't consider that a sign that the server is in trouble.
189 bool server_is_healthy = upload_succeeded || response_code == 400; 193 bool server_is_healthy = upload_succeeded || response_code == 400;
190 if (!log_store()->has_unsent_logs()) { 194 if (!log_store()->has_unsent_logs()) {
191 DVLOG(1) << "Stopping upload_scheduler_."; 195 DVLOG(1) << "Stopping upload_scheduler_.";
192 upload_scheduler_->Stop(); 196 upload_scheduler_->Stop();
193 } 197 }
194 upload_scheduler_->UploadFinished(server_is_healthy); 198 upload_scheduler_->UploadFinished(server_is_healthy);
195 } 199 }
196 200
197 } // namespace metrics 201 } // namespace metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698