summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/AdminRouter.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2017-02-10 17:42:30 -0500
committerBernard Normier <bernard@zeroc.com>2017-02-10 17:42:30 -0500
commit43382f18da8d0dd88c26df6cc27690dcb80060ab (patch)
tree56fcaa357e4d5b8f2b4c0b1e53d53c53823b60e4 /cpp/src/IceGrid/AdminRouter.cpp
parentFix java-compat/Slice/generation test (diff)
downloadice-43382f18da8d0dd88c26df6cc27690dcb80060ab.tar.bz2
ice-43382f18da8d0dd88c26df6cc27690dcb80060ab.tar.xz
ice-43382f18da8d0dd88c26df6cc27690dcb80060ab.zip
ICE-7547: add tracing for admin-routing in IceGrid
Diffstat (limited to 'cpp/src/IceGrid/AdminRouter.cpp')
-rw-r--r--cpp/src/IceGrid/AdminRouter.cpp51
1 files changed, 44 insertions, 7 deletions
diff --git a/cpp/src/IceGrid/AdminRouter.cpp b/cpp/src/IceGrid/AdminRouter.cpp
index 380521140dc..3808a4545e8 100644
--- a/cpp/src/IceGrid/AdminRouter.cpp
+++ b/cpp/src/IceGrid/AdminRouter.cpp
@@ -19,28 +19,61 @@ class CallbackI : public IceUtil::Shared
{
public:
- CallbackI(const AMD_Object_ice_invokePtr& cb) :
- _cb(cb)
+ CallbackI(const AMD_Object_ice_invokePtr& cb, const Ice::ObjectPrx& target, const string& operation,
+ const IceGrid::TraceLevelsPtr& traceLevels) :
+ _cb(cb),
+ _target(target),
+ _operation(operation),
+ _traceLevels(traceLevels)
{
}
void response(bool ok, const pair<const Byte*, const Byte*>& outParams)
{
+ if(_traceLevels->admin > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adminCat);
+
+ out << "operation `" << _operation << "' routed to `" << Ice::identityToString(_target->ice_getIdentity())
+ << " -f " << _target->ice_getFacet() << "' is returning ";
+ if(ok)
+ {
+ out << "successfully";
+ }
+ else
+ {
+ out << "a user exception";
+ }
+ }
_cb->ice_response(ok, outParams);
}
- void exception(const Ice::Exception&)
+ void exception(const Ice::Exception& ex)
{
+ if(_traceLevels->admin > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adminCat);
+ out << "operation `" << _operation << "' routed to `" << Ice::identityToString(_target->ice_getIdentity())
+ << " -f " << _target->ice_getFacet() << "' failed with " << ex;
+ }
// Admin object is unreachable
_cb->ice_exception(ObjectNotExistException(__FILE__, __LINE__));
}
private:
AMD_Object_ice_invokePtr _cb;
+ Ice::ObjectPrx _target;
+ string _operation;
+ const IceGrid::TraceLevelsPtr _traceLevels;
};
}
+IceGrid::AdminRouter::AdminRouter(const TraceLevelsPtr& traceLevels) :
+ _traceLevels(traceLevels)
+{
+}
+
void
IceGrid::AdminRouter::invokeOnTarget(const Ice::ObjectPrx& target,
const AMD_Object_ice_invokePtr& cb,
@@ -52,9 +85,13 @@ IceGrid::AdminRouter::invokeOnTarget(const Ice::ObjectPrx& target,
//
// Call with AMI
//
- Callback_Object_ice_invokePtr amiCb = newCallback_Object_ice_invoke(new CallbackI(cb),
- &CallbackI::response,
- &CallbackI::exception);
+ Callback_Object_ice_invokePtr amiCb = newCallback_Object_ice_invoke(
+ new CallbackI(cb, target, current.operation, _traceLevels), &CallbackI::response, &CallbackI::exception);
+
+ if(_traceLevels->admin > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adminCat);
+ out << "routing operation `" << current.operation << "' to `" << target->ice_toString() << "'";
+ }
target->begin_ice_invoke(current.operation, current.mode, inParams, current.ctx, amiCb);
}
-