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