Impresión de un resumen del estado de tiempo de ejecución de todos los motores de mensajería que se ejecutan en una célula
Puede utilizar scripts para listar los detalles de todos los motores de mensajería en todos los buses.
Acerca de esta tarea
Procedimiento
Ejemplo
Este ejemplo proporciona un script de ejemplo, con una salida de ejemplo.
# Programa de ejemplo
# * (C) COPYRIGHT International Business Machines Corp., 2008, 2009
# * Reservados todos los derechos * Materiales bajo Licencia - Propiedad de IBM
# *
# * Este programa de ejemplo se proporciona TAL CUAL y se puede utilizar, ejecutar,
# * copiar y modificar sin que el cliente realice un pago de royalty
# *
# * (a) para su propia instrucción y estudio,
# * (b) para desarrollar aplicaciones diseñadas para ejecutarse con un
# * producto IBM WebSphere para el uso interno propio del cliente.
#
# Versión: 1.02
#
# Información:
# Este script imprime un resumen XML de la información de tiempo ejecución
# disponible para todos los puntos de cola, puntos de publicación, puntos
# de mediación, SIBus, enlaces y enlaces WMQ.
# El script se debe ejecutar en el Gestor de despliegue de la célula,
# de forma que la salida está disponible desde todos los motores de mensajería en todos los buses.
# El script recopila la misma información que se puede visualizar en
# la consola administrativa.
# La salida siguiente sólo está disponible cuando el script se ejecuta en
# un entorno de WebSphere Application Server Versión 7:
# - Información de enlace de bus de integración de servicios
# -Información de enlace WebSphere MQ
#
# Uso:
# UNIX, Linux, z/OS:
# <DMGR_PROFILE>/bin/wsadmin.sh -lang jython -f printSIBusSummary.py <OUTFILE.XML>
# Windows:
# <DMGR_PROFILE>\bin\wsadmin.bat -lang jython -f printSIBusSummary.py <OUTFILE.XML>
# Clase para imprimir un error en completo (con pila) en STDERR, así como un breve resumen
# dentro de la salida XML. Se asigna un entero a cada error, para ayudar a coincidir los dos.
clase ErrorTracker:
Recuento de errores = 0
# El método de ayuda para imprimir los detalles de excepción como un atributo de error en un distintivo
def printErrorAndCloseTag(self, exception_tuple, oneLine):
self.errorCount += 1
# Imprimir el error en STDERR
sys.stderr.write("ERROR [" + str(self.errorCount) + "]:\n")
sys.excepthook(exception_tuple[0],exception_tuple[1],exception_tuple[2])
# Imprimir un resumen del error en el archivo de salida
out.write(' error="[' + str(self.errorCount) + ']: ')
out.write(str(exception_tuple[0]).strip())
if exception_tuple[1] != None: out.write(': ' + str(exception_tuple[1]).strip())
if oneLine == 1: out.write('"/>\n')
else: out.write('">\n')
# Instancia global única del rastreador de errores
et = ErrorTracker()
# Método de ayuda para obtener un atributo JMX en una forma de serie
def getStrAttr(mBean, attr):
val = AdminControl.getAttribute_jmx(mBean, attr)
if val == None: val = ''
else: val = str(val)
return val
# Método de ayuda para obtener el valor de retorno del método JMX en forma de serie
def getStrReturnVal(mBean, method):
val = AdminControl.invoke_jmx(mBean, method, [], [])
if val == None: val = ''
else: val = str(val)
return val
# Método toString de ayuda para manejar los valores None (ninguno) como series vacías
def toStr(val):
if val == None: val = ''
else: val = str(val)
return val
# La clase del motor de mensajería envuelve un ME, correlaciona su nombre con/desde un UUID,
# y contiene todos los métodos utilizados para imprimir el estado de tiempo de ejecución
# de la clase de motores de
mensajería MessagingEngine:
"Una clase para imprimir un resumen de tiempo de ejecución de un motor de mensajería"
# Constructor
def __init__(self, bus, nombre, uuid):
self.bus = bus
self.name = nombre
self.uuid = uuid
# Método para imprimir un resumen del estado de tiempo de ejecución de este motor de mensajería
# - que es el punto de entrada en la clase (otros métodos son privados lógicamente)
def printRuntimeStateXML(self, indent):
# Imprimir el inicio del distintivo (dejando sitio para propiedades adicionales)
out.write(indent + '<MessagingEngine name="' + self.name + '" uuid="' + self.uuid + '"')
meMBean = None
try:
# Primera búsqueda de nuestro MBean
meLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMessagingEngine,name=' + self.name + ',*')
meMBeans = AdminControl.queryNames_jmx(meLookupName, None)
if (meMBeans == None) or (meMBeans.size() == 0):
# Sólo un motor de mensajería vacío
out.write(' state="Desconocido (no se ha encontrado MBean)">\n')
elif meMBeans.size() == 1:
# Guardar una ref al MBean
meMBean = meMBeans[0]
# Completar el distintivo de la entrada
out.write(' state="' + AdminControl.invoke_jmx(meMBean, "state", [], []) + '"')
out.write(' activeServer="' + meMBean.getKeyProperty("process") + '"')
out.write('>\n')
else:
# Sólo se espera cero/un MBean
raise Exception, "Encontrado " + str(len(meMBeans)) + " MBeans para motor de mensajería. Se esperaba 1"
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Iterar a través de los contenidos
if (meMBean != None):
self.printQueuePointsXML(meMBean, indent + " ")
self.printRemoteQueuePointsXML(meMBean, indent + " ")
self.printMediationPointsXML(meMBean, indent + " ")
self.printRemoteMediationPointsXML(meMBean, indent + " ")
self.printPublicationPointsXML(meMBean, indent + " ")
self.printRemotePublicationPointsXML(meMBean, indent + " ")
self.printRemoteSubscriptionPointsXML(meMBean, indent + " ")
self.printBusLinks(meMBean, indent + " ")
self.printWMQLinks(meMBean, indent + " ")
# Completar nuestro distintivo
out.write(indent + "</MessagingEngine>\n")
# Imprimir un resumen de todos los puntos de cola para el motor de mensajería,
# utilizando el ME MBean proporcionado buscado por el emisor
def printQueuePointsXML(self, meMBean, indent):
qpMBeans = None
out.write(indent + "<QueuePoints")
try:
# Obtener una lista de MBeans de punto de cola
qpLookupName = AdminControl.makeObjectName('WebSphere:type=SIBQueuePoint,SIBMessagingEngine=' + self.name + ',*')
qpMBeans = AdminControl.queryNames_jmx(qpLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada uno
para qpMBean en qpMBeans:
rqps = {} # Directorio de todos los RQP para este punto de cola
oneLineTag = 0
out.write(indent + " <QueuePoint")
try:
out.write(' name="' + qpMBean.getKeyProperty("name") + '@' + self.name + '"')
qpState = getStrAttr(qpMBean, "state")
out.write(' state="' + qpState + '"')
out.write(' depth="' + getStrAttr(qpMBean, "depth") + '"')
hmt = AdminControl.getAttribute_jmx(qpMBean, "highMessageThreshold")
if (hmt != None) and (hmt == java.lang.Long.MAX_VALUE): hmt = "MAX_VALUE"
out.write(' highMessageThreshold="' + str(hmt) + '"')
out.write(' sendAllowed="' + getStrAttr(qpMBean, "sendAllowed") + '"')
# Sólo intentar obtener detalles adicionales para puntos de cola activos
if qpState == 'ACTIVE':
# Obtener una lista de destinatarios de entrada, para puntos de cola remota
inboundReceivers = AdminControl.invoke_jmx(qpMBean, "listInboundReceivers", [], [])
# Obtener una lista de transmisores de cliente remoto, para puntos de cola remota
consumerTransmitters = AdminControl.invoke_jmx(qpMBean, "listRemoteConsumerTransmitters", [], [])
# Añadir RQP para todos los destinatarios de entrada
para ir en inboundReceivers:
uuid = ir.getRemoteEngineUuid()
if rqps.has_key(uuid): rqp = rqps[uuid]
else: rqp = KnownRemoteQueuePoint(qpMBean, uuid)
rqps[uuid] = rqp
rqp.inboundReceiver = ir
# Añadir RQP para todos los transmisores de cliente
para ct en consumerTransmitters:
uuid = ct.getRemoteEngineUuid()
if rqps.has_key(uuid): rqp = rqps[uuid]
else: rqp = KnownRemoteQueuePoint(qpMBean, uuid)
rqps[uuid] = rqp
rqp.consumerTransmitter = ct
# Si no tenemos RQP podemos terminar el distintivo en esta línea
if len(rqps.keys()) == 0:
out.write('/>\n')
oneLineTag = 1
else:
out.write('>\n') # Se necesita un distintivo completo
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Procesar cada RQP encontrado
para rqpUuid en rqps.keys():
rqp = rqps[rqpUuid]
rqp.printSummaryXML(indent + " ")
# Completar nuestro distintivo QueuePoint
if oneLineTag == 0: out.write(indent + " </QueuePoint>\n")
# Completar nuestro distintivo QueuePoints
out.write(indent + "</QueuePoints>\n")
# Imprimir un resumen de todos los puntos de cola remota para el motor de mensajería,
# utilizando el ME MBean proporcionado buscado por el emisor
def printRemoteQueuePointsXML(self, meMBean, indent):
rqpMBeans = None
out.write(indent + "<RemoteQueuePoints")
try:
# Obtener una lista de MBeans de punto de cola remota
rqpLookupName = AdminControl.makeObjectName('WebSphere:type=SIBRemoteQueuePoint,SIBMessagingEngine=' + self.name + ',*')
rqpMBeans = AdminControl.queryNames_jmx(rqpLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada uno
para rqpMBean en rqpMBeans:
oneLineTag = 0
out.write(indent + " <RemoteQueuePoint")
try:
out.write(' name="' + rqpMBean.getKeyProperty("name") + '@' + self.name + '"')
remoteMEuuid = getStrAttr(rqpMBean, "remoteMessagingEngineUuid")
if (mesByUUID.has_key(remoteMEuuid)): remoteMEName = mesByUUID[remoteMEuuid].name
else: remoteMEName = "Unknown"
out.write(' remoteME="' + remoteMEName + '"')
out.write(' remoteMEUUID="' + remoteMEuuid + '"')
# Obtener detalles del transmisor de salida, si existe una
currentOutboundMessages = 0
outboundMessagesSent = 0
outboundTransmitter = AdminControl.invoke_jmx(rqpMBean, "getOutboundTransmitter", [], [])
if (outboundTransmitter != None):
currentOutboundMessages = outboundTransmitter.getDepth()
outboundMessagesSent = outboundTransmitter.getNumberOfMessagesSent()
out.write(' currentOutboundMessages="' + str(currentOutboundMessages) + '"')
out.write(' outboundMessageSent="' + str(outboundMessagesSent) + '"')
# Obtener destinatario de cliente remoto, si existe uno.
remoteConsumerReceiver = AdminControl.invoke_jmx(rqpMBean, "getRemoteConsumerReceiver", [], [])
currentMessageRequests = 0
completedMessageRequests = 0
messageRequestsIssued = 0
if (remoteConsumerReceiver != None):
currentMessageRequests = remoteConsumerReceiver.getNumberOfActiveRequests()
completedMessageRequests = remoteConsumerReceiver.getNumberOfCompletedRequests()
messageRequestsIssued = remoteConsumerReceiver.getNumberOfRequestsIssued()
out.write(' currentMessageRequests="' + str(currentMessageRequests) + '"')
out.write(' completedMessageRequests="' + str(completedMessageRequests) + '"')
out.write(' messageRequestsIssued="' + str(messageRequestsIssued) + '"')
# Siempre una línea para puntos de cola remota
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Completar nuestro distintivo QueuePoints
out.write(indent + "</RemoteQueuePoints>\n")
# Imprimir un resumen de todos los puntos de publicación remota para el motor de mensajería,
# utilizando el ME MBean proporcionado buscado por el emisor
def printRemotePublicationPointsXML(self, meMBean, indent):
rppMBeans = None
out.write(indent + "<RemotePublicationPoints")
try:
# Obtener una lista de MBeans de punto de cola remota
rppLookupName = AdminControl.makeObjectName('WebSphere:type=SIBRemotePublicationPoint,SIBMessagingEngine=' + self.name + ',*')
rppMBeans = AdminControl.queryNames_jmx(rppLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada uno
for rppMBean in rppMBeans:
oneLineTag = 0
out.write(indent + " <RemotePublicationPoint")
try:
out.write(' name="' + rppMBean.getKeyProperty("name") + '@' + self.name + '"')
remoteMEuuid = getStrAttr(rppMBean, "remoteMessagingEngineUuid")
if (mesByUUID.has_key(remoteMEuuid)): remoteMEName = mesByUUID[remoteMEuuid].name
else: remoteMEName = "Unknown"
out.write(' remoteME="' + remoteMEName + '"')
out.write(' remoteMEUUID="' + remoteMEuuid + '"')
# Obtener detalles del transmisor de salida, si existe una
currentOutboundMessages = 0
outboundMessagesSent = 0
outboundTransmitters = AdminControl.invoke_jmx(rppMBean, "listOutboundTransmitters", [], [])
if (outboundTransmitters != None):
for outboundTransmitter in outboundTransmitters:
currentOutboundMessages += outboundTransmitter.getDepth()
outboundMessagesSent += outboundTransmitter.getNumberOfMessagesSent()
out.write(' currentOutboundMessages="' + str(currentOutboundMessages) + '"')
out.write(' outboundMessageSent="' + str(outboundMessagesSent) + '"')
# Siempre una línea para puntos de cola remota
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Completar nuestro distintivo RemotePublicationPoints
out.write(indent + "</RemotePublicationPoints>\n")
# Imprimir un resumen de todos los puntos de suscripción remota para el motor de mensajería,
# utilizando el ME MBean proporcionado buscado por el emisor
def printRemoteSubscriptionPointsXML(self, meMBean, indent):
rspMBeans = None
out.write(indent + "<RemoteSubscriptionPoints")
try:
# Obtener una lista de MBeans de punto de cola remota
rspLookupName = AdminControl.makeObjectName('WebSphere:type=SIBRemoteSubscriptionPoint,SIBMessagingEngine=' + self.name + ',*')
rspMBeans = AdminControl.queryNames_jmx(rspLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada uno
for rspMBean in rspMBeans:
oneLineTag = 0
out.write(indent + " <RemoteSubscriptionPoint")
try:
out.write(' name="' + rspMBean.getKeyProperty("name") + '"')
out.write(' topicSpace="' + getStrReturnVal(rspMBean, "getTopicSpace") + '"')
remoteMEuuid = getStrAttr(rspMBean, "remoteMessagingEngineUuid")
if (mesByUUID.has_key(remoteMEuuid)): remoteMEName = mesByUUID[remoteMEuuid].name
else: remoteMEName = "Unknown"
out.write(' remoteME="' + remoteMEName + '"')
out.write(' remoteMEUUID="' + remoteMEuuid + '"')
# Obtener destinatario de cliente remoto, si existe uno.
remoteConsumerReceiver = AdminControl.invoke_jmx(rspMBean, "getRemoteConsumerReceiver", [], [])
currentMessageRequests = 0
completedMessageRequests = 0
messageRequestsIssued = 0
if (remoteConsumerReceiver != None):
currentMessageRequests = remoteConsumerReceiver.getNumberOfActiveRequests()
completedMessageRequests = remoteConsumerReceiver.getNumberOfCompletedRequests()
messageRequestsIssued = remoteConsumerReceiver.getNumberOfRequestsIssued()
out.write(' currentMessageRequests="' + str(currentMessageRequests) + '"')
out.write(' completedMessageRequests="' + str(completedMessageRequests) + '"')
out.write(' messageRequestsIssued="' + str(messageRequestsIssued) + '"')
# Siempre una línea para puntos de cola remota
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Completar nuestro distintivo RemotePublicationPoints
out.write(indent + "</RemoteSubscriptionPoints>\n")
# Imprimir un resumen de todos los puntos de mediación para el motor de mensajería,
# utilizando el ME MBean proporcionado buscado por el emisor
def printMediationPointsXML(self, meMBean, indent):
mpMBeans = None
out.write(indent + "<MediationPoints")
try:
# Obtener una lista de MBeans de punto de mediación
mpLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMediationPoint,SIBMessagingEngine=' + self.name + ',*')
mpMBeans = AdminControl.queryNames_jmx(mpLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada uno
para mpMBean en mpMBeans:
out.write(indent + " <MediationPoint")
try:
out.write(' name="' + mpMBean.getKeyProperty("name") + '@' + self.name + '"')
mpState = getStrAttr(mpMBean, "currentState")
out.write(' status="' + mpState + '"')
out.write(' depth="' + getStrAttr(mpMBean, "depth") + '"')
hmt = AdminControl.getAttribute_jmx(mpMBean, "highMessageThreshold")
if (hmt != None) and (hmt == java.lang.Long.MAX_VALUE): hmt = "MAX_VALUE"
out.write(' highMessageThreshold="' + str(hmt) + '"')
out.write(' sendAllowed="' + getStrAttr(mpMBean, "sendAllowed") + '"')
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Completar nuestro distintivo QueuePoints
out.write(indent + "</MediationPoints>\n")
# Imprimir un resumen de todos los puntos de mediación remota para el motor de mensajería,
# utilizando el ME MBean proporcionado buscado por el emisor
def printRemoteMediationPointsXML(self, meMBean, indent):
rmpMBeans = None
out.write(indent + "<RemoteMediationPoints")
try:
# Obtener una lista de MBeans de punto de mediación remota
rmpLookupName = AdminControl.makeObjectName('WebSphere:type=SIBRemoteMediationPoint,SIBMessagingEngine=' + self.name + ',*')
rmpMBeans = AdminControl.queryNames_jmx(rmpLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada uno
para rmpMBean en rmpMBeans:
oneLineTag = 0
out.write(indent + " <RemoteMediationPoint")
try:
out.write(' name="' + rmpMBean.getKeyProperty("name") + '@' + self.name + '"')
remoteMEuuid = getStrAttr(rmpMBean, "remoteMessagingEngineUuid")
if (mesByUUID.has_key(remoteMEuuid)): remoteMEName = mesByUUID[remoteMEuuid].name
else: remoteMEName = "Unknown"
out.write(' remoteME="' + remoteMEName + '"')
out.write(' remoteMEUUID="' + remoteMEuuid + '"')
# Obtener detalles del transmisor de salida, si existe una
currentOutboundMessages = 0
outboundMessagesSent = 0
outboundTransmitter = AdminControl.invoke_jmx(rmpMBean, "getOutboundTransmitter", [], [])
if (outboundTransmitter != None):
currentOutboundMessages = outboundTransmitter.getDepth()
outboundMessagesSent = outboundTransmitter.getNumberOfMessagesSent()
out.write(' currentOutboundMessages="' + str(currentOutboundMessages) + '"')
out.write(' outboundMessageSent="' + str(outboundMessagesSent) + '"')
# Siempre una línea para puntos de mediación remota
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Completar nuestro distintivo MediationPoints
out.write(indent + "</RemoteMediationPoints>\n")
# Imprimir un resumen de todos los puntos de publicación para el motor de mensajería,
# utilizando el ME MBean proporcionado buscado por el emisor
def printPublicationPointsXML(self, meMBean, indent):
ppMBeans = None
out.write(indent + "<PublicationPoints")
try:
# Obtener una lista de MBeans de punto de cola
ppLookupName = AdminControl.makeObjectName('WebSphere:type=SIBPublicationPoint,SIBMessagingEngine=' + self.name + ',*')
ppMBeans = AdminControl.queryNames_jmx(ppLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada uno
para ppMBean en ppMBeans:
inboundReceivers = []
subscriptions = []
out.write(indent + " <PublicationPoint")
depth = None
try:
depth = getStrAttr(ppMBean, "depth")
except:
# El atributo no existe
pass
try:
out.write(' name="' + ppMBean.getKeyProperty("name") + '@' + self.name + '"')
if depth != None: out.write(' depth="' + depth + '"')
hmt = AdminControl.getAttribute_jmx(ppMBean, "highMessageThreshold")
if (hmt != None) and (hmt == java.lang.Long.MAX_VALUE): hmt = "MAX_VALUE"
out.write(' highMessageThreshold="' + str(hmt) + '"')
out.write(' sendAllowed="' + getStrAttr(ppMBean, "sendAllowed") + '"')
# Obtener una lista de destinatarios de entrada (puntos de publicación remota)
inboundReceivers = AdminControl.invoke_jmx(ppMBean, "listInboundReceivers", [], [])
# Obtener una lista de suscripciones
subscriptions = AdminControl.invoke_jmx(ppMBean, "getSubscriptions", [], [])
# Completar el distintivo
out.write('>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada punto de publicación remota (destinatario de entrada)
para ir en inboundReceivers:
out.write(indent + ' <KnownRemotePublicationPoint')
try:
remoteMEuuid = ir.getRemoteEngineUuid()
if mesByUUID.has_key(remoteMEuuid): remoteMEname = mesByUUID[remoteMEuuid].name
else: remoteMEname = "Unknown"
out.write(' me="' + remoteMEname + '"')
out.write(' meUUID="' + remoteMEuuid + '"')
out.write(' currentInboundMessages="' + str(ir.getDepth()) + '"')
out.write(' inboundMessagesReceived="' + str(ir.getNumberOfMessagesReceived()) + '"')
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Ejecutar a través de cada suscripción
depthTally = 0
para sub en suscripciones:
oneLineTag = 0
rsps = [] # puntos de suscripción remota
out.write(indent + ' <Subscription')
try:
out.write(' subscriberId="' + toStr(sub.getSubscriberId()) + '"')
subDepth = sub.getDepth()
depthTally = depthTally + subDepth
out.write(' depth="' + str(subDepth) + '"')
# Escribir selector
selector = sub.getSelector()
if selector != None: out.write(' selector="' + sub.getSelector() + '"')
# Escribir temas
topics = sub.getTopics()
if (topics != None):
out.write(' topics="')
sep = ''
for topic in topics:
if (topic == None): topic = ''
out.write(topic + sep)
sep = ','
out.write('"')
# Obtener una lista de puntos de suscripción remotos
rsps = AdminControl.invoke_jmx(ppMBean, "listRemoteConsumerTransmitters", [sub], ['com.ibm.websphere.sib.admin.SIBSubscription'])
# Comprobar si tenemos hijos o simplemente se puede cerrar el distintivo aquí
if len(rsps) == 0:
out.write('/>\n')
oneLineTag = 1
else: out.write('>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# ¿Tenemos subpuntos remotos?
for rsp in rsps:
out.write(indent + ' <KnownRemoteSubscriptionPoint')
try:
remoteMEuuid = rsp.getRemoteEngineUuid()
if mesByUUID.has_key(remoteMEuuid): remoteMEname = mesByUUID[remoteMEuuid].name
else: remoteMEname = "Unknown"
out.write(' me="' + remoteMEname + '"')
out.write(' meUUID="' + remoteMEuuid + '"')
out.write(' currentMessageRequests="' + str(rsp.getDepth()) + '"')
out.write(' completedMessageRequests="' + str(rsp.getNumberOfCompletedRequests()) + '"')
out.write(' messageRequestsReceived="' + str(rsp.getNumberOfRequestsReceived()) + '"')
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Cerrar el distintivo de suscripción si es necesario
if oneLineTag == 0: out.write(indent + ' </Subscription>\n')
# Completar nuestro distintivo PublicationPoint
# 50 mensajes para intentar minimizar los falsos positivos
depthCheck = int(depth) - 50
out.write(indent + " <DepthTally>" + str(depthTally))
if depthTally < depthCheck: out.write(' - WARNING</DepthTally>\n')
else: out.write(' - OK</DepthTally>\n')
out.write(indent + " </PublicationPoint>\n")
# Completar nuestro distintivo PublicationPoints
out.write(indent + "</PublicationPoints>\n")
# Imprimir un resumen de todos los enlaces SIBus alojados en este motor de mensajería.
# utilizando el ME MBean proporcionado buscado por el emisor
def printBusLinks(self, meMBean, indent):
glMBeans = None
out.write(indent + "<BusLinks")
try:
# Obtener una lista de MBeans de transmisor de enlace - estará vacío para <V7.0 MEs
glLookupName = AdminControl.makeObjectName('WebSphere:type=SIBGatewayLink,SIBMessagingEngine=' + self.name + ',*')
glMBeans = AdminControl.queryNames_jmx(glLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Realizar seguimiento de todos los UUIDS de destino de enlace que hemos visto como enlaces locales, para excluirlos de la lista de transmisores remotos
localLinkUuids = {}
# Ejecutar a través de cada transmisor
para glMBean en glMBeans:
oneLineTag = 0
linkReceivers = []
targetUuid = glMBean.getKeyProperty("targetUuid")
localLinkUuids[targetUuid] = 1
out.write(indent + " <BusLink")
# Comprobar primero si se puede consultar el nombre de bus foráneo... si esto falla
# consultar a un motor de mensajería < V7
foreignBusName = None
oldVersion = 0
try:
foreignBusName = getStrReturnVal(glMBean, "getForeignBusName")
except:
oldVersion = 1
# Obtener el nombre (a veces el nombre devuelto incluye comillas)
virtualLinkName = toStr(glMBean.getKeyProperty("name"))
if not (virtualLinkName.find('"') == 0): virtualLinkName = '"' + virtualLinkName + '"'
# Imprimir la información correcta basada en la versión
if oldVersion:
try:
out.write(' name=' + virtualLinkName)
out.write(' state="' + getStrReturnVal(glMBean, "getStatus") + '"')
out.write('>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
else:
try:
out.write(' name=' + virtualLinkName )
out.write(' foreignBus="' + foreignBusName + '"')
stateString = AdminControl.invoke_jmx(glMBean, "getStatus", [], [])
if stateString != None:
out.write(' state="' + stateString + '"')
linkReceivers = AdminControl.invoke_jmx(glMBean, "listLinkReceivers", [], [])
if linkReceivers == None: linkReceivers = []
out.write('>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Imprimir los receptores de enlace para este enlace
for lr in linkReceivers:
out.write(indent + " <LinkReceiver")
try:
out.write(' state="' + lr.getState() + '"')
receiverType = lr.getReceiverType()
remoteMEuuid = lr.getForeignEngineUuid()
if mesByUUID.has_key(remoteMEuuid): remoteMEname = mesByUUID[remoteMEuuid].name
else: remoteMEname = "Unknown"
out.write(' me="' + remoteMEname + '"')
out.write(' meUUID="' + remoteMEuuid + '"')
out.write(' receiverType="' + receiverType + '"')
if receiverType == "PUBLICATION":
out.write(' topicSpace="' + toStr(lr.getTargetDestination()) + '"')
out.write(' currentInboundMessages="' + str(lr.getDepth()) + '"')
out.write(' messagesReceived="' + str(lr.getNumberOfMessagesReceived()) + '"')
timeSinceLastMessageReceived = lr.getTimeSinceLastMessageReceived()
if timeSinceLastMessageReceived > 0:
out.write(' timeSinceLastMessageReceived="' + str(timeSinceLastMessageReceived) + 'ms"')
out.write(indent + "/>\n")
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Imprimir los transmisores de enlace para este enlace
self.printLinkTransmittersXML(meMBean, targetUuid, {}, indent + ' ')
# Fin del distintivo de enlace
out.write(indent + ' </BusLink>\n')
# Sólo en caso de tener mBeans de enlace huérfano, imprimirlos aquí
self.printLinkTransmittersXML(meMBean, None, localLinkUuids, indent + ' ')
# Completar nuestro distintivo SIBLinks
out.write(indent + "</BusLinks>\n")
# Imprimir un resumen de los transmisores de enlace SIBus para este motor de mensajería,
# utilizando el MBean ME proporcionado buscado por el emisor.
# Imprime todos los transmisores con un UUID de destino determinado, o
# imprime todos los transmisores excluyendo las claves que existen en el hash excludeUuids.
def printLinkTransmittersXML(self, meMBean, targetUuid, excludeUuids, indent):
ltMBeans = None
try:
# Obtener una lista de MBeans de transmisor de enlace - estará vacío para <V7.0 MEs
lookupString = 'WebSphere:type=SIBLinkTransmitter,SIBMessagingEngine=' + self.name
if targetUuid != None: lookupString += ',targetUuid=' + targetUuid
lookupString += ',*'
ltLookupName = AdminControl.makeObjectName(lookupString)
ltMBeans = AdminControl.queryNames_jmx(ltLookupName, None)
except:
out.write('<SIBLinkTransmitters')
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Ejecutar a través de cada transmisor
para ltMBean en ltMBeans:
# Comprobar que esto no se debe excluir
transmitterTargetUuid = ltMBean.getKeyProperty("targetUuid")
if not excludeUuids.has_key(transmitterTargetUuid):
out.write(indent + "<LinkTransmitter")
try:
if (targetUuid == None): out.write(' foreignBus="' + getStrReturnVal(ltMBean, "getForeignBusName") + '"')
out.write(' state="' + getStrReturnVal(ltMBean, "getState") + '"')
out.write(' linkType="' + getStrReturnVal(ltMBean, "getLinkType") + '"')
transmitterType = getStrReturnVal(ltMBean, "getTransmitterType")
out.write(' transmitterType="' + transmitterType + '"')
if transmitterType == "PUBLICATION":
out.write(' topicSpace="' + getStrReturnVal(ltMBean, "getTargetDestination") + '"')
putInhibited = AdminControl.invoke_jmx(ltMBean, "isPutInhibited", [], [])
if putInhibited == 0: sendAllowed = 1
else: sendAllowed = 0
out.write(' sendAllowed="' + str(sendAllowed) + '"')
out.write(' currentOutboundMessages="' + getStrReturnVal(ltMBean, "getDepth") + '"')
out.write(' messagesSent="' + getStrReturnVal(ltMBean, "getNumberOfMessagesSent") + '"')
timeSinceLastMessageSent = AdminControl.invoke_jmx(ltMBean, "getTimeSinceLastMessageSent", [], [])
if timeSinceLastMessageSent > 0:
out.write(' timeSinceLastMessageSent="' + str(timeSinceLastMessageSent) + 'ms"')
# Siempre una línea para todos los transmisores de enlace
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Imprimir un resume de todos los enlaces WMQ alojados en este motor de mensajería
# utilizando el ME MBean proporcionado buscado por el emisor
def printWMQLinks(self, meMBean, indent):
mqlMBeans = None
out.write(indent + "<WMQLinks")
try:
# Obtener una lista de MBeans de enlace WMQ - estará vacío para <V7.0 MEs
mqlLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMQLink,SIBMessagingEngine=' + self.name + ',*')
mqlMBeans = AdminControl.queryNames_jmx(mqlLookupName, None)
out.write('>\n') # Completar el distintivo cuando la búsqueda se haya realizado correctamente
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Ejecutar a través de cada MBean de enlace WMQ encontrado
para mqlMBean en mqlMBeans:
schlMBeans = []
rchlMBeans = []
# Tal vez no podamos consultar mensajes recibidos como presentados en v7.0
msgsReceived = None
try:
msgsReceived = getStrReturnVal(mqlMBean, "getTotalLinkMessagesReceived")
except:
pass
out.write(indent + " <WMQLink")
try:
# Obtener el targetUuid
linkName = mqlMBean.getKeyProperty("name")
out.write(' name="' + linkName + '"')
out.write(' state="' + getStrReturnVal(mqlMBean, "getOverallStatus") + '"')
if msgsReceived != None: out.write(' messagesReceived="' + msgsReceived + '"')
# Obtener una lista de las instancias de canal emisor de enlace WMQ
schlLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMQLinkSenderChannel,SIBMessagingEngine=' + self.name + ',name=' + linkName + 'SNDR,*')
schlMBeans = AdminControl.queryNames_jmx(schlLookupName, None)
# Obtener una lista de instancias del canal receptor de enlace WMQ
rchlLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMQLinkReceiverChannel,SIBMessagingEngine=' + self.name + ',name=' + linkName + 'RCVR,*')
rchlMBeans = AdminControl.queryNames_jmx(rchlLookupName, None)
out.write('>\n') # Completar el distintivo de apertura
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Iterar a través de los canales emisor
para schlMBean en schlMBeans:
sxmitMBeans = []
out.write(indent + " <SenderChannel")
try:
stateObject = AdminControl.invoke_jmx(schlMBean, "getCurrentStatus", [], [])
channelName = stateObject.getChannelName()
out.write(' channelName="' + channelName + '"')
out.write(' state="' + toStr(stateObject.getState()) + '"')
out.write(' virtualQmgr="' + stateObject.getQueueManager() + '"')
out.write(' ipAddress="' + toStr(stateObject.getIpAddress()) + '"')
out.write(' messagesSent="' + toStr(stateObject.getNumberOfMessagesSent()) + '"')
out.write(' currentLUWID="' + toStr(stateObject.getCurrentLUWID()) + '"')
out.write(' currentSequenceNo="' + toStr(stateObject.getCurrentSequenceNumber()) + '"')
out.write(' inDoubt="' + toStr(stateObject.getInDoubt()) + '"')
# Obtener una lista de instancias de transmisor de canal emisor de enlace WMQ
sxmitLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMQLinkSenderChannelTransmitter,SIBMessagingEngine=' + self.name + ',name=' + channelName + ',*')
sxmitMBeans = AdminControl.queryNames_jmx(sxmitLookupName, None)
out.write('>\n') # Completar el distintivo de apertura
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Iterar a través de los transmisores de canal emisor
para sxmitMBean en sxmitMBeans:
out.write(indent + " <SenderChannelTransmitter")
# Lista de los transmisores de enlace conocidos
knownLinkTransmitters = []
oneLineTag = 0
try:
out.write(' status="' + getStrReturnVal(sxmitMBean, "getState") + '"')
out.write(' currentOutboundMessages="' + getStrReturnVal(sxmitMBean, "getDepth") + '"')
out.write(' messagesSent="' + getStrReturnVal(sxmitMBean, "getNumberOfMessagesSent") + '"')
timeSinceLastMessageSent = AdminControl.invoke_jmx(sxmitMBean, "getTimeSinceLastMessageSent", [], [])
if timeSinceLastMessageSent > 0:
out.write(' timeSinceLastMessageSent="' + str(timeSinceLastMessageSent) + 'ms"')
# Listar los transmisores de enlace conocidos
knownLinkTransmitters = AdminControl.invoke_jmx(sxmitMBean, "listInboundReceivers", [], [])
# Completar el distintivo
if (knownLinkTransmitters == None) or (len(knownLinkTransmitters)) == 0:
out.write('/>\n') # Completar el distintivo de una línea
oneLineTag = 1
else: out.write('>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Imprimir los transmisores de enlace conocidos
if (oneLineTag == 0):
for ir in knownLinkTransmitters:
out.write(indent + ' <KnownRemoteSenderChannelTransmitter')
try:
remoteMEuuid = ir.getRemoteEngineUuid()
if mesByUUID.has_key(remoteMEuuid): remoteMEname = mesByUUID[remoteMEuuid].name
else: remoteMEname = "Unknown"
out.write(' me="' + remoteMEname + '"')
out.write(' meUUID="' + remoteMEuuid + '"')
out.write(' currentInboundMessages="' + str(ir.getDepth()) + '"')
out.write(' inboundMessagesReceived="' + str(ir.getNumberOfMessagesReceived()) + '"')
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Cerrar el distintivo del transmisor
out.write(indent + " </SenderChannelTransmitter>\n")
# Cerrar el distintivo del emisor
out.write(indent + " </SenderChannel>\n")
# Iterar a través de los canales receptor
for rchlMBean in rchlMBeans:
out.write(indent + " <ReceiverChannel")
statusEntries = []
try:
out.write(' state="' + getStrReturnVal(rchlMBean,"getOverallStatus") + '"')
# Listar los estados de cada instancia
statusEntries = AdminControl.invoke_jmx(rchlMBean, "getCurrentStatus", [], [])
if (statusEntries == None): statusEntries = []
out.write('>\n') # Completar el distintivo de apertura
except:
et.printErrorAndCloseTag(sys.exc_info(), 0)
# Imprimir cada entrada
for statusEntry in statusEntries:
out.write(indent + " <ReceiverChannelStatus")
try:
out.write(' channelName="' + toStr(statusEntry.getChannelName()) + '"')
out.write(' state="' + toStr(statusEntry.getState()) + '"')
out.write(' qmgr="' + toStr(statusEntry.getQueueManager()) + '"')
out.write(' ipAddress="' + toStr(statusEntry.getIpAddress()) + '"')
out.write(' messagesReceived="' + toStr(statusEntry.getNumberOfMessagesReceived()) + '"')
out.write(' currentLUWID="' + toStr(statusEntry.getCurrentLUWID()) + '"')
out.write(' currentSequenceNo="' + toStr(statusEntry.getCurrentSequenceNumber()) + '"')
out.write('/>\n') # Completar el distintivo
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Cerrar el distintivo
out.write(indent + " </ReceiverChannel>\n")
# Completar nuestro distintivo WMQLink
out.write(indent + " </WMQLink>\n")
# Completar nuestro distintivo WMQLinks
out.write(indent + "</WMQLinks>\n")
# Una pequeña clase para ayudarnos a agregar información de transmisor de consumidor
# y receptor de entrada en un punto de cola y aquí crear un "punto de cola
# remota conocida" para cada UUID de motor de mensajería remoto
# UUID para el que tenemos estado put/get remoto.
class KnownRemoteQueuePoint:
"Una clase para imprimir un resumen de ejecución de un punto de cola remota conocida"
consumerTransmitter = None
inboundReceiver = None
def __init__ (self, qpMBean, uuid):
self.uuid = uuid
if mesByUUID.has_key(uuid): self.name = mesByUUID[uuid].name
else: self.name = "Unknown"
self.qpMBean = qpMBean
# Imprimir un distintivo XML que resume este KnownRemoteQueuePoint
def printSummaryXML(self, indent):
out.write(indent + '<KnownRemoteQueuePoint me="' + self.name + '" meUUID="' + self.uuid + '"')
try:
currentInboundMessages = 0
inboundMessagesReceived = 0
if self.inboundReceiver != None:
currentInboundMessages = self.inboundReceiver.getDepth()
inboundMessagesReceived = self.inboundReceiver.getNumberOfMessagesReceived()
out.write(' currentInboundMessages="' + str(currentInboundMessages) + '"')
out.write(' inboundMessagesReceived="' + str(inboundMessagesReceived) + '"')
currentMessageRequests = 0
completedMessageRequests = 0
messageRequestsReceived = 0
if self.consumerTransmitter != None:
currentMessageRequests = self.consumerTransmitter.getDepth()
completedMessageRequests = self.consumerTransmitter.getNumberOfCompletedRequests()
messageRequestsReceived = self.consumerTransmitter.getNumberOfRequestsReceived()
out.write(' currentMessageRequests="' + str(currentMessageRequests) + '"')
out.write(' completedMessageRequests="' + str(completedMessageRequests) + '"')
out.write(' messageRequestsReceived="' + str(messageRequestsReceived) + '"')
# Sólo necesario una línea para esto
out.write('/>\n')
except:
et.printErrorAndCloseTag(sys.exc_info(), 1)
# Aquí se inicia la ejecución del script ...
# El único parámetro de entrada es el nombre del archivo de salida.
# Valor predeterminado en STDOUT si no se especifica
if len(sys.argv) > 0:
print "Escribiendo salida en", sys.argv[0]
out = open(sys.argv[0], 'w')
fileOpened = 1
else:
out = sys.stdout
fileOpened = 0
# Buscar todos los ME en la configuración y crear un UUID ME en el diccionario de nombres
mesByUUID = {}
mesByBus = {}
mes = AdminConfig.list("SIBMessagingEngine").split("\n")
for me in mes:
# Eliminar retorno de carro en Windows
me = me.strip()
# Construir un objeto ME
meBus = AdminConfig.showAttribute(me, "busName")
meName = AdminConfig.showAttribute(me, "name")
meUUID = AdminConfig.showAttribute(me, "uuid")
meObject = MessagingEngine(meBus, meName, meUUID)
# Colocar el ME en la correlación por UUID
mesByUUID[meUUID] = meObject
# Colocar el ME en la lista de este bus
if (mesByBus.has_key(meBus)): meList = mesByBus[meBus]
else: meList = []
meList.append(meObject)
mesByBus[meBus] = meList
# Iterar a través de los buses y los MEs dentro de cada bus
try:
out.write('<?xml version="1.0"?>\n')
out.write('<SIBusSummary>\n')
for busName in mesByBus.keys():
indent = ' '
out.write(indent + '<Bus name="' + busName + '">\n')
meList = mesByBus[busName]
for me in meList:
me.printRuntimeStateXML(indent + ' ')
out.write(indent + '</Bus>\n')
out.write('</SIBusSummary>\n')
finally:
if (fileOpened): out.close()
El ejemplo siguiente muestra una salida de ejemplo para el script.
<?xml version="1.0"?>
<SIBusSummary>
<Bus name="Bus2">
<MessagingEngine name="Node1.server1-Bus2" uuid="B04215B7389FDA8F" state="Started" activeServer="server1">
<QueuePoints>
<QueuePoint name="Bus2Queue1@Node1.server1-Bus2" state="ACTIVE" depth="9" highMessageThreshold="50000"
sendAllowed="1"/>
<QueuePoint name="RemoteMediatedQueue1@Node1.server1-Bus2" state="ACTIVE" depth="5" highMessageThreshold="50000"
sendAllowed="1">
<KnownRemoteQueuePoint me="Node1.server2-Bus2" meUUID="CC8EAD412746BA2A" currentInboundMessages="0"
inboundMessagesReceived="0" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
</QueuePoint>
<QueuePoint name="_PSIMP.PROXY.QUEUE_B04215B7389FDA8F@Node1.server1-Bus2" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1">
<KnownRemoteQueuePoint me="Node1.server2-Bus2" meUUID="CC8EAD412746BA2A" currentInboundMessages="0"
inboundMessagesReceived="2" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
</QueuePoint>
<QueuePoint name="_PTRM_B04215B7389FDA8F@Node1.server1-Bus2" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_SYSTEM.Exception.Destination.Node1.server1-Bus2@Node1.server1-Bus2" state="ACTIVE"
depth="3" highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_PSIMP.TDRECEIVER_B04215B7389FDA8F@Node1.server1-Bus2" state="ACTIVE" depth="0" h
ighMessageThreshold="50000" sendAllowed="1"/>
</QueuePoints>
<RemoteQueuePoints>
<RemoteQueuePoint name="_PSIMP.PROXY.QUEUE_CC8EAD412746BA2A@Node1.server1-Bus2"
remoteME="Node1.server2-Bus2" remoteMEUUID="CC8EAD412746BA2A" currentOutboundMessages="0"
outboundMessageSent="4" currentMessageRequests="0" completedMessageRequests="0" messageRequestsIssued="0"/>
</RemoteQueuePoints>
<MediationPoints>
</MediationPoints>
<RemoteMediationPoints>
<RemoteMediationPoint name="RemoteMediatedQueue1@Node1.server1-Bus2" remoteME="Node1.server2-Bus2"
remoteMEUUID="CC8EAD412746BA2A" currentOutboundMessages="0" outboundMessageSent="0"/>
</RemoteMediationPoints>
<PublicationPoints>
<PublicationPoint name="Default.Topic.Space@Node1.server1-Bus2" depth="0" highMessageThreshold="50000"
sendAllowed="1">
</PublicationPoint>
</PublicationPoints>
<BusLinks>
<BusLink name="Bus1Bus2Link" foreignBus="Bus1" state="STARTED">
<LinkReceiver state="STARTED" me="Node1.server1-Bus1" meUUID="92FF69453638CD2F" receiverType="PUBLICATION"
topicSpace="" currentInboundMessages="0" messagesReceived="4" timeSinceLastMessageReceived="18809ms" />
<LinkReceiver state="STARTED" me="cluster1.000-Bus1" meUUID="C96051A1F0F91AB3" receiverType="PUBLICATION"
topicSpace="" currentInboundMessages="0" messagesReceived="0" />
<LinkReceiver state="STARTED" me="cluster1.001-Bus1" meUUID="122AAD73434FF5DA" receiverType="PUBLICATION"
topicSpace="" currentInboundMessages="0" messagesReceived="0" />
<LinkReceiver state="STARTED" me="cluster1.000-Bus1" meUUID="C96051A1F0F91AB3" receiverType="PUBLICATION"
topicSpace="" currentInboundMessages="0" messagesReceived="2" timeSinceLastMessageReceived="20091ms" />
<LinkReceiver state="STARTED" me="cluster1.001-Bus1" meUUID="122AAD73434FF5DA" receiverType="PUBLICATION"
topicSpace="" currentInboundMessages="0" messagesReceived="0" />
<LinkTransmitter state="STARTED" linkType="SIBVirtualGatewayLink" transmitterType="QUEUE" sendAllowed="1"
currentOutboundMessages="0" messagesSent="3" timeSinceLastMessageSent="17509ms"/>
</BusLink>
</BusLinks>
<WMQLinks>
<WMQLink name="MQBus1Link" state="RUNNING" messagesReceived="0">
<SenderChannel channelName="TO.PAB" state="STANDBY" virtualQmgr="WAS80" ipAddress="" messagesSent="0"
currentLUWID="0" currentSequenceNo="0" inDoubt="0">
<SenderChannelTransmitter status="STARTED" currentOutboundMessages="0" messagesSent="0">
<KnownRemoteSenderChannelTransmitter me="Node1.server2-Bus2" meUUID="CC8EAD412746BA2A"
currentInboundMessages="0" inboundMessagesReceived="0"/>
</SenderChannelTransmitter>
</SenderChannel>
<ReceiverChannel state="INACTIVE">
</ReceiverChannel>
</WMQLink>
</WMQLinks>
</MessagingEngine>
<MessagingEngine name="Node1.server2-Bus2" uuid="CC8EAD412746BA2A" state="Started" activeServer="server2">
<QueuePoints>
<QueuePoint name="_SYSTEM.Exception.Destination.Node1.server2-Bus2@Node1.server2-Bus2" state="ACTIVE"
depth="0" highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_PSIMP.PROXY.QUEUE_CC8EAD412746BA2A@Node1.server2-Bus2" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1">
<KnownRemoteQueuePoint me="Node1.server1-Bus2" meUUID="B04215B7389FDA8F" currentInboundMessages="0"
inboundMessagesReceived="12" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
</QueuePoint>
<QueuePoint name="_PTRM_CC8EAD412746BA2A@Node1.server2-Bus2" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_PSIMP.TDRECEIVER_CC8EAD412746BA2A@Node1.server2-Bus2" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
</QueuePoints>
<RemoteQueuePoints>
<RemoteQueuePoint name="RemoteMediatedQueue1@Node1.server2-Bus2" remoteME="Node1.server1-Bus2"
remoteMEUUID="B04215B7389FDA8F" currentOutboundMessages="0" outboundMessageSent="2" currentMessageRequests="0"
completedMessageRequests="0" messageRequestsIssued="0"/>
<RemoteQueuePoint name="_PSIMP.PROXY.QUEUE_B04215B7389FDA8F@Node1.server2-Bus2" remoteME="Node1.server1-Bus2"
remoteMEUUID="B04215B7389FDA8F" currentOutboundMessages="0" outboundMessageSent="8" currentMessageRequests="0"
completedMessageRequests="0" messageRequestsIssued="0"/>
</RemoteQueuePoints>
<MediationPoints>
<MediationPoint name="RemoteMediatedQueue1@Node1.server2-Bus2" status="Started" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
</MediationPoints>
<RemoteMediationPoints>
</RemoteMediationPoints>
<PublicationPoints>
<PublicationPoint name="Default.Topic.Space@Node1.server2-Bus2" depth="0" highMessageThreshold="50000"
sendAllowed="1">
</PublicationPoint>
</PublicationPoints>
<BusLinks>
<BusLink name="Bus2:MQBus1" foreignBus="MQBus1">
<LinkTransmitter state="STARTED" linkType="SIBVirtualMQLink" transmitterType="QUEUE" sendAllowed="1"
currentOutboundMessages="0" messagesSent="0"/>
</BusLink>
</BusLinks>
<WMQLinks>
</WMQLinks>
</MessagingEngine>
</Bus>
<Bus name="Bus1">
<MessagingEngine name="Node1.server1-Bus1" uuid="92FF69453638CD2F" state="Started" activeServer="server1">
<QueuePoints>
<QueuePoint name="_PTRM_92FF69453638CD2F@Node1.server1-Bus1" state="ACTIVE" depth="0" highMessageThreshold="50000"
sendAllowed="1"/>
<QueuePoint name="_SYSTEM.Exception.Destination.Node1.server1-Bus1@Node1.server1-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_PSIMP.PROXY.QUEUE_92FF69453638CD2F@Node1.server1-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1">
<KnownRemoteQueuePoint me="cluster1.001-Bus1" meUUID="122AAD73434FF5DA" currentInboundMessages="0"
inboundMessagesReceived="3" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
<KnownRemoteQueuePoint me="cluster1.000-Bus1" meUUID="C96051A1F0F91AB3" currentInboundMessages="0"
inboundMessagesReceived="3" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
</QueuePoint>
<QueuePoint name="_PSIMP.TDRECEIVER_92FF69453638CD2F@Node1.server1-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="Bus1Queue1@Node1.server1-Bus1" state="ACTIVE" depth="3" highMessageThreshold="50000"
sendAllowed="1">
<KnownRemoteQueuePoint me="cluster1.001-Bus1" meUUID="122AAD73434FF5DA" currentInboundMessages="0"
inboundMessagesReceived="0" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
<KnownRemoteQueuePoint me="cluster1.000-Bus1" meUUID="C96051A1F0F91AB3" currentInboundMessages="0"
inboundMessagesReceived="0" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
</QueuePoint>
</QueuePoints>
<RemoteQueuePoints>
<RemoteQueuePoint name="_PSIMP.PROXY.QUEUE_122AAD73434FF5DA@Node1.server1-Bus1" remoteME="cluster1.001-Bus1"
remoteMEUUID="122AAD73434FF5DA" currentOutboundMessages="0" outboundMessageSent="2" currentMessageRequests="0"
completedMessageRequests="0" messageRequestsIssued="0"/>
<RemoteQueuePoint name="_PSIMP.PROXY.QUEUE_C96051A1F0F91AB3@Node1.server1-Bus1" remoteME="cluster1.000-Bus1"
remoteMEUUID="C96051A1F0F91AB3" currentOutboundMessages="0" outboundMessageSent="2" currentMessageRequests="0"
completedMessageRequests="0" messageRequestsIssued="0"/>
</RemoteQueuePoints>
<MediationPoints>
</MediationPoints>
<RemoteMediationPoints>
</RemoteMediationPoints>
<PublicationPoints>
<PublicationPoint name="Default.Topic.Space@Node1.server1-Bus1" depth="10" highMessageThreshold="50000"
sendAllowed="1">
<RemotePublicationPoint me="cluster1.001-Bus1" meUUID="122AAD73434FF5DA" currentInboundMessages="0"
inboundMessagesReceived="0"/>
<RemotePublicationPoint me="cluster1.000-Bus1" meUUID="C96051A1F0F91AB3" currentInboundMessages="0"
inboundMessagesReceived="0"/>
<Subscription subscriberId="MySubName1" depth="10" topics=""/>
<Subscription subscriberId="MySubName2" depth="5" topics=""/>
</PublicationPoint>
</PublicationPoints>
<BusLinks>
<BusLink name="Bus1Bus2Link" foreignBus="Bus2" state="STARTED">
<LinkReceiver state="STARTED" me="Node1.server1-Bus2" meUUID="B04215B7389FDA8F" receiverType="PUBLICATION"
topicSpace="" currentInboundMessages="0" messagesReceived="3" timeSinceLastMessageReceived="19311ms" />
<LinkReceiver state="STARTED" me="Node1.server1-Bus2" meUUID="B04215B7389FDA8F" receiverType="PUBLICATION"
topicSpace="" currentInboundMessages="0" messagesReceived="0" />
<LinkTransmitter state="STARTED" linkType="SIBVirtualGatewayLink" transmitterType="QUEUE" sendAllowed="1"
currentOutboundMessages="0" messagesSent="4" timeSinceLastMessageSent="20435ms"/>
</BusLink>
</BusLinks>
<WMQLinks>
</WMQLinks>
</MessagingEngine>
<MessagingEngine name="cluster1.000-Bus1" uuid="C96051A1F0F91AB3" state="Started" activeServer="clusServer1">
<QueuePoints>
<QueuePoint name="_PSIMP.TDRECEIVER_C96051A1F0F91AB3@cluster1.000-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_SYSTEM.Exception.Destination.cluster1.000-Bus1@cluster1.000-Bus1" state="ACTIVE"
depth="0" highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_PTRM_C96051A1F0F91AB3@cluster1.000-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_PSIMP.PROXY.QUEUE_C96051A1F0F91AB3@cluster1.000-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1">
<KnownRemoteQueuePoint me="cluster1.001-Bus1" meUUID="122AAD73434FF5DA" currentInboundMessages="0"
inboundMessagesReceived="4" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
<KnownRemoteQueuePoint me="Node1.server1-Bus1" meUUID="92FF69453638CD2F" currentInboundMessages="0"
inboundMessagesReceived="11" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
</QueuePoint>
<QueuePoint name="Bus2WLMQueue1@cluster1.000-Bus1" state="ACTIVE" depth="0" highMessageThreshold="50000"
sendAllowed="1"/>
</QueuePoints>
<RemoteQueuePoints>
<RemoteQueuePoint name="Bus1Queue1@cluster1.000-Bus1" remoteME="Node1.server1-Bus1"
remoteMEUUID="92FF69453638CD2F" currentOutboundMessages="0" outboundMessageSent="1"
currentMessageRequests="0" completedMessageRequests="0" messageRequestsIssued="0"/>
<RemoteQueuePoint name="_PSIMP.PROXY.QUEUE_122AAD73434FF5DA@cluster1.000-Bus1" remoteME="cluster1.001-Bus1"
remoteMEUUID="122AAD73434FF5DA" currentOutboundMessages="0" outboundMessageSent="4" currentMessageRequests="0"
completedMessageRequests="0" messageRequestsIssued="0"/>
<RemoteQueuePoint name="_PSIMP.PROXY.QUEUE_92FF69453638CD2F@cluster1.000-Bus1" remoteME="Node1.server1-Bus1"
remoteMEUUID="92FF69453638CD2F" currentOutboundMessages="0" outboundMessageSent="11" currentMessageRequests="0"
completedMessageRequests="0" messageRequestsIssued="0"/>
</RemoteQueuePoints>
<MediationPoints>
</MediationPoints>
<RemoteMediationPoints>
</RemoteMediationPoints>
<PublicationPoints>
<PublicationPoint name="Default.Topic.Space@cluster1.000-Bus1" depth="0" highMessageThreshold="50000"
sendAllowed="1">
<Subscription subscriberId="MySubName3" depth="0" topics=""/>
</PublicationPoint>
</PublicationPoints>
<BusLinks>
<BusLink name="Bus1:Bus2" foreignBus="Bus2">
<LinkTransmitter state="STOPPED" linkType="SIBVirtualGatewayLink" transmitterType="QUEUE" sendAllowed="1"
currentOutboundMessages="0" messagesSent="1" timeSinceLastMessageSent="3471037ms"/>
</BusLink>
</BusLinks>
<WMQLinks>
</WMQLinks>
</MessagingEngine>
<MessagingEngine name="cluster1.001-Bus1" uuid="122AAD73434FF5DA" state="Started" activeServer="clusServer2">
<QueuePoints>
<QueuePoint name="_PSIMP.TDRECEIVER_122AAD73434FF5DA@cluster1.001-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="_PSIMP.PROXY.QUEUE_122AAD73434FF5DA@cluster1.001-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1">
<KnownRemoteQueuePoint me="Node1.server1-Bus1" meUUID="92FF69453638CD2F" currentInboundMessages="0"
inboundMessagesReceived="12" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
<KnownRemoteQueuePoint me="cluster1.000-Bus1" meUUID="C96051A1F0F91AB3" currentInboundMessages="0"
inboundMessagesReceived="2" currentMessageRequests="0" completedMessageRequests="0" messageRequestsReceived="0"/>
</QueuePoint>
<QueuePoint name="_SYSTEM.Exception.Destination.cluster1.001-Bus1@cluster1.001-Bus1" state="ACTIVE"
depth="0" highMessageThreshold="50000" sendAllowed="1"/>
<QueuePoint name="Bus2WLMQueue1@cluster1.001-Bus1" state="ACTIVE" depth="0" highMessageThreshold="50000"
sendAllowed="1"/>
<QueuePoint name="_PTRM_122AAD73434FF5DA@cluster1.001-Bus1" state="ACTIVE" depth="0"
highMessageThreshold="50000" sendAllowed="1"/>
</QueuePoints>
<RemoteQueuePoints>
<RemoteQueuePoint name="_PSIMP.PROXY.QUEUE_92FF69453638CD2F@cluster1.001-Bus1"
remoteME="Node1.server1-Bus1" remoteMEUUID="92FF69453638CD2F" currentOutboundMessages="0"
outboundMessageSent="12" currentMessageRequests="0" completedMessageRequests="0" messageRequestsIssued="0"/>
<RemoteQueuePoint name="Bus1Queue1@cluster1.001-Bus1" remoteME="Node1.server1-Bus1"
remoteMEUUID="92FF69453638CD2F" currentOutboundMessages="0" outboundMessageSent="1" currentMessageRequests="0"
completedMessageRequests="0" messageRequestsIssued="0"/>
<RemoteQueuePoint name="_PSIMP.PROXY.QUEUE_C96051A1F0F91AB3@cluster1.001-Bus1" remoteME="cluster1.000-Bus1"
remoteMEUUID="C96051A1F0F91AB3" currentOutboundMessages="0" outboundMessageSent="2" currentMessageRequests="0"
completedMessageRequests="0" messageRequestsIssued="0"/>
</RemoteQueuePoints>
<MediationPoints>
</MediationPoints>
<RemoteMediationPoints>
</RemoteMediationPoints>
<PublicationPoints>
<PublicationPoint name="Default.Topic.Space@cluster1.001-Bus1" depth="0" highMessageThreshold="50000"
sendAllowed="1">
<Subscription subscriberId="MySubName4" depth="0" topics=""/>
</PublicationPoint>
</PublicationPoints>
<BusLinks>
<BusLink name="Bus1:Bus2" foreignBus="Bus2">
<LinkTransmitter state="STOPPED" linkType="SIBVirtualGatewayLink" transmitterType="QUEUE" sendAllowed="1"
currentOutboundMessages="0" messagesSent="1" timeSinceLastMessageSent="3471168ms"/>
</BusLink>
</BusLinks>
<WMQLinks>
</WMQLinks>
</MessagingEngine>
</Bus>
</SIBusSummary>