diff options
Diffstat (limited to 'cpp/src/IceGrid/AdminRouter.cpp')
-rw-r--r-- | cpp/src/IceGrid/AdminRouter.cpp | 51 |
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); } - |