summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/Parser.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2014-09-10 19:09:53 +0000
committerBernard Normier <bernard@zeroc.com>2014-09-10 19:09:53 +0000
commitac587d9f1a6d34e46956fd17c81f99beb7ed97ad (patch)
treefa09b2b2d5b6037c76976ee293eb0d15b7a93717 /cpp/src/IceGrid/Parser.cpp
parentFix networkProxy test dependencies (diff)
downloadice-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.cpp175
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);
}
}
}