| Index: components/domain_reliability/scheduler.cc
|
| diff --git a/components/domain_reliability/scheduler.cc b/components/domain_reliability/scheduler.cc
|
| index 3b7cfb5212f46a277fd1c3ff9a5de98dd0f523f1..fa8ba50969b1fd2216db503708e67398e94e2018 100644
|
| --- a/components/domain_reliability/scheduler.cc
|
| +++ b/components/domain_reliability/scheduler.cc
|
| @@ -8,6 +8,7 @@
|
|
|
| #include "base/metrics/field_trial.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/values.h"
|
| #include "components/domain_reliability/config.h"
|
| #include "components/domain_reliability/util.h"
|
|
|
| @@ -74,7 +75,8 @@ DomainReliabilityScheduler::DomainReliabilityScheduler(
|
| upload_pending_(false),
|
| upload_scheduled_(false),
|
| upload_running_(false),
|
| - collector_index_(kInvalidCollectorIndex) {
|
| + collector_index_(kInvalidCollectorIndex),
|
| + last_upload_finished_(false) {
|
| }
|
|
|
| DomainReliabilityScheduler::~DomainReliabilityScheduler() {}
|
| @@ -100,6 +102,9 @@ size_t DomainReliabilityScheduler::OnUploadStart() {
|
|
|
| VLOG(1) << "Starting upload to collector " << collector_index_ << ".";
|
|
|
| + last_upload_start_time_ = now;
|
| + last_upload_collector_index_ = collector_index_;
|
| +
|
| return collector_index_;
|
| }
|
|
|
| @@ -125,8 +130,13 @@ void DomainReliabilityScheduler::OnUploadComplete(bool success) {
|
| ++collector->failures;
|
| }
|
|
|
| + base::TimeTicks now = time_->NowTicks();
|
| base::TimeDelta retry_interval = GetUploadRetryInterval(collector->failures);
|
| - collector->next_upload = time_->NowTicks() + retry_interval;
|
| + collector->next_upload = now + retry_interval;
|
| +
|
| + last_upload_end_time_ = now;
|
| + last_upload_success_ = success;
|
| + last_upload_finished_ = true;
|
|
|
| VLOG(1) << "Next upload to collector at least "
|
| << retry_interval.InSeconds() << " seconds from now.";
|
| @@ -134,6 +144,42 @@ void DomainReliabilityScheduler::OnUploadComplete(bool success) {
|
| MaybeScheduleUpload();
|
| }
|
|
|
| +base::Value* DomainReliabilityScheduler::GetWebUIData() const {
|
| + base::TimeTicks now = time_->NowTicks();
|
| +
|
| + base::DictionaryValue* data = new base::DictionaryValue();
|
| +
|
| + data->SetBoolean("upload_pending", upload_pending_);
|
| + data->SetBoolean("upload_scheduled", upload_scheduled_);
|
| + data->SetBoolean("upload_running", upload_running_);
|
| +
|
| + data->SetInteger("scheduled_min", (scheduled_min_time_ - now).InSeconds());
|
| + data->SetInteger("scheduled_max", (scheduled_max_time_ - now).InSeconds());
|
| +
|
| + data->SetInteger("collector_index", collector_index_);
|
| +
|
| + if (last_upload_finished_) {
|
| + base::DictionaryValue* last = new base::DictionaryValue();
|
| + last->SetInteger("start_time", (now - last_upload_start_time_).InSeconds());
|
| + last->SetInteger("end_time", (now - last_upload_end_time_).InSeconds());
|
| + last->SetInteger("collector_index", last_upload_collector_index_);
|
| + last->SetBoolean("success", last_upload_success_);
|
| + data->Set("last_upload", last);
|
| + }
|
| +
|
| + base::ListValue* collectors = new base::ListValue();
|
| + for (size_t i = 0; i < collectors_.size(); ++i) {
|
| + const CollectorState* state = &collectors_[i];
|
| + base::DictionaryValue* value = new base::DictionaryValue();
|
| + value->SetInteger("failures", state->failures);
|
| + value->SetInteger("next_upload", (state->next_upload - now).InSeconds());
|
| + collectors->Append(value);
|
| + }
|
| + data->Set("collectors", collectors);
|
| +
|
| + return data;
|
| +}
|
| +
|
| DomainReliabilityScheduler::CollectorState::CollectorState() : failures(0) {}
|
|
|
| void DomainReliabilityScheduler::MaybeScheduleUpload() {
|
| @@ -154,8 +200,11 @@ void DomainReliabilityScheduler::MaybeScheduleUpload() {
|
| size_t collector_index;
|
| GetNextUploadTimeAndCollector(now, &min_by_backoff, &collector_index);
|
|
|
| - base::TimeDelta min_delay = std::max(min_by_deadline, min_by_backoff) - now;
|
| - base::TimeDelta max_delay = std::max(max_by_deadline, min_by_backoff) - now;
|
| + scheduled_min_time_ = std::max(min_by_deadline, min_by_backoff);
|
| + scheduled_max_time_ = std::max(max_by_deadline, min_by_backoff);
|
| +
|
| + base::TimeDelta min_delay = scheduled_min_time_ - now;
|
| + base::TimeDelta max_delay = scheduled_max_time_ - now;
|
|
|
| VLOG(1) << "Scheduling upload for between " << min_delay.InSeconds()
|
| << " and " << max_delay.InSeconds() << " seconds from now.";
|
|
|