track and show server peer address
This commit is contained in:
@ -65,6 +65,7 @@ struct MonitorUser : public epics::pvData::Monitor
|
||||
|
||||
MonitorCacheEntry::shared_pointer entry;
|
||||
epics::pvData::MonitorRequester::weak_pointer req;
|
||||
std::tr1::weak_ptr<GWChannel> srvchan;
|
||||
|
||||
// guards queues and member variables
|
||||
epicsMutex queueLock;
|
||||
|
@ -12,9 +12,11 @@ namespace pvd = epics::pvData;
|
||||
size_t GWChannel::num_instances;
|
||||
|
||||
GWChannel::GWChannel(ChannelCacheEntry::shared_pointer e,
|
||||
pva::ChannelRequester::shared_pointer r)
|
||||
pva::ChannelRequester::shared_pointer r,
|
||||
std::string addr)
|
||||
:entry(e)
|
||||
,requester(r)
|
||||
,address(addr)
|
||||
{
|
||||
epicsAtomicIncrSizeT(&num_instances);
|
||||
}
|
||||
@ -195,6 +197,7 @@ GWChannel::createMonitor(
|
||||
mon.reset(new MonitorUser(ment));
|
||||
ment->interested.insert(mon);
|
||||
mon->weakref = mon;
|
||||
mon->srvchan = shared_pointer(weakref);
|
||||
mon->req = monitorRequester;
|
||||
|
||||
typedesc = ment->typedesc;
|
||||
|
@ -11,11 +11,13 @@ struct GWChannel : public epics::pvAccess::Channel
|
||||
static size_t num_instances;
|
||||
weak_pointer weakref;
|
||||
|
||||
ChannelCacheEntry::shared_pointer entry;
|
||||
epics::pvAccess::ChannelRequester::shared_pointer requester;
|
||||
const ChannelCacheEntry::shared_pointer entry;
|
||||
const epics::pvAccess::ChannelRequester::shared_pointer requester;
|
||||
const std::string address; // address of client on GW server side
|
||||
|
||||
GWChannel(ChannelCacheEntry::shared_pointer e,
|
||||
epics::pvAccess::ChannelRequester::shared_pointer);
|
||||
epics::pvAccess::ChannelRequester::shared_pointer,
|
||||
std::string addr);
|
||||
virtual ~GWChannel();
|
||||
|
||||
|
||||
|
@ -143,7 +143,7 @@ struct GWServerChannelProvider : public
|
||||
if(it!=cache.entries.end() && it->second->channel
|
||||
&& it->second->channel->isConnected())
|
||||
{
|
||||
ret.reset(new GWChannel(it->second, channelRequester));
|
||||
ret.reset(new GWChannel(it->second, channelRequester, address));
|
||||
it->second->interested.insert(ret);
|
||||
ret->weakref = ret;
|
||||
}
|
||||
@ -383,6 +383,7 @@ void statusServer(int lvl, const char *chanexpr)
|
||||
MonitorUser& MU = **it3;
|
||||
|
||||
size_t nempty, nfilled, nused, total;
|
||||
std::string remote;
|
||||
bool isrunning;
|
||||
{
|
||||
Guard G(MU.queueLock);
|
||||
@ -391,10 +392,18 @@ void statusServer(int lvl, const char *chanexpr)
|
||||
nfilled = MU.filled.size();
|
||||
nused = MU.inuse.size();
|
||||
isrunning = MU.running;
|
||||
|
||||
GWChannel::shared_pointer srvchan(MU.srvchan.lock());
|
||||
if(srvchan)
|
||||
remote = srvchan->address;
|
||||
else
|
||||
remote = "<unknown>";
|
||||
}
|
||||
total = nempty + nfilled + nused;
|
||||
|
||||
std::cout<<" Server monitor"<<(isrunning?"":" Paused")
|
||||
std::cout<<" Server monitor from "
|
||||
<<remote
|
||||
<<(isrunning?"":" Paused")
|
||||
<<" buffer "<<nfilled<<"/"<<total
|
||||
<<" out "<<nused<<"/"<<total
|
||||
<<" "<<epicsAtomicGetSizeT(&MU.nwakeups)<<" wakeups "
|
||||
|
Reference in New Issue
Block a user