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

El script siguiente se puede utilizar para imprimir un resumen en formato XML del estado de tiempo de ejecución de todos los motores de mensajería que se ejecutan en una célula. Llega hasta las profundidades de los elementos individuales como, por ejemplo, los puntos de cola, los puntos de cola remota, puntos de publicación, suscripciones, puntos de mediación y transmisores de enlace. Sin embargo, este script no imprime los detalles de los mensajes individuales. Se debe ejecutar en el Gestor de despliegue para listar todos los motores de mensajería en todos los buses.

Procedimiento

  1. Cree el script utilizando el editor de texto.
  2. Ejecute el script en el Gestor de despliegue de la célula:
    DMGR_PROFILE/bin/wsadmin.sh -lang jython -f printSIBusSummary.py output.xml 

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>

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjo0060_
File name: tjo0060_.html