5 #ifndef __CONNECTION_INFO_H__
6 #define __CONNECTION_INFO_H__
11 #include <boost/tuple/tuple.hpp>
12 #include <boost/asio/ip/tcp.hpp>
13 #include <boost/bind/bind.hpp>
14 #include <boost/assign/list_of.hpp>
15 #include <boost/scoped_ptr.hpp>
18 #include <base/sandesh/process_info_constants.h>
19 #include <base/sandesh/process_info_types.h>
20 #include <base/sandesh/cpuinfo_constants.h>
21 #include <base/sandesh/cpuinfo_types.h>
22 #include <base/sandesh/nodeinfo_constants.h>
23 #include <base/sandesh/nodeinfo_types.h>
25 using namespace boost::placeholders;
27 class ConnectionInfoTest;
31 typedef boost::asio::ip::tcp::endpoint
Endpoint;
32 typedef boost::function<void (
const std::vector<ConnectionInfo> &,
38 const std::vector<ConnectionTypeName> &expected_connections);
40 const std::vector<ConnectionTypeName> &expected_connections,
41 std::string &message);
55 std::vector<ConnectionInfo> GetInfos()
const;
60 const std::vector<Endpoint> &servers, std::string message);
67 typedef boost::function<void (
void)>
SendUveCb;
69 std::vector<ConnectionInfo> GetInfosUnlocked()
const;
72 static void CreateInstance(
SendUveCb send_uve_cb);
74 static boost::scoped_ptr<ConnectionState> instance_;
75 mutable std::mutex mutex_;
84 if (instance_ == NULL) {
88 assert(ConnectionState::instance_ == NULL);
89 ConnectionState::CreateInstance(boost::bind(
91 SendProcessStateUve, instance_.get(),
false));
92 FlagUveManager::CreateInstance(FlagManager::GetInstance(),
94 SendProcessStateUve, instance_.get(),
false));
96 return instance_.get();
99 void Init(boost::asio::io_context &service,
const std::string &hostname,
100 const std::string &module,
const std::string &instance_id,
102 data_.set_name(hostname);
103 process_status_.set_module_id(module);
104 process_status_.set_instance_id(instance_id);
105 status_cb_ = status_cb;
106 data_.table_ = table;
115 friend class ::ConnectionInfoTest;
123 status_cb_ = status_cb;
127 std::vector<FlagInfo> GetFlagInfos(
const FlagConfigVec &flag_infos);
130 if (status_cb_.empty()) {
135 process_status_.set_connection_infos(lock ?
136 ConnectionState::GetInstance()->GetInfos() :
137 ConnectionState::GetInstance()->GetInfosUnlocked());
139 process_status_.set_flag_infos(GetFlagInfos(
140 FlagUveManager::GetInstance()->GetFlagInfos(lock)));
143 status_cb_(process_status_.get_connection_infos(), pstate, message);
144 process_status_.set_state(g_process_info_constants.
145 ProcessStateNames.find(pstate)->second);
146 process_status_.set_description(message);
148 std::vector<ProcessStatus> vps = boost::assign::list_of
150 data_.set_process_status(vps);
151 NodeStatusUVE::Send(data_);
155 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