blob: c91d105ce216b59fc4c655f416c3e43c940d9e52 [file] [log] [blame]
#ifndef PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_STATIC_STATE_H_
#define PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_STATIC_STATE_H_
#include <memory>
#include <string>
#include "safepower_agent.pb.h"
#include "state_updater.h"
#include "absl/functional/any_invocable.h"
#include "absl/status/statusor.h"
#include "absl/time/time.h"
namespace safepower_agent {
struct StaticStateLoaderConfig {
absl::Duration retry_interval = absl::Seconds(1);
absl::Duration timeout = absl::InfiniteDuration();
int max_retries = -1;
};
class StaticStateLoader {
public:
using GetStateCallback = absl::AnyInvocable<void(
absl::StatusOr<safepower_agent_proto::SystemState>)>;
explicit StaticStateLoader(
std::string name,
absl::AnyInvocable<absl::StatusOr<safepower_agent_proto::SystemState>()>
get_state,
std::shared_ptr<StateUpdater<safepower_agent_proto::SystemState>>
state_updater,
const StaticStateLoaderConfig& config = {});
explicit StaticStateLoader(
std::string name, absl::AnyInvocable<void(GetStateCallback)> get_state,
std::shared_ptr<StateUpdater<safepower_agent_proto::SystemState>>
state_updater,
const StaticStateLoaderConfig& config = {});
~StaticStateLoader();
private:
void TryLoadState();
std::string name_;
absl::AnyInvocable<void(GetStateCallback)> get_state_;
std::shared_ptr<StateUpdater<safepower_agent_proto::SystemState>>
state_updater_;
absl::Duration retry_interval_;
absl::Time timeout_time_;
int retries_left_ = 0;
};
} // namespace safepower_agent
#endif // PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_STATIC_STATE_H_