5 #include <sandesh/request_pipeline.h>
7 #include <boost/bind/bind.hpp>
8 #include <boost/assign/list_of.hpp>
15 #include "ifmap/ifmap_server_show_types.h"
17 using namespace boost::assign;
19 using namespace boost::placeholders;
23 static const int kMaxElementsPerRound = 50;
38 vector<IFMapXmppClientInfo>::const_iterator
first;
45 static bool BufferStage(
const Sandesh *sr,
48 static void CopyNode(IFMapXmppClientInfo *dest,
IFMapClient *src);
50 int stage,
int instNum,
57 dest->set_client_index(src->
index());
67 VmRegInfo vm_reg_info;
68 vm_reg_info.vm_list = src->
vm_list();
69 vm_reg_info.vm_count = vm_reg_info.vm_list.size();
70 dest->set_vm_reg_info(vm_reg_info);
75 int stage,
int instNum,
77 const IFMapXmppClientInfoShowReq *request =
78 static_cast<const IFMapXmppClientInfoShowReq *
>(ps.
snhRequest_.get());
88 for (IFMapServer::ClientMap::iterator iter = client_map.begin();
89 iter != client_map.end(); ++iter) {
90 IFMapXmppClientInfo dest;
102 int stage,
int instNum,
107 (prev_stage_data->at(0));
112 vector<IFMapXmppClientInfo> dest_buffer;
113 vector<IFMapXmppClientInfo>::const_iterator first, last;
116 if (tracker_data->
init) {
118 tracker_data->
init = 0;
120 first = tracker_data->
first;
123 int send_num = (rem_num < kMaxElementsPerRound) ? rem_num :
124 kMaxElementsPerRound;
125 last = first + send_num;
126 copy(first, last, back_inserter(dest_buffer));
128 if ((rem_num - send_num) > 0) {
133 const IFMapXmppClientInfoShowReq *request =
134 static_cast<const IFMapXmppClientInfoShowReq *
>(ps.
snhRequest_.get());
135 IFMapXmppClientInfoShowResp *response =
new IFMapXmppClientInfoShowResp();
136 response->set_client_stats(dest_buffer);
137 response->set_context(request->context());
138 response->set_more(more);
139 response->Response();
140 tracker_data->
first = first + send_num;
146 void IFMapXmppClientInfoShowReq::HandleRequest()
const {
165 ps.stages_= list_of(s0)(s1)
166 .convert_to_container<vector<RequestPipeline::StageSpec> >();
uint64_t delete_nodes_sent() const
uint64_t update_nodes_sent() const
uint64_t update_links_sent() const
virtual const std::string & identifier() const =0
uint64_t delete_links_sent() const
std::vector< std::string > vm_list() const
uint64_t msgs_blocked() const
uint64_t msgs_sent() const
bool send_is_blocked() const
uint64_t bytes_sent() const
IFMapServer * ifmap_server()
const ClientMap & GetClientMap() const
std::map< std::string, IFMapClient * > ClientMap
boost::ptr_vector< InstData > StageData
static void CopyNode(IFMapXmppClientInfo *dest, IFMapClient *src)
static RequestPipeline::InstData * AllocTracker(int stage)
static RequestPipeline::InstData * AllocBuffer(int stage)
static bool SendStage(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static bool BufferStage(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
int GetTaskId(const std::string &name)
static TaskScheduler * GetInstance()
boost::shared_ptr< const SandeshRequest > snhRequest_
const StageData * GetStageData(int stage) const
std::vector< int > instances_
vector< IFMapXmppClientInfo > send_buffer
vector< IFMapXmppClientInfo >::const_iterator first