5 #ifndef __CONNECTION_INFO_H__
6 #define __CONNECTION_INFO_H__
12 #include <boost/tuple/tuple.hpp>
13 #include <boost/asio/ip/tcp.hpp>
14 #include <boost/bind/bind.hpp>
15 #include <boost/assign/list_of.hpp>
16 #include <boost/scoped_ptr.hpp>
19 #include <base/sandesh/process_info_constants.h>
20 #include <base/sandesh/process_info_types.h>
21 #include <base/sandesh/cpuinfo_constants.h>
22 #include <base/sandesh/cpuinfo_types.h>
23 #include <base/sandesh/nodeinfo_constants.h>
24 #include <base/sandesh/nodeinfo_types.h>
26 using namespace boost::placeholders;
28 class ConnectionInfoTest;
32 typedef boost::asio::ip::tcp::endpoint
Endpoint;
33 typedef boost::function<void (
const std::vector<ConnectionInfo> &,
39 const std::vector<ConnectionTypeName> &expected_connections);
41 const std::vector<ConnectionTypeName> &expected_connections,
42 std::string &message);
56 std::vector<ConnectionInfo> GetInfos()
const;
61 const std::vector<Endpoint> &servers, std::string message);
68 typedef boost::function<void (
void)>
SendUveCb;
70 std::vector<ConnectionInfo> GetInfosUnlocked()
const;
73 static void CreateInstance(
SendUveCb send_uve_cb);
75 static boost::scoped_ptr<ConnectionState> instance_;
76 mutable std::mutex mutex_;
85 if (instance_ == NULL) {
89 assert(ConnectionState::instance_ == NULL);
90 ConnectionState::CreateInstance(boost::bind(
92 SendProcessStateUve, instance_.get(),
false));
93 FlagUveManager::CreateInstance(FlagManager::GetInstance(),
95 SendProcessStateUve, instance_.get(),
false));
97 return instance_.get();
100 void Init(boost::asio::io_context &service,
const std::string &hostname,
101 const std::string &module,
const std::string &instance_id,
103 data_.set_name(hostname);
104 process_status_.set_module_id(module);
105 process_status_.set_instance_id(instance_id);
106 status_cb_ = status_cb;
107 data_.table_ = table;
116 friend class ::ConnectionInfoTest;
124 status_cb_ = status_cb;
128 std::vector<FlagInfo> GetFlagInfos(
const FlagConfigVec &flag_infos);
131 if (status_cb_.empty()) {
134 std::scoped_lock uve_lock(uve_mutex_);
137 process_status_.set_connection_infos(lock ?
138 ConnectionState::GetInstance()->GetInfos() :
139 ConnectionState::GetInstance()->GetInfosUnlocked());
141 process_status_.set_flag_infos(GetFlagInfos(
142 FlagUveManager::GetInstance()->GetFlagInfos(lock)));
145 status_cb_(process_status_.get_connection_infos(), pstate, message);
146 process_status_.set_state(g_process_info_constants.
147 ProcessStateNames.find(pstate)->second);
148 process_status_.set_description(message);
150 std::vector<ProcessStatus> vps = boost::assign::list_of
152 data_.set_process_status(vps);
153 NodeStatusUVE::Send(data_);
157 static boost::scoped_ptr<ConnectionStateManager>
instance_;
ProcessStateFn status_cb_
static boost::scoped_ptr< ConnectionStateManager > instance_
static ConnectionStateManager * GetInstance()
ProcessStatus process_status_
void Init(boost::asio::io_context &service, const std::string &hostname, const std::string &module, const std::string &instance_id, ProcessStateFn status_cb, std::string table)
void SetProcessStateCb(ProcessStateFn status_cb)
bool SendProcessStateUve(bool lock)
boost::tuple< ConnectionType::type, std::string > ConnectionInfoKey
void Update(ConnectionType::type ctype, const std::string &name, ConnectionStatus::type status, Endpoint server, std::string message)
boost::function< void(void)> SendUveCb
void Update(ConnectionType::type ctype, const std::string &name, ConnectionStatus::type status, const std::vector< Endpoint > &servers, std::string message)
std::map< ConnectionInfoKey, ConnectionInfo > ConnectionInfoMap
boost::asio::ip::tcp::endpoint Endpoint
void GetConnectionInfoMessage(const std::vector< ConnectionInfo > &cinfos, const std::vector< ConnectionTypeName > &expected_connections, std::string &message)
std::vector< FlagConfig > FlagConfigVec
boost::function< void(const std::vector< ConnectionInfo > &, ProcessState::type &, std::string &)> ProcessStateFn
void GetProcessStateCb(const std::vector< ConnectionInfo > &cinfos, ProcessState::type &state, std::string &message, const std::vector< ConnectionTypeName > &expected_connections)
std::pair< std::string, std::string > ConnectionTypeName