blob: ac37f6629fc87fd4e9807e099612a41a68b1b923 [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PATCHPANEL_PATCHPANEL_DAEMON_H_
#define PATCHPANEL_PATCHPANEL_DAEMON_H_
#include <memory>
#include <base/files/file_path.h>
#include <brillo/daemons/dbus_daemon.h>
#include <chromeos/net-base/process_manager.h>
#include <metrics/metrics_library.h>
#include "patchpanel/patchpanel_adaptor.h"
#include "patchpanel/system.h"
namespace patchpanel {
// Main class that runs the main loop and responds to D-Bus RPC requests.
class PatchpanelDaemon final : public brillo::DBusServiceDaemon {
public:
explicit PatchpanelDaemon(const base::FilePath& cmd_path);
PatchpanelDaemon(const PatchpanelDaemon&) = delete;
PatchpanelDaemon& operator=(const PatchpanelDaemon&) = delete;
~PatchpanelDaemon() = default;
protected:
// Implements brillo::DBusServiceDaemon.
void RegisterDBusObjectsAsync(
brillo::dbus_utils::AsyncEventSequencer* sequencer) override;
// Callback from Daemon to notify that the message loop exits and before
// Daemon::Run() returns.
void OnShutdown(int* exit_code) override;
private:
// The file path of the patchpanel daemon binary.
base::FilePath cmd_path_;
// Unique instance of patchpanel::System shared for all subsystems of the main
// patchpanel process.
std::unique_ptr<System> system_;
// The singleton instance that manages the creation and exit notification of
// each subprocess. All the subprocesses should be created by this.
net_base::ProcessManager* process_manager_;
// UMA metrics client.
std::unique_ptr<MetricsLibraryInterface> metrics_;
// Patchpanel adaptor.
std::unique_ptr<PatchpanelAdaptor> adaptor_;
};
} // namespace patchpanel
#endif // PATCHPANEL_PATCHPANEL_DAEMON_H_