blob: 6d1ef63ec9b0932775e75d125850314c794eb2a0 [file] [log] [blame]
// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "missive/scheduler/enqueue_job.h"
#include <memory>
#include <string>
#include <utility>
#include <base/strings/strcat.h>
#include <base/strings/string_number_conversions.h>
#include "missive/proto/interface.pb.h"
#include "missive/scheduler/scheduler.h"
#include "missive/storage/storage_module_interface.h"
#include "missive/util/status.h"
namespace reporting {
EnqueueJob::EnqueueResponseDelegate::EnqueueResponseDelegate(
std::unique_ptr<
brillo::dbus_utils::DBusMethodResponse<EnqueueRecordResponse>> response)
: response_(std::move(response)) {
DCHECK(response_);
}
Status EnqueueJob::EnqueueResponseDelegate::Complete() {
return SendResponse(Status::StatusOK());
}
Status EnqueueJob::EnqueueResponseDelegate::Cancel(Status status) {
return SendResponse(status);
}
Status EnqueueJob::EnqueueResponseDelegate::SendResponse(Status status) {
if (response_->IsResponseSent()) {
return Status(error::INTERNAL, "Response has already been sent");
}
EnqueueRecordResponse response_body;
status.SaveTo(response_body.mutable_status());
response_->Return(response_body);
return Status::StatusOK();
}
EnqueueJob::EnqueueJob(scoped_refptr<StorageModuleInterface> storage_module,
EnqueueRecordRequest request,
std::unique_ptr<EnqueueResponseDelegate> delegate)
: Job(std::move(delegate)),
storage_module_(storage_module),
request_(std::move(request)) {}
void EnqueueJob::StartImpl() {
storage_module_->AddRecord(
request_.priority(), std::move(request_.record()),
base::BindOnce(&EnqueueJob::Finish, base::Unretained(this)));
}
} // namespace reporting