26#ifndef ROUTER_SRC_REST_MRS_SRC_HELPER_PLUGIN_MONITOR_H_
27#define ROUTER_SRC_REST_MRS_SRC_HELPER_PLUGIN_MONITOR_H_
52 observer_id_ = ps_->push_back_observer(observer_);
56 if (PluginState::k_invalid_id_ != observer_id_) {
57 ps_->remove_observer(observer_id_);
67 observer_->wait_for_services_.wait([&
services,
69 if (
nullptr == state)
return true;
73 return 0 != state->active_services_.count(name);
81 state->active_and_stopped_services_.count(name);
89 log_debug(
"wait_for_services ended with '%s'",
90 (
result ?
"success" :
"failure"));
96 if (observer_) observer_->reset();
107 const std::vector<std::string> &active_plugins,
108 const std::vector<std::string> &stopped_plugins)
override {
109 wait_for_services_.serialize_with_cv(
111 [[maybe_unused]]
auto &cv) {
115 for (
auto &
p : active_plugins) {
119 for (
auto &
p : stopped_plugins) {
126 const std::string &
name)
override {
128 wait_for_services_.serialize_with_cv(
138 const std::string &
name)
override {
140 wait_for_services_.serialize_with_cv(
151 wait_for_services_.serialize_with_cv([](
PluginMonitor *&ptr,
auto &cv) {
Monitor can be waited for.
Definition: monitor.h:62
Definition: plugin_monitor.h:102
WaitableMonitor< PluginMonitor * > wait_for_services_
Definition: plugin_monitor.h:157
ServiceObserver(PluginMonitor *parent)
Definition: plugin_monitor.h:104
void on_plugin_shutdown(const PluginState *state, const std::string &name) override
Definition: plugin_monitor.h:137
void on_begin_observation(const std::vector< std::string > &active_plugins, const std::vector< std::string > &stopped_plugins) override
Definition: plugin_monitor.h:106
void reset()
Definition: plugin_monitor.h:150
void on_plugin_startup(const PluginState *state, const std::string &name) override
Definition: plugin_monitor.h:125
Definition: plugin_monitor.h:43
std::shared_ptr< ServiceObserver > observer_
Definition: plugin_monitor.h:162
~PluginMonitor()
Definition: plugin_monitor.h:55
Services active_services_
Definition: plugin_monitor.h:163
void abort()
Definition: plugin_monitor.h:95
std::string ServiceName
Definition: plugin_monitor.h:45
Services get_active_services()
Definition: plugin_monitor.h:99
bool wait_for_services(const Services &services)
Definition: plugin_monitor.h:63
std::set< ServiceName > Services
Definition: plugin_monitor.h:46
Services active_and_stopped_services_
Definition: plugin_monitor.h:164
PluginState * ps_
Definition: plugin_monitor.h:160
PluginMonitor(PluginState *ps=PluginState::get_instance())
Definition: plugin_monitor.h:50
Definition: plugin_state_observer.h:36
Definition: plugin_state.h:41
uint32_t ObserverId
Definition: plugin_state.h:45
Log log_debug(std::cout, "DEBUG")
const char * p
Definition: ctype-mb.cc:1227
Logging interface for using and extending the logging subsystem.
#define IMPORT_LOG_FUNCTIONS()
convenience macro to avoid common boilerplate
Definition: logging.h:323
std::string to_string(const std::pair< PairFirst, PairSecond > &pair)
Definition: to_string.h:46
Definition: services.cc:40
struct result result
Definition: result.h:34
case opt name
Definition: sslopt-case.h:29