blob: a090be326d582c4a36edc760fdd3e452f4b996ea [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors.All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVELOPER_FORENSICS_FEEDBACK_LAST_REBOOT_H_
#define SRC_DEVELOPER_FORENSICS_FEEDBACK_LAST_REBOOT_H_
#include <fuchsia/feedback/cpp/fidl.h>
#include <lib/async/dispatcher.h>
#include <lib/fidl/cpp/binding_set.h>
#include <lib/fit/function.h>
#include <lib/sys/cpp/service_directory.h>
#include <lib/zx/time.h>
#include <string>
#include "src/developer/forensics/feedback/reboot_log/reboot_log.h"
#include "src/developer/forensics/last_reboot/last_reboot_info_provider.h"
#include "src/developer/forensics/last_reboot/reboot_watcher.h"
#include "src/developer/forensics/last_reboot/reporter.h"
#include "src/developer/forensics/utils/cobalt/logger.h"
#include "src/developer/forensics/utils/redact/redactor.h"
namespace forensics::feedback {
// Implements functionality last_reboot.cm previously implemented.
class LastReboot {
public:
struct Options {
bool is_first_instance;
RebootLog reboot_log;
std::string graceful_reboot_reason_write_path;
zx::duration oom_crash_reporting_delay;
};
LastReboot(async_dispatcher_t* dispatcher, std::shared_ptr<sys::ServiceDirectory> services,
cobalt::Logger* cobalt, RedactorBase* redactor,
fuchsia::feedback::CrashReporter* crash_reporter, Options options);
void Handle(::fidl::InterfaceRequest<fuchsia::feedback::LastRebootInfoProvider> request,
::fit::function<void(zx_status_t)> error_handler);
private:
async_dispatcher_t* dispatcher_;
last_reboot::ImminentGracefulRebootWatcher reboot_watcher_;
last_reboot::Reporter reporter_;
last_reboot::LastRebootInfoProvider last_reboot_info_provider_;
::fidl::BindingSet<fuchsia::feedback::LastRebootInfoProvider>
last_reboot_info_provider_connections_;
};
} // namespace forensics::feedback
#endif // SRC_DEVELOPER_FORENSICS_FEEDBACK_LAST_REBOOT_H_