получить частичный рабочий статус приложения с помощью jython

Привет, мне нужно знать, работает ли приложение частично. используя следующую команду, я могу получить информацию, работает ли приложение.

serverstatus = AdminControl.completeObjectName('type=Application,name='+n1+',*')
print serverstatus

Есть ли другой способ проверить, является ли текущий статус приложения частично запущенным??

С уважением Снехан Соломон


person Snehan Solomon    schedule 11.10.2011    source источник
comment
Не могли бы вы объяснить частично работает?   -  person Davanum Srinivas - dims    schedule 11.10.2011
comment
@dims Я считаю, что частичный запуск в консоли администратора означает, что приложение работает на некоторых, но не на всех членах кластера. Я считаю, что вам нужно сравнить список серверов, на которых работает приложение, со списком интересующих вас серверов.   -  person Brett Kail    schedule 11.10.2011


Ответы (2)


Чтобы точно определить, запущено или остановлено приложение частично, необходимо сначала определить цели развертывания, для которых развертывается приложение, а затем определить, выполняется ли приложение на этом сервере:

def isApplicationRunning(applicationName, serverName, nodeName) :
    return AdminControl.completeObjectName("type=Application,name=%s,process=%s,node=%s,*" % (applicationName, serverName, nodeName)) != ""

def printApplicationStatus(applicationName) :

    servers = started = 0
    targets = AdminApplication.getAppDeploymentTarget(applicationName)
    for target in targets :
        type = AdminConfig.getObjectType(target)
        if (type == "ClusteredTarget") :
            clusterName = AdminConfig.showAttribute(target, "name")
            members = AdminUtilities.convertToList(AdminConfig.getid("/ServerCluster:%s/ClusterMember:/" % clusterName))
            for member in members :
                serverName = AdminConfig.showAttribute(target, "name")
                nodeName = AdminConfig.showAttribute(member, "nodeName")
                started += isApplicationRunning(applicationName, serverName, nodeName)
                servers += 1
        elif (type == "ServerTarget") :
            serverName = AdminConfig.showAttribute(target, "name")
            nodeName = AdminConfig.showAttribute(target, "nodeName")
            started += isApplicationRunning(applicationName, serverName, nodeName)
            servers += 1

    if (started == 0) :
        print "The application [%s] is NOT RUNNING." % applicationName
    elif (started != servers) :
        print "The application [%s] is PARTIALLY RUNNING." % applicationName
    else :
        print "The application [%s] is RUNNING." % applicationName

if (__name__ == "__main__"):
    printApplicationStatus(sys.argv[0]);

Обратите внимание, что AdminApplicationбиблиотека скриптов существует только для WAS 7+, поэтому, если вы используете более старую версию, вам нужно будет получить цели развертывания самостоятельно.

person shelley    schedule 21.11.2011
comment
Ничего себе, это действительно надежный метод по сравнению с моим. Это определенно поможет кому-то с аналогичным требованием. Спасибо большое в любом случае за ваш ответ :) - person Snehan Solomon; 23.11.2011

Мне удалось получить частичный статус приложения на основе количества узлов. Я просто жестко запрограммировал количество узлов, а затем сравнил их с количеством возвращенных MBean-компонентов.

import sys
appName = sys.argv[0]
appCount=0
nodeCount=2
appMBeans = AdminControl.queryNames('type=Application,name='+appName+',*').split("\n")
for mbean in appMBeans:
if mbean != "":
    appCount=appCount+1
print "Count of Applications is %s" %(appCount)
if appCount == 0:
    print "----!!!ALERT!!!!---- The Application "+appName+" is Not Running"
elif appCount > 0 and appCount < nodeCount:
    print "----!!!ALERT!!!!---- The Application "+appName+" is Partially Running"
elif appCount == nodeCount:
    print "The Application "+appName+" is Running"
person Snehan Solomon    schedule 28.10.2011
comment
Этот подход невероятно хрупок. Количество серверов, на которых развернуто приложение, не обязательно соответствует количеству существующих узлов. Например, возможно, что на одном узле существует несколько серверов или что приложение развернуто не на каждом узле. Я добавил гораздо более надежный и точный ответ< /а>. - person shelley; 22.11.2011