track and show server peer address

This commit is contained in:
Michael Davidsaver
2015-12-08 22:01:38 -05:00
parent 41491d00bf
commit 3e130d4f79
4 changed files with 21 additions and 6 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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();

View File

@ -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 "