Dripline-Cpp  v2.10.11
Dripline Implementation in C++
agent.hh
Go to the documentation of this file.
1 /*
2  * agent.hh
3  *
4  * Created on: Jun 2, 2016
5  * Author: nsoblath
6  *
7  */
8 
9 #ifndef DRIPLINE_AGENT_HH_
10 #define DRIPLINE_AGENT_HH_
11 
12 #include "message.hh"
13 
14 #include "param.hh"
15 
16 
17 namespace scarab
18 {
19  class authentication;
20 }
21 namespace dripline
22 {
23  class core;
24 
74  {
75  public:
77  {
78  public:
79  sub_agent( agent* an_agent ) : f_agent( an_agent ) {};
80  sub_agent( const sub_agent& ) = default;
81  sub_agent( sub_agent&& ) = default;
82  virtual ~sub_agent() = default;
83 
84  sub_agent& operator=( const sub_agent& ) = default;
85  sub_agent& operator=( sub_agent&& ) = default;
86 
87  void execute( const scarab::param_node& a_config, const scarab::authentication& a_auth );
88  void execute( const scarab::param_node& a_config, const scarab::param_array& a_ord_args, const scarab::authentication& a_auth );
89 
90  virtual void create_and_send_message( scarab::param_node& a_config, const core& a_core ) = 0;
91  virtual void create_and_send_message( const core& a_core );
92 
93  protected:
95  };
96 
98  {
99  public:
100  sub_agent_request( agent* an_agent ) : sub_agent( an_agent ) {}
103  virtual ~sub_agent_request() = default;
104 
107 
108  virtual void create_and_send_message( scarab::param_node& a_config, const core& a_core );
109 
110  virtual request_ptr_t create_request( scarab::param_node& a_config ) = 0;
111  };
112 
114  {
115  public:
116  sub_agent_reply( agent* an_agent ) : sub_agent( an_agent ) {}
117  sub_agent_reply( const sub_agent_reply& ) = default;
119  virtual ~sub_agent_reply() = default;
120 
123 
124  virtual void create_and_send_message( scarab::param_node& a_config, const core& a_core );
125  };
126 
128  {
129  public:
130  sub_agent_alert( agent* an_agent ) : sub_agent( an_agent ) {}
131  sub_agent_alert( const sub_agent_alert& ) = default;
133  virtual ~sub_agent_alert() = default;
134 
137 
138  virtual void create_and_send_message( scarab::param_node& a_config, const core& a_core );
139  };
140 
142  {
143  public:
144  sub_agent_run( agent* an_agent ) : sub_agent_request( an_agent ) {}
145  sub_agent_run( const sub_agent_run& ) = default;
146  sub_agent_run( sub_agent_run&& ) = default;
147  virtual ~sub_agent_run() = default;
148 
149  sub_agent_run& operator=( const sub_agent_run& ) = default;
151 
152  virtual request_ptr_t create_request( scarab::param_node& a_config );
153  };
154 
156  {
157  public:
158  sub_agent_get( agent* an_agent ) : sub_agent_request( an_agent ) {}
159  sub_agent_get( const sub_agent_get& ) = default;
160  sub_agent_get( sub_agent_get&& ) = default;
161  virtual ~sub_agent_get() = default;
162 
163  sub_agent_get& operator=( const sub_agent_get& ) = default;
165 
166  virtual request_ptr_t create_request( scarab::param_node& a_config );
167  };
168 
170  {
171  public:
172  sub_agent_set( agent* an_agent ) : sub_agent_request( an_agent ) {}
173  sub_agent_set( const sub_agent_set& ) = default;
174  sub_agent_set( sub_agent_set&& ) = default;
175  virtual ~sub_agent_set() = default;
176 
177  sub_agent_set& operator=( const sub_agent_set& ) = default;
179 
180  virtual request_ptr_t create_request( scarab::param_node& a_config );
181  };
182 
184  {
185  public:
186  sub_agent_cmd( agent* an_agent ) : sub_agent_request( an_agent ) {}
187  sub_agent_cmd( const sub_agent_cmd& ) = default;
188  sub_agent_cmd( sub_agent_cmd&& ) = default;
189  virtual ~sub_agent_cmd() = default;
190 
191  sub_agent_cmd& operator=( const sub_agent_cmd& ) = default;
193 
194  virtual request_ptr_t create_request( scarab::param_node& a_config );
195  };
196 
197  public:
198  agent();
199  agent( const agent& ) = default;
200  agent( agent&& ) = default;
201  virtual ~agent() = default;
202 
203  agent& operator=( const agent& ) = default;
204  agent& operator=( agent&& ) = default;
205 
206  template< typename sub_agent_type >
207  void execute( const scarab::param_node& a_config, const scarab::authentication& a_auth );
208  template< typename sub_agent_type >
209  void execute( const scarab::param_node& a_config, const scarab::param_array& a_ord_args, const scarab::authentication& a_auth );
210 
211  mv_accessible( bool, is_dry_run );
212 
213  // all message types
214  mv_referrable( std::string, routing_key );
215  mv_referrable( std::string, specifier );
216 
217  // requests only
218  mv_referrable( uuid_t, lockout_key );
219 
220  // alerts only
221  mv_accessible( unsigned, return_code );
222  mv_referrable( std::string, return_message );
223 
224  // use only for requests
225  mv_accessible( unsigned, timeout );
226  mv_accessible( bool, suppress_output );
227  mv_accessible( bool, json_print );
228  mv_accessible( bool, pretty_print );
229  mv_referrable( std::string, save_filename );
230 
231  mv_accessible( reply_ptr_t, reply );
232 
233  mv_accessible( int, return );
234 
235  };
236 
237  template< typename sub_agent_type >
238  void agent::execute( const scarab::param_node& a_config, const scarab::authentication& a_auth )
239  {
240  sub_agent_type t_sub_agent( this );
241  scarab::param_array t_ord_args;
242  t_sub_agent.execute( a_config, t_ord_args, a_auth );
243  return;
244  }
245 
246  template< typename sub_agent_type >
247  void agent::execute( const scarab::param_node& a_config, const scarab::param_array& a_ord_args, const scarab::authentication& a_auth )
248  {
249  sub_agent_type t_sub_agent( this );
250  t_sub_agent.execute( a_config, a_ord_args, a_auth );
251  return;
252  }
253 
254  inline void agent::sub_agent::create_and_send_message( const core& a_core )
255  {
256  scarab::param_node t_config;
257  create_and_send_message( t_config, a_core );
258  return;
259  }
260 
261 } /* namespace dripline */
262 
263 #endif /* DRIPLINE_AGENT_HH_ */
sub_agent_alert(sub_agent_alert &&)=default
sub_agent_alert(const sub_agent_alert &)=default
sub_agent_alert & operator=(sub_agent_alert &&)=default
virtual ~sub_agent_alert()=default
sub_agent_alert(agent *an_agent)
Definition: agent.hh:130
sub_agent_alert & operator=(const sub_agent_alert &)=default
sub_agent_cmd(const sub_agent_cmd &)=default
sub_agent_cmd(sub_agent_cmd &&)=default
sub_agent_cmd(agent *an_agent)
Definition: agent.hh:186
sub_agent_cmd & operator=(sub_agent_cmd &&)=default
sub_agent_cmd & operator=(const sub_agent_cmd &)=default
virtual ~sub_agent_cmd()=default
sub_agent_get(sub_agent_get &&)=default
sub_agent_get & operator=(const sub_agent_get &)=default
virtual ~sub_agent_get()=default
sub_agent_get(const sub_agent_get &)=default
sub_agent_get(agent *an_agent)
Definition: agent.hh:158
sub_agent_get & operator=(sub_agent_get &&)=default
sub_agent_reply(sub_agent_reply &&)=default
sub_agent_reply(agent *an_agent)
Definition: agent.hh:116
virtual ~sub_agent_reply()=default
sub_agent_reply(const sub_agent_reply &)=default
sub_agent_reply & operator=(sub_agent_reply &&)=default
sub_agent_reply & operator=(const sub_agent_reply &)=default
sub_agent_request(sub_agent_request &&)=default
sub_agent_request & operator=(const sub_agent_request &)=default
virtual request_ptr_t create_request(scarab::param_node &a_config)=0
sub_agent_request & operator=(sub_agent_request &&)=default
virtual ~sub_agent_request()=default
sub_agent_request(agent *an_agent)
Definition: agent.hh:100
sub_agent_request(const sub_agent_request &)=default
sub_agent_run & operator=(sub_agent_run &&)=default
virtual request_ptr_t create_request(scarab::param_node &a_config)
virtual ~sub_agent_run()=default
sub_agent_run & operator=(const sub_agent_run &)=default
sub_agent_run(const sub_agent_run &)=default
sub_agent_run(sub_agent_run &&)=default
sub_agent_run(agent *an_agent)
Definition: agent.hh:144
sub_agent_set & operator=(const sub_agent_set &)=default
sub_agent_set(sub_agent_set &&)=default
sub_agent_set(agent *an_agent)
Definition: agent.hh:172
virtual ~sub_agent_set()=default
sub_agent_set(const sub_agent_set &)=default
sub_agent_set & operator=(sub_agent_set &&)=default
sub_agent(const sub_agent &)=default
sub_agent(sub_agent &&)=default
sub_agent & operator=(sub_agent &&)=default
virtual void create_and_send_message(scarab::param_node &a_config, const core &a_core)=0
sub_agent(agent *an_agent)
Definition: agent.hh:79
sub_agent & operator=(const sub_agent &)=default
virtual ~sub_agent()=default
Takes command-line arguments and sends messages.
Definition: agent.hh:74
agent(agent &&)=default
agent & operator=(const agent &)=default
agent(const agent &)=default
void execute(const scarab::param_node &a_config, const scarab::authentication &a_auth)
Definition: agent.hh:238
agent & operator=(agent &&)=default
virtual ~agent()=default
Basic AMQP interactions, including sending messages and interacting with AMQP channels.
Definition: core.hh:75
Parses routing keys and stores the tokenized information.
Definition: specifier.hh:28
Parses specifiers and stores the tokenized information.
Definition: specifier.hh:61
#define DRIPLINE_API
Definition: dripline_api.hh:34
std::shared_ptr< msg_reply > reply_ptr_t
Definition: dripline_fwd.hh:24
std::shared_ptr< msg_request > request_ptr_t
Definition: dripline_fwd.hh:23
boost::uuids::uuid uuid_t
Universally-unique-identifier type containing 16 hexadecimal characters.
Definition: uuid.hh:26
Definition: agent.hh:18
Base class for return codes.
Definition: return_codes.hh:40