blob: a1bd2747f956fa73dfff9dde81aa7d5d46fff51c [file] [log] [blame]
#ifndef PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_DAEMON_CONTEXT_H_
#define PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_DAEMON_CONTEXT_H_
#include <cstdint>
#include <utility>
#include "disruption_manager.h"
#include "persistent_storage.h"
#include "safepower_agent_config.pb.h"
#include "scheduler_interface.h"
#include "absl/base/nullability.h"
#include "absl/time/clock.h"
#include "absl/time/time.h"
namespace safepower_agent {
class DaemonContext {
public:
DaemonContext();
virtual ~DaemonContext();
static DaemonContext& Get();
virtual absl::Time now() const { return absl::Now(); }
virtual uint64_t epoch_ms() = 0;
virtual SchedulerInterface& scheduler() = 0;
virtual PersistentStorageManager& persistent_storage_manager() = 0;
const safepower_agent_config::SafePowerAgentConfig& config() const {
return config_;
}
void set_config(safepower_agent_config::SafePowerAgentConfig config) {
config_ = std::move(config);
}
DisruptionManager& disruption_manager() { return disruption_manager_; }
private:
static DaemonContext* instance_;
safepower_agent_config::SafePowerAgentConfig config_;
DisruptionManager disruption_manager_;
};
} // namespace safepower_agent
#endif // PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_DAEMON_CONTEXT_H_