5 #ifndef SRC_VNSW_AGENT_SERVICES_HEALTH_CHECK_H_
6 #define SRC_VNSW_AGENT_SERVICES_HEALTH_CHECK_H_
8 #include <boost/scoped_ptr.hpp>
13 #define HEALTH_CHECK_TRACE(obj, ...)\
15 HealthCheck##obj::TraceMsg(HealthCheckTraceBuf, __FILE__, __LINE__,\
45 const std::string &name,
46 const std::string &monitor_type,
47 const std::string &stype,
49 const std::string &http_method,
50 const std::string &url_path,
52 const std::string &expected_codes,
53 uint32_t delay, uint64_t delay_usecs,
54 uint32_t timeout, uint64_t timeout_usecs,
57 std::set<IpAddress> cfg_target_ip_list,
103 const std::string &message);
119 bool ignore_status_event);
133 void OnRead(
const std::string &data);
135 void OnExit(
const boost::system::error_code &ec);
169 boost::scoped_ptr<MetaDataIp>
ip_;
196 bool ignore_status_event);
211 boost::scoped_ptr<HeathCheckProcessInstance>
task_;
222 bool ignore_status_event,
bool multi_hop);
254 bool ignore_status_event,
bool multi_hop);
281 typedef std::map<boost::uuids::uuid, HealthCheckInstanceBase *>
InstanceList;
289 virtual std::string
ToString()
const;
306 bool ignore_status_event,
314 destination_ip, destination_mac,
417 const std::string &
name);
434 const std::string &context);
boost::asio::ip::address IpAddress
boost::intrusive_ptr< HealthCheckService > HealthCheckServiceRef
boost::intrusive_ptr< Interface > InterfaceRef
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
uint32_t GetRefCount() const
std::unique_ptr< DBRequestKey > KeyPtr
const std::string & name() const
virtual bool StopInstanceTask()=0
virtual bool RunInstanceTask()=0
void set_service(HealthCheckService *service)
IpAddress destination_ip() const
IpAddress update_source_ip()
bool IsStatusEventIgnored() const
HealthCheckInstanceBase(HealthCheckService *service, MetaDataIpAllocator *allocator, VmInterface *intf, bool ignore_status_event)
InterfaceRef interface() const
IpAddress get_source_ip() const
void set_source_ip(const IpAddress &ip)
DISALLOW_COPY_AND_ASSIGN(HealthCheckInstanceBase)
virtual bool UpdateInstanceTask()
void StopTask(HealthCheckService *service)
void set_destination_ip(const IpAddress &ip)
std::string last_update_time_
void OnExit(const boost::system::error_code &ec)
void EnqueueHealthCheckResync(const HealthCheckService *service, const VmInterface *itf) const
virtual bool DestroyInstanceTask()=0
HealthCheckServiceRef service_
virtual ~HealthCheckInstanceBase()
virtual bool IsRunning() const
IpAddress source_ip() const
void OnRead(const std::string &data)
IpAddress destination_ip_
boost::scoped_ptr< MetaDataIp > ip_
const std::string & last_update_time() const
void SetService(HealthCheckService *service)
virtual void ResyncTarget(const HealthCheckService *service) const
virtual bool CreateInstanceTask()=0
HealthCheckService * service() const
bool ignore_status_event_
void EnqueueResync(const HealthCheckService *service, Interface *itf) const
virtual bool DestroyInstanceTask()
HealthCheckInstanceService(HealthCheckService *service, MetaDataIpAllocator *allocator, VmInterface *intf, VmInterface *other_intf, bool ignore_status_event, bool multi_hop)
virtual bool RunInstanceTask()
bool is_multi_hop() const
void EnqueueMacIpLearningHCStatus(const HealthCheckService *service) const
virtual void ResyncTarget(const HealthCheckService *service) const
virtual ~HealthCheckInstanceService()
virtual bool StopInstanceTask()
DISALLOW_COPY_AND_ASSIGN(HealthCheckInstanceService)
virtual bool CreateInstanceTask()
virtual bool UpdateInstanceTask()
void UpdateInstanceTaskCommand()
virtual bool DestroyInstanceTask()
virtual ~HealthCheckInstanceTask()
HealthCheckInstanceTask(HealthCheckService *service, MetaDataIpAllocator *allocator, VmInterface *intf, bool ignore_status_event)
virtual bool StopInstanceTask()
virtual bool RunInstanceTask()
DISALLOW_COPY_AND_ASSIGN(HealthCheckInstanceTask)
InstanceTaskExecvp HeathCheckProcessInstance
virtual bool CreateInstanceTask()
virtual bool IsRunning() const
static const std::string kHealthCheckCmd
boost::scoped_ptr< HeathCheckProcessInstance > task_
virtual void set_destination_mac(const MacAddress &mac)
HealthCheckMacIpInstanceService(HealthCheckService *service, MetaDataIpAllocator *allocator, VmInterface *intf, VmInterface *other_intf, bool ignore_status_event, bool multi_hop)
virtual const MacAddress destination_mac() const
DISALLOW_COPY_AND_ASSIGN(HealthCheckMacIpInstanceService)
virtual void ResyncTarget(const HealthCheckService *service) const
virtual ~HealthCheckMacIpInstanceService()
HealthCheckType health_check_type_
std::map< IpAddress, HealthCheckInstanceBase * > IpInstanceList
bool IsVnIpListHealthCheckService() const
const std::set< IpAddress > & GetTargetIpList()
HealthCheckType health_check_type() const
const HealthCheckTable * table() const
virtual std::string ToString() const
const std::string & url_path() const
uint32_t GetRefCount() const
HealthCheckType GetHealthCheckType() const
void StopHealthCheckService(HealthCheckInstanceBase *instance)
void ResyncHealthCheckInterface(const HealthCheckService *service, const VmInterface *intf)
std::set< IpAddress > target_ip_list_
HealthCheckService(const HealthCheckTable *table, const boost::uuids::uuid &id)
virtual bool IsLess(const DBEntry &rhs) const
const HealthCheckTable * table_
HealthCheckInstanceBase * StartHealthCheckService(VmInterface *intrface, const IpAddress &source_ip, const IpAddress &destination_ip, const MacAddress destination_mac=MacAddress())
std::set< boost::uuids::uuid > vn_uuid_list_
bool IsSegmentHealthCheckService() const
void UpdateInterfaceInstanceServiceReference(const VmInterface *intf)
IpAddress dest_ip() const
DISALLOW_COPY_AND_ASSIGN(HealthCheckService)
uint32_t max_retries() const
bool DBEntrySandesh(Sandesh *resp, std::string &name) const
std::string monitor_type_
bool IsInstanceTaskBased() const
virtual void SetKey(const DBRequestKey *key)
const std::string & name() const
virtual KeyPtr GetDBRequestKey() const
std::map< boost::uuids::uuid, HealthCheckInstanceBase * > InstanceList
bool IsTargetIpPresent(IpAddress &ip)
uint64_t timeout_usecs() const
HealthCheckInstanceBase * StartHealthCheckService(VmInterface *intrface, VmInterface *paired_vmi, const IpAddress &source_ip, const IpAddress &destination_ip, const MacAddress &destination_mac, bool ignore_status_event, bool multi_hop)
bool IsHcEnableAllTargetIp() const
@ MAX_HEALTH_CHECK_SERVICES
std::string expected_codes_
const std::set< boost::uuids::uuid > & GetVnUuidList()
uint16_t url_port() const
bool is_hc_enable_all_ip_
const std::string & monitor_type() const
uint64_t delay_usecs() const
std::string service_type_
const boost::uuids::uuid & uuid() const
bool Copy(HealthCheckTable *table, const HealthCheckServiceData *data)
void UpdateInstanceServiceReference()
WorkQueue< HealthCheckInstanceEvent * > * inst_event_queue_
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
boost::function< bool(HealthCheckServiceAction, HealthCheckInstanceService *)> HealthCheckServiceCallback
HealthCheckTable(Agent *agent, DB *db, const std::string &name)
virtual size_t Hash(const DBRequestKey *key) const
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
virtual ~HealthCheckTable()
DISALLOW_COPY_AND_ASSIGN(HealthCheckTable)
HealthCheckNotifyCallback health_check_notify_callback() const
HealthCheckNotifyCallback health_check_notify_cb_
bool ProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
virtual bool OperDBResync(DBEntry *entry, const DBRequest *req)
HealthCheckServiceCallback health_check_service_callback(HealthCheckService::HealthCheckType type) const
virtual size_t Hash(const DBEntry *entry) const
HealthCheckService * Find(const boost::uuids::uuid &u)
virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req)
void RegisterHealthCheckNotifyCallback(HealthCheckNotifyCallback fn)
boost::function< void(const HealthCheckInstanceService *)> HealthCheckNotifyCallback
virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
virtual DBEntry * OperDBAdd(const DBRequest *req)
static DBTableBase * CreateTable(Agent *agent, DB *db, const std::string &name)
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
bool InstanceEventProcess(HealthCheckInstanceEvent *event)
virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req)
void InstanceEventEnqueue(HealthCheckInstanceEvent *event) const
HealthCheckServiceCallback health_check_service_cb_[HealthCheckService::MAX_HEALTH_CHECK_SERVICES]
void RegisterHealthCheckCallback(HealthCheckServiceCallback fn, HealthCheckService::HealthCheckType type)
SandeshTraceBufferPtr HealthCheckTraceBuf
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
const Agent * agent() const
IFMapNode * ifmap_node() const
virtual ~HealthCheckInstanceEvent()
DISALLOW_COPY_AND_ASSIGN(HealthCheckInstanceEvent)
HealthCheckInstanceBase * instance_
HealthCheckInstanceEvent(HealthCheckInstanceBase *inst, HealthCheckService *service, EventType type, const std::string &message)
HealthCheckService * service_
HealthCheckResyncInterfaceData(const Agent *agent, IFMapNode *node, const VmInterface *intf)
const VmInterface * intf_
virtual ~HealthCheckServiceData()
std::set< boost::uuids::uuid > intf_uuid_list_
std::string monitor_type_
std::string expected_codes_
std::string service_type_
std::set< IpAddress > new_target_ip_list_
HealthCheckServiceData(Agent *agent, IpAddress dest_ip, const std::string &name, const std::string &monitor_type, const std::string &stype, uint8_t ip_proto, const std::string &http_method, const std::string &url_path, uint16_t url_port, const std::string &expected_codes, uint32_t delay, uint64_t delay_usecs, uint32_t timeout, uint64_t timeout_usecs, uint32_t max_retries, bool is_all_ip, std::set< IpAddress > cfg_target_ip_list, IFMapNode *ifmap_node)
std::set< boost::uuids::uuid > vn_uuid_list_
virtual ~HealthCheckServiceKey()
HealthCheckServiceKey(const boost::uuids::uuid &id, DBSubOperation sub_op)
HealthCheckServiceKey(const boost::uuids::uuid &id)