diff options
author | Bernard Normier <bernard@zeroc.com> | 2014-09-10 19:09:53 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2014-09-10 19:09:53 +0000 |
commit | ac587d9f1a6d34e46956fd17c81f99beb7ed97ad (patch) | |
tree | fa09b2b2d5b6037c76976ee293eb0d15b7a93717 /cpp/src/IceGrid/Parser.cpp | |
parent | Fix networkProxy test dependencies (diff) | |
download | ice-ac587d9f1a6d34e46956fd17c81f99beb7ed97ad.tar.bz2 ice-ac587d9f1a6d34e46956fd17c81f99beb7ed97ad.tar.xz ice-ac587d9f1a6d34e46956fd17c81f99beb7ed97ad.zip |
IceGrid::Admin now provides remote access to IceGrid registry and node Admin objects, and icegridadmin uses these
new operations to show the Ice log file for IceGrid registries and IceGrid nodes (ICE-2400)
Diffstat (limited to 'cpp/src/IceGrid/Parser.cpp')
-rw-r--r-- | cpp/src/IceGrid/Parser.cpp | 175 |
1 files changed, 94 insertions, 81 deletions
diff --git a/cpp/src/IceGrid/Parser.cpp b/cpp/src/IceGrid/Parser.cpp index 951ef773f97..75b1153109f 100644 --- a/cpp/src/IceGrid/Parser.cpp +++ b/cpp/src/IceGrid/Parser.cpp @@ -2352,107 +2352,120 @@ void Parser::showLog(const string& id, const string& reader, bool tail, bool follow, int lineCount) { cout << endl; + + Ice::ObjectPrx admin; if(reader == "server") { - Ice::ObjectPrx serverAdmin = _admin->getServerAdmin(id); + admin = _admin->getServerAdmin(id); + } + else if(reader == "node") + { + admin = _admin->getNodeAdmin(id); + } + else if(reader == "registry") + { + admin = _admin->getRegistryAdmin(id); + } - Ice::LoggerAdminPrx loggerAdmin; - try - { - loggerAdmin = Ice::LoggerAdminPrx::checkedCast(serverAdmin, "Logger"); - } - catch(const Ice::Exception&) - { - loggerAdmin = 0; - } + if(admin == 0) + { + error("cannot retrieve Admin proxy for " + reader + " `" + id + "'"); + return; + } + + Ice::LoggerAdminPrx loggerAdmin; + + try + { + loggerAdmin = Ice::LoggerAdminPrx::checkedCast(admin, "Logger"); + } + catch(const Ice::Exception&) + { + } + + if(loggerAdmin == 0) + { + error("cannot retrieve Logger admin facet for " + reader + " `" + id + "'"); + return; + } - if(loggerAdmin == 0) + if(follow) + { + Ice::ObjectPrx adminCallbackTemplate = _session->getAdminCallbackTemplate(); + + if(adminCallbackTemplate == 0) { - error("cannot retrieve Logger facet for server '" + id + "'"); + error("cannot retriever Callback template from IceGrid registry"); return; } - if(follow) + const Ice::EndpointSeq endpoints = adminCallbackTemplate->ice_getEndpoints(); + string publishedEndpoints; + + for(Ice::EndpointSeq::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) { - Ice::ObjectPrx adminCallbackTemplate = _session->getAdminCallbackTemplate(); - - if(adminCallbackTemplate == 0) + if(publishedEndpoints.empty()) { - error("cannot retriever Callback template from IceGrid registry"); - return; - } - - const Ice::EndpointSeq endpoints = adminCallbackTemplate->ice_getEndpoints(); - string publishedEndpoints; - - for(Ice::EndpointSeq::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) - { - if(publishedEndpoints.empty()) - { - publishedEndpoints = (*p)->toString(); - } - else - { - publishedEndpoints += ":" + (*p)->toString(); - } + publishedEndpoints = (*p)->toString(); } - - _communicator->getProperties()->setProperty("RemoteLoggerAdapter.PublishedEndpoints", publishedEndpoints); - - Ice::ObjectAdapterPtr adapter = - _communicator->createObjectAdapter("RemoteLoggerAdapter"); - - _session->ice_getConnection()->setAdapter(adapter); - - Ice::Identity id; - id.name = "RemoteLogger-" + IceUtil::generateUUID(); - id.category = adminCallbackTemplate->ice_getIdentity().category; - - RemoteLoggerIPtr servant = new RemoteLoggerI; - Ice::RemoteLoggerPrx prx = - Ice::RemoteLoggerPrx::uncheckedCast(adapter->add(servant, id)); - adapter->activate(); - - loggerAdmin->attachRemoteLogger(prx, Ice::LogMessageTypeSeq(), Ice::StringSeq(), - tail ? lineCount : -1); - - resetInterrupt(); + else { - Lock lock(*this); - while(!_interrupted) - { - wait(); - } + publishedEndpoints += ":" + (*p)->toString(); } - - servant->destroy(); - adapter->destroy(); + } + + _communicator->getProperties()->setProperty("RemoteLoggerAdapter.PublishedEndpoints", publishedEndpoints); + + Ice::ObjectAdapterPtr adapter = _communicator->createObjectAdapter("RemoteLoggerAdapter"); + + _session->ice_getConnection()->setAdapter(adapter); + + Ice::Identity id; + id.name = "RemoteLogger-" + IceUtil::generateUUID(); + id.category = adminCallbackTemplate->ice_getIdentity().category; + + RemoteLoggerIPtr servant = new RemoteLoggerI; + Ice::RemoteLoggerPrx prx = + Ice::RemoteLoggerPrx::uncheckedCast(adapter->add(servant, id)); + adapter->activate(); + + loggerAdmin->attachRemoteLogger(prx, Ice::LogMessageTypeSeq(), Ice::StringSeq(), tail ? lineCount : -1); - try - { - loggerAdmin->detachRemoteLogger(prx); - } - catch(const Ice::ObjectNotExistException&) - { - // ignored - } - catch(const Ice::RemoteLoggerNotAttachedException&) + resetInterrupt(); + { + Lock lock(*this); + while(!_interrupted) { - // ignored + wait(); } } - else + + servant->destroy(); + adapter->destroy(); + + try + { + loggerAdmin->detachRemoteLogger(prx); + } + catch(const Ice::ObjectNotExistException&) { - string prefix; - const Ice::LogMessageSeq logMessages = - loggerAdmin->getLog(Ice::LogMessageTypeSeq(), Ice::StringSeq(), - tail ? lineCount : -1, prefix); + // ignored + } + catch(const Ice::RemoteLoggerNotAttachedException&) + { + // ignored + } + } + else + { + string prefix; + const Ice::LogMessageSeq logMessages = loggerAdmin->getLog(Ice::LogMessageTypeSeq(), Ice::StringSeq(), + tail ? lineCount : -1, prefix); - for(Ice::LogMessageSeq::const_iterator p = logMessages.begin(); p != logMessages.end(); ++p) - { - printLogMessage(prefix, *p); - } + for(Ice::LogMessageSeq::const_iterator p = logMessages.begin(); p != logMessages.end(); ++p) + { + printLogMessage(prefix, *p); } } } |