OLD | NEW |
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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 DVLOG(1) << "OnLogUploadComplete:" << response_code; | 159 DVLOG(1) << "OnLogUploadComplete:" << response_code; |
160 DCHECK(thread_checker_.CalledOnValidThread()); | 160 DCHECK(thread_checker_.CalledOnValidThread()); |
161 DCHECK(log_upload_in_progress_); | 161 DCHECK(log_upload_in_progress_); |
162 log_upload_in_progress_ = false; | 162 log_upload_in_progress_ = false; |
163 | 163 |
164 // Log a histogram to track response success vs. failure rates. | 164 // Log a histogram to track response success vs. failure rates. |
165 LogResponseCode(response_code); | 165 LogResponseCode(response_code); |
166 | 166 |
167 bool upload_succeeded = response_code == 200; | 167 bool upload_succeeded = response_code == 200; |
168 | 168 |
169 // Provide boolean for error recovery (allow us to ignore response_code). | 169 // Staged log could have been removed already (such as by Purge() in some |
170 bool discard_log = false; | 170 // implementations), otherwise we may remove it here. |
171 const size_t log_size = log_store()->staged_log().length(); | 171 if (log_store()->has_staged_log()) { |
172 if (upload_succeeded) { | 172 // Provide boolean for error recovery (allow us to ignore response_code). |
173 LogSuccess(log_size); | 173 bool discard_log = false; |
174 } else if (log_size > max_retransmit_size_) { | 174 const size_t log_size = log_store()->staged_log().length(); |
175 LogLargeRejection(log_size); | 175 if (upload_succeeded) { |
176 discard_log = true; | 176 LogSuccess(log_size); |
177 } else if (response_code == 400) { | 177 } else if (log_size > max_retransmit_size_) { |
178 // Bad syntax. Retransmission won't work. | 178 LogLargeRejection(log_size); |
179 discard_log = true; | 179 discard_log = true; |
180 } | 180 } else if (response_code == 400) { |
| 181 // Bad syntax. Retransmission won't work. |
| 182 discard_log = true; |
| 183 } |
181 | 184 |
182 if (upload_succeeded || discard_log) { | 185 if (upload_succeeded || discard_log) { |
183 log_store()->DiscardStagedLog(); | 186 log_store()->DiscardStagedLog(); |
184 // Store the updated list to disk now that the removed log is uploaded. | 187 // Store the updated list to disk now that the removed log is uploaded. |
185 log_store()->PersistUnsentLogs(); | 188 log_store()->PersistUnsentLogs(); |
| 189 } |
186 } | 190 } |
187 | 191 |
188 // Error 400 indicates a problem with the log, not with the server, so | 192 // Error 400 indicates a problem with the log, not with the server, so |
189 // don't consider that a sign that the server is in trouble. | 193 // don't consider that a sign that the server is in trouble. |
190 bool server_is_healthy = upload_succeeded || response_code == 400; | 194 bool server_is_healthy = upload_succeeded || response_code == 400; |
191 if (!log_store()->has_unsent_logs()) { | 195 if (!log_store()->has_unsent_logs()) { |
192 DVLOG(1) << "Stopping upload_scheduler_."; | 196 DVLOG(1) << "Stopping upload_scheduler_."; |
193 upload_scheduler_->Stop(); | 197 upload_scheduler_->Stop(); |
194 } | 198 } |
195 upload_scheduler_->UploadFinished(server_is_healthy); | 199 upload_scheduler_->UploadFinished(server_is_healthy); |
196 } | 200 } |
197 | 201 |
198 } // namespace metrics | 202 } // namespace metrics |
OLD | NEW |