Zusammenfassung der Laufzeitstatus aller aktiven Messaging-Engines in einer Zelle ausgeben

Sie können Scripting verwenden, um die Details aller Messaging-Engines in allen Bussen aufzulisten.

Informationen zu diesem Vorgang

Das folgende Script kann verwendet werden, um eine Zusammenfassung der Laufzeitstatus aller aktiven Messaging-Engines in einer Zelle im XML-Format auszugeben. Die Zusammenfassung erstreckt sich bis hin zu einzelnen Elementen wie Warteschlangenpunkten, fernen Warteschlangenpunkten, Veröffentlichungspunkten, Subskriptionen, Mediation-Punkten und Übertragungswarteschlangen. Dieses Script gibt jedoch keine Details einzelner Nachrichten aus. Es muss für den Deployment Manager ausgeführt werden, wenn alle Messaging-Engines in allen Bussen aufgelistet werden sollen.

Vorgehensweise

  1. Erstellen Sie Ihr Script in einem Texteditor.
  2. Führen Sie das Script für den Deployment Manager der Zelle aus:
    DMGR_PROFILE/bin/wsadmin.sh -lang jython -f printSIBusSummary.py output.xml 

Beispiel

Im Folgenden sehen Sie ein Beispielscript mit einer Beispielausgabe.

# Beispielprogramm
#  * (C) COPYRIGHT International Business Machines Corp., 2008, 2009
#  * Alle Rechte vorbehalten * Lizenziertes Material - Eigentum von IBM
#  *
#  * Dieses Beispielprogramm wird ohne Wartung (auf "as-is"-Basis)
#  * bereitgestellt und kann vom Kunden
#  *
#  * (a) zu Schulungs- und Studienzwecken,
#  * (b) zum Entwickeln von Anwendungen für ein IBM WebSphere-Produkt zur
#  *     internen Nutzung beim Kunden gebührenfrei genutzt, ausgeführt,
#  *     kopiert und geändert werden.
# 
# Version: 1.02
# 
# Information:
#  Dieses Script gibt eine XML-Zusammenfassung der verfügbaren Laufzeitinformationen
#  für alle Warteschlangenpunkte, Veröffentlichungspunkte, Mediation-Punkte, SIB-Links
#  und WMQ-Links aus.
#  Das Script sollte für den Deployment Manager der Zelle ausgeführt werden, so dass
#  die Ausgabe über alle aktiven Messaging-Engines in allen Bussen verfügbar ist.
#  Das Script erfasst dieselben Informationen, die auch in der Administrationskonsole
#  angezeigt werden können.
#  Die folgende Ausgabe ist nur verfügbar, wenn das Script für eine Umgebung
#  der WebSphere Application Server Version 7 ausgeführt wird:
#  - Informationen zu SIB-Links
#  - Informationen zu WebSphere-MQ-Links
# 
# Verwendung:
#  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>

# Klasse für die vollständige Ausgabe eines Fehlers (mit Stack) in STDERR sowie einer Kurzzusammenfassung
# in der XML-Ausgabe. Jedem Fehler ist für den Abgleich eine ganze Zahl zugeordnet.
class ErrorTracker:
  errorCount = 0
  # Unterstützungsmethode für die Ausgabe von Ausnahmedetails in Form eines Fehlerattributs in einem Tag
  def printErrorAndCloseTag(self, exception_tuple, oneLine):
    self.errorCount += 1
    # Fehler in STDERR ausgeben
    sys.stderr.write("ERROR [" + str(self.errorCount) + "]:\n")
    sys.excepthook(exception_tuple[0],exception_tuple[1],exception_tuple[2])
    # Zusammenfassung des Fehlers in der Ausgabedatei ausgeben
    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')
# Einzelne globale Instanz des Fehler-Trackers
et = ErrorTracker()

# Unterstützungsmethode für den Abruf eines JMX-Attributs im Zeichenfolgeformat
def getStrAttr(mBean, attr):
  val = AdminControl.getAttribute_jmx(mBean, attr)
  if val == None: val = ''
  else: val = str(val)
  return val

# Unterstützungsmethode für den Abruf des Rückgabewerts einer JMX-Methode im Zeichenfolgeformat
def getStrReturnVal(mBean, method):
  val = AdminControl.invoke_jmx(mBean, method, [], [])
  if val == None: val = ''
  else: val = str(val)
  return val

# toString-Unterstützungsmethode für die Verarbeitung von None-Werten als leere Zeichenfolgen
def toStr(val):
  if val == None: val = ''
  else: val = str(val)
  return val

# Messaging-Enginesklasse schließt eine Messaging-Engine ein, ordnet
# ihren Namen einer UUID zu und enthält alle Methoden, die zur Ausgabe des Laufzeitstatus
# dieser Messaging-Engines verwendet werden.
class MessagingEngine:
  "Eine Klasse für die Ausgabe einer Laufzeitzusammenfassung einer Messaging-Engine"
  # Konstruktor
  def __init__(self, bus, name, uuid):
    self.bus = bus
    self.name = name
    self.uuid = uuid

  # Methode für die Ausgabe einer Zusammenfassung des Laufzeitstatus dieser Messaging-Engine
  # - Dies ist der Einstiegspunkt in die Klasse (andere Methoden sind logisch private Methoden)
  def printRuntimeStateXML(self, indent):
    # Anfang des Tags ausgeben (und Platz für weitere Eigenschaften lassen)
    out.write(indent + '<MessagingEngine name="' + self.name + '" uuid="' + self.uuid + '"')
    meMBean = None
    try:
      # Erste Suche nach der MBean
      meLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMessagingEngine,name=' + self.name + ',*')
      meMBeans = AdminControl.queryNames_jmx(meLookupName, None)
      if (meMBeans == None) or (meMBeans.size() == 0):
        # Nur eine leere Messaging-Engine
        out.write(' state="Unknown (no MBean found)">\n')
      elif meMBeans.size() == 1:
        # Referenz auf die MBean speichern
        meMBean = meMBeans[0]
        # Einstiegs-Tag vervollständigen
        out.write(' state="' + AdminControl.invoke_jmx(meMBean, "state", [], []) + '"')
        out.write(' activeServer="' + meMBean.getKeyProperty("process") + '"')
        out.write('>\n')
      else:
        # Es wird keine/eine einzige MBean erwartet
        raise Exception, "Found " + str(len(meMBeans)) + " MBeans for messaging engine. Expected 1"
    except:
       et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Durch den Inhalt iterieren
    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 + " ")
    # Tag vervollständigen
    out.write(indent + "</MessagingEngine>\n")

  # Zusammenfassung aller Warteschlangenpunkte für die Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printQueuePointsXML(self, meMBean, indent):  
    qpMBeans = None
    out.write(indent + "<QueuePoints")
    try:
      # Eine Liste mit MBeans für Veröffentlichungspunkte abrufen
      qpLookupName = AdminControl.makeObjectName('WebSphere:type=SIBQueuePoint,SIBMessagingEngine=' + self.name + ',*')
      qpMBeans = AdminControl.queryNames_jmx(qpLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Jede einzelne abarbeiten
    for qpMBean in qpMBeans:
      rqps = {} # Directory of all RQPs for this queue point
      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") + '"')
        # Nur versuchen, weitere Details für aktive Warteschlangenpunkte abzurufen
        if qpState == 'ACTIVE':
          # Eine Liste eingehender Empfänger für ferne Warteschlangenpunkte abrufen
          inboundReceivers = AdminControl.invoke_jmx(qpMBean, "listInboundReceivers", [], [])
          # Eine Liste ferner Konsumentensender für ferne Warteschlangenpunkte abrufen
          consumerTransmitters = AdminControl.invoke_jmx(qpMBean, "listRemoteConsumerTransmitters", [], [])
          # Ferne Warteschlangenpunkte für alle eingehenden Empfänger hinzufügen
          for ir in inboundReceivers:
            uuid = ir.getRemoteEngineUuid()
            if rqps.has_key(uuid): rqp = rqps[uuid]
            else: rqp = KnownRemoteQueuePoint(qpMBean, uuid)
            rqps[uuid] = rqp
            rqp.inboundReceiver = ir
          # Ferne Warteschlangenpunkte für alle Konsumentensender hinzufügen
          for ct in consumerTransmitters:
            uuid = ct.getRemoteEngineUuid()
            if rqps.has_key(uuid): rqp = rqps[uuid]
            else: rqp = KnownRemoteQueuePoint(qpMBean, uuid)
            rqps[uuid] = rqp
            rqp.consumerTransmitter = ct
        # Wenn keine RQPs vorhanden sind, kann das Tag in dieser Zeile beendet werden
        if len(rqps.keys()) == 0:
          out.write('/>\n')
          oneLineTag = 1
        else:
          out.write('>\n') # Vollständies Tag erforderlich
      except:
        et.printErrorAndCloseTag(sys.exc_info(), 0)
      # Alle gefundenen RQPs verarbeiten
      for rqpUuid in rqps.keys():
        rqp = rqps[rqpUuid]
        rqp.printSummaryXML(indent + "  ")
      # QueuePoint-Tag vervollständigen
      if oneLineTag == 0: out.write(indent + " </QueuePoint>\n")
    # QueuePoints-Tag vervollständigen
    out.write(indent + "</QueuePoints>\n")

  # Zusammenfassung aller fernen Warteschlangenpunkte für die Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printRemoteQueuePointsXML(self, meMBean, indent):  
    rqpMBeans = None
    out.write(indent + "<RemoteQueuePoints")
    try:
      # Eine Liste der MBeans für ferne Warteschlangenpunkte abrufen
      rqpLookupName = AdminControl.makeObjectName('WebSphere:type=SIBRemoteQueuePoint,SIBMessagingEngine=' + self.name + ',*')
      rqpMBeans = AdminControl.queryNames_jmx(rqpLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Jede einzelne abarbeiten
    for rqpMBean in 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 + '"')

        # Details zu abgehenden Sender (sofern vorhanden) abrufen
        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) + '"')

        # Fernen Konsumentenempfänger (sofern vorhanden) abrufen
        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) + '"')

        # Stets eine einzige Zeile für ferne Warteschlangenpunkte
        out.write('/>\n')
      except:
        et.printErrorAndCloseTag(sys.exc_info(), 1)
    # QueuePoints-Tag vervollständigen
    out.write(indent + "</RemoteQueuePoints>\n")

  # Zusammenfassung aller fernen Veröffentlichungspunkte für die Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printRemotePublicationPointsXML(self, meMBean, indent):  
    rppMBeans = None
    out.write(indent + "<RemotePublicationPoints")
    try:
      # Eine Liste der MBeans für ferne Warteschlangenpunkte abrufen
      rppLookupName = AdminControl.makeObjectName('WebSphere:type=SIBRemotePublicationPoint,SIBMessagingEngine=' + self.name + ',*')
      rppMBeans = AdminControl.queryNames_jmx(rppLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Jede einzelne abarbeiten
    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 + '"')

        # Details zu abgehenden Sender (sofern vorhanden) abrufen
        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) + '"')

        # Stets eine einzige Zeile für ferne Warteschlangenpunkte
        out.write('/>\n')
      except:
        et.printErrorAndCloseTag(sys.exc_info(), 1)
    # RemotePublicationPoints-Tag vervollständigen
    out.write(indent + "</RemotePublicationPoints>\n")

  # Zusammenfassung aller fernen Subskriptionspunkte für die Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printRemoteSubscriptionPointsXML(self, meMBean, indent):  
    rspMBeans = None
    out.write(indent + "<RemoteSubscriptionPoints")
    try:
      # Eine Liste der MBeans für ferne Warteschlangenpunkte abrufen
      rspLookupName = AdminControl.makeObjectName('WebSphere:type=SIBRemoteSubscriptionPoint,SIBMessagingEngine=' + self.name + ',*')
      rspMBeans = AdminControl.queryNames_jmx(rspLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Jede einzelne abarbeiten
    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 + '"')

        # Fernen Konsumentenempfänger (sofern vorhanden) abrufen
        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) + '"')

        # Stets eine einzige Zeile für ferne Warteschlangenpunkte
        out.write('/>\n')
      except:
        et.printErrorAndCloseTag(sys.exc_info(), 1)
    # RemotePublicationPoints-Tag vervollständigen
    out.write(indent + "</RemoteSubscriptionPoints>\n")

  # Zusammenfassung aller Mediation-Punkte für die Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printMediationPointsXML(self, meMBean, indent):  
    mpMBeans = None
    out.write(indent + "<MediationPoints")
    try:
      # Eine Liste mit MBeans für Mediation-Punkte abrufen
      mpLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMediationPoint,SIBMessagingEngine=' + self.name + ',*')
      mpMBeans = AdminControl.queryNames_jmx(mpLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Jede einzelne abarbeiten
    for mpMBean in 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)
    # QueuePoints-Tag vervollständigen
    out.write(indent + "</MediationPoints>\n")

  # Zusammenfassung aller fernen Mediation-Punkte für die Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printRemoteMediationPointsXML(self, meMBean, indent):  
    rmpMBeans = None
    out.write(indent + "<RemoteMediationPoints")
    try:
      # Eine Liste der MBeans für ferne Mediation-Punkte abrufen
      rmpLookupName = AdminControl.makeObjectName('WebSphere:type=SIBRemoteMediationPoint,SIBMessagingEngine=' + self.name + ',*')
      rmpMBeans = AdminControl.queryNames_jmx(rmpLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Jede einzelne abarbeiten
    for rmpMBean in 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 + '"')

        # Details zu abgehenden Sender (sofern vorhanden) abrufen
        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) + '"')

        # Stets eine einzige Zeile für ferne Mediation-Punkte
        out.write('/>\n')
      except:
        et.printErrorAndCloseTag(sys.exc_info(), 1)
    # MediationPoints-Tag vervollständigen
    out.write(indent + "</RemoteMediationPoints>\n")

  # Zusammenfassung aller Veröffentlichungspunkte für die Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printPublicationPointsXML(self, meMBean, indent):  
    ppMBeans = None
    out.write(indent + "<PublicationPoints")
    try:
      # Eine Liste mit MBeans für Veröffentlichungspunkte abrufen
      ppLookupName = AdminControl.makeObjectName('WebSphere:type=SIBPublicationPoint,SIBMessagingEngine=' + self.name + ',*')
      ppMBeans = AdminControl.queryNames_jmx(ppLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Jede einzelne abarbeiten
    for ppMBean in ppMBeans:
      inboundReceivers = []
      subscriptions = []
      out.write(indent + " <PublicationPoint")
      depth = None
      try:
        depth = getStrAttr(ppMBean, "depth")
      except:
        # Attribut ist nicht vorhanden
        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") + '"')
        # Eine Liste eingehender Empfänger für ferne Veröffentlichungspunkte abrufen
        inboundReceivers = AdminControl.invoke_jmx(ppMBean, "listInboundReceivers", [], [])
        # Eine Liste der Subskriptionen abrufen
        subscriptions = AdminControl.invoke_jmx(ppMBean, "getSubscriptions", [], [])
        # Tag vervollständigen
        out.write('>\n')
      except:
        et.printErrorAndCloseTag(sys.exc_info(), 0)
      # Jeden einzelnen fernen Veröffentlichungspunkt (eingehender Empfänger) abarbeiten
      for ir in 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)
      # Jede einzelne Subskription abarbeiten
      depthTally = 0
      for sub in subscriptions:
        oneLineTag = 0
        rsps = [] # remote subscription points
        out.write(indent + '  <Subscription')
        try:
          out.write(' subscriberId="' + toStr(sub.getSubscriberId()) + '"')
          subDepth = sub.getDepth()
          depthTally = depthTally + subDepth
          out.write(' depth="' + str(subDepth) + '"')
          # Jeden Selektor schreiben
          selector = sub.getSelector()
          if selector != None: out.write(' selector="' + sub.getSelector() + '"')
          # Topics schreiben
          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('"')
          # Eine Liste der fernen Subskriptionspunkte abrufen
          rsps = AdminControl.invoke_jmx(ppMBean, "listRemoteConsumerTransmitters", [sub], ['com.ibm.websphere.sib.admin.SIBSubscription'])
          # Prüfen, ob untergeordnete Elemente vorhanden sind, oder einfach das Tag hier schließen
          if len(rsps) == 0:
            out.write('/>\n')
            oneLineTag = 1
          else: out.write('>\n')
        except:
          et.printErrorAndCloseTag(sys.exc_info(), 0)
        # Sind ferne Subskriptionspunkte vorhanden?
        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)
        # Subskriptions-Tag bei Bedarf schließen
        if oneLineTag == 0: out.write(indent + '  </Subscription>\n')
      # PublicationPoint-Tag vervollständigen

      # 50 Nachrichten als Puffer bereitstellen, um das Risiko falscher Alarme zu minimieren.
      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")
    # PublicationPoints-Tag vervollständigen
    out.write(indent + "</PublicationPoints>\n")

  # Zusammenfassung aller SIB-Links in dieser Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printBusLinks(self, meMBean, indent):  
    glMBeans = None
    out.write(indent + "<BusLinks")
    try:
      # Eine Liste der MBeans für Linkübertragungswarteschlangen abrufen.
      # Diese Liste ist für Messaging-Engines vor Version 7.0 leer.
      glLookupName = AdminControl.makeObjectName('WebSphere:type=SIBGatewayLink,SIBMessagingEngine=' + self.name + ',*')
      glMBeans = AdminControl.queryNames_jmx(glLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # UUIDs aller Verbindungsziele, die als lokale Verbindungen erkannt wurden,
    # verfolgen, um sie aus der Liste der fernen Sender auszuschließen.
    localLinkUuids = {}
    # Jeden einzelnen Sender abarbeiten
    for glMBean in glMBeans:
      oneLineTag = 0
      linkReceivers = []
      targetUuid = glMBean.getKeyProperty("targetUuid")
      localLinkUuids[targetUuid] = 1
      out.write(indent + " <BusLink")
      # Zuerst prüfen, ob der Name des fremden Busses abgefragt werden kann. Wenn dieser Versuch scheitert,
      # kommunizieren Sie mit einer Messaging-Engine vor Version 7.
      foreignBusName = None
      oldVersion = 0
      try:
        foreignBusName = getStrReturnVal(glMBean, "getForeignBusName")
      except:
        oldVersion = 1
      # Den Namen abrufen (manchmal enthält der zurückgegebene Name Anführungszeichen).
      virtualLinkName = toStr(glMBean.getKeyProperty("name"))
      if not (virtualLinkName.find('"') == 0): virtualLinkName = '"' + virtualLinkName + '"'
      # Die richtigen Informationen für jede Version ausgeben
      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)
        # Die Verbindungsempfangswarteschlangen für diese Verbindung ausgeben
        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)
        # Die Linkübertragungswarteschlangen für diese Verbindung ausgeben
        self.printLinkTransmittersXML(meMBean, targetUuid, {}, indent + '  ')
      # Verbindungs-Tag vervollständigen
      out.write(indent + ' </BusLink>\n')
    # Nur für den Fall, dass es verwaiste Verbindungs-MBeans gibt, diese hier ausgeben
    self.printLinkTransmittersXML(meMBean, None, localLinkUuids, indent + ' ')
    # SIBLinks-Tag vervollständigen
    out.write(indent + "</BusLinks>\n")

  # Zusammenfassung aller SIB-Linkübertragungswarteschlangen für die Messaging-Engine
  # ausgeben und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden.
  # Gibt entweder alle Sender mit einer bestimmten Ziel-UUID oder alle Sender
  # mit Ausnahme von Schlüsseln im excludeUuids-Hash aus.
  def printLinkTransmittersXML(self, meMBean, targetUuid, excludeUuids, indent):  
    ltMBeans = None
    try:
      # Eine Liste der MBeans für Linkübertragungswarteschlangen abrufen.
      # Diese Liste ist für Messaging-Engines vor Version 7.0 leer.
      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)
    # Jeden einzelnen Sender abarbeiten
    for ltMBean in ltMBeans:
      # Sicherstellen, dass dies nicht ausgeschlossen werden sollte
      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"')
  
          # Stets eine einzige Zeile für Linkübertragungswarteschlangen
          out.write('/>\n')
        except:
          et.printErrorAndCloseTag(sys.exc_info(), 1)

  # Zusammenfassung aller WMQ-Links in dieser Messaging-Engine ausgeben
  # und hierfür die vom aufrufenden Modul gefundene MBean für die Messaging-Engine verwenden
  def printWMQLinks(self, meMBean, indent):  
    mqlMBeans = None
    out.write(indent + "<WMQLinks")
    try:
      # Eine Liste der MBeans für WMQ-Links abrufen.
      # Diese Liste ist für Messaging-Engines vor Version 7.0 leer.
      mqlLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMQLink,SIBMessagingEngine=' + self.name + ',*')
      mqlMBeans = AdminControl.queryNames_jmx(mqlLookupName, None)
      out.write('>\n') # Tag vervollständigen, da Lookup erfolgreich war
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 0)
    # Jede einzelne gefundene MBean für WMQ-Links abarbeiten
    for mqlMBean in mqlMBeans:
      schlMBeans = []
      rchlMBeans = []
      # Möglicherweise können keine Nachrichten abgefragt werden, die gemäß Einführung in Version 7.0 empfangen wurden
      msgsReceived = None
      try:
        msgsReceived = getStrReturnVal(mqlMBean, "getTotalLinkMessagesReceived")
      except:
        pass
      out.write(indent + " <WMQLink")
      try:
        # targetUuid abrufen
        linkName = mqlMBean.getKeyProperty("name")
        out.write(' name="' +  linkName + '"')
        out.write(' state="' +  getStrReturnVal(mqlMBean, "getOverallStatus") + '"')
        if msgsReceived != None: out.write(' messagesReceived="' +  msgsReceived + '"')
        # Liste der Senderkanalinstanzen des WMQ-Links abrufen
        schlLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMQLinkSenderChannel,SIBMessagingEngine=' + self.name + ',name=' + linkName + 'SNDR,*')
        schlMBeans = AdminControl.queryNames_jmx(schlLookupName, None)
        # Liste der Empfängerkanalinstanzen des WMQ-Links abrufen
        rchlLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMQLinkReceiverChannel,SIBMessagingEngine=' + self.name + ',name=' + linkName + 'RCVR,*')
        rchlMBeans = AdminControl.queryNames_jmx(rchlLookupName, None)
        out.write('>\n') # Anfangstag vervollständigen
      except:
          et.printErrorAndCloseTag(sys.exc_info(), 0)
      # Die Senderkanäle durchlaufen
      for schlMBean in 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()) + '"')
          # Liste der Übertragungswarteschlangeninstanzen des Senderkanals des WMQ-Links abrufen
          sxmitLookupName = AdminControl.makeObjectName('WebSphere:type=SIBMQLinkSenderChannelTransmitter,SIBMessagingEngine=' + self.name + ',name=' + channelName + ',*')
          sxmitMBeans = AdminControl.queryNames_jmx(sxmitLookupName, None)
          out.write('>\n') # Anfangstag vervollständigen
        except:
          et.printErrorAndCloseTag(sys.exc_info(), 0)
        # Durch die Übertragungswarteschlangen des Senderkanals iterieren
        for sxmitMBean in sxmitMBeans:
          out.write(indent + "   <SenderChannelTransmitter")
          # Liste der bekannten Linkübertragungswarteschlangen
          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"')
            # Liste der bekannten Linkübertragungswarteschlangen
            knownLinkTransmitters = AdminControl.invoke_jmx(sxmitMBean, "listInboundReceivers", [], [])
            # Tag vervollständigen
            if (knownLinkTransmitters == None) or (len(knownLinkTransmitters)) == 0: 
              out.write('/>\n') # Einzeiliges Tag vervollständigen
              oneLineTag = 1
            else: out.write('>\n')
          except:
            et.printErrorAndCloseTag(sys.exc_info(), 1)
          # Bekannte Linkübertragungswarteschlangen ausgeben
          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)
            # Tag für Übertragungswarteschlange schließen
            out.write(indent + "   </SenderChannelTransmitter>\n")
        # Sender-Tag schließen
        out.write(indent + "  </SenderChannel>\n")
      # Die Empfängerkanäle durchlaufen
      for rchlMBean in rchlMBeans:
        out.write(indent + "  <ReceiverChannel")
        statusEntries = []
        try:
          out.write(' state="' +  getStrReturnVal(rchlMBean,"getOverallStatus") + '"')
          # Den Status jeder Instanz auflisten
          statusEntries = AdminControl.invoke_jmx(rchlMBean, "getCurrentStatus", [], [])
          if (statusEntries == None): statusEntries = []
          out.write('>\n') # Anfangstag vervollständigen
        except:
          et.printErrorAndCloseTag(sys.exc_info(), 0)
        # Jeden Eintrag ausgeben
        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') # Tag vervollständigen
          except:
            et.printErrorAndCloseTag(sys.exc_info(), 1)
        # Tag schließen
        out.write(indent + "  </ReceiverChannel>\n")
      # WMQLink-Tag vervollständigen
      out.write(indent + " </WMQLink>\n")
    # WMQLinks-Tag vervollständigen
    out.write(indent + "</WMQLinks>\n")

# Eine kleine Klasse, die bei der Zusammenfassung von Informationen
# zu Konsumentenübertragungswarteschlangen und Empfangswarteschlangen
# für eingehende Nachrichten an einem Warteschlangenpunkt hilft.
# Erstellen Sie deshalb einen "bekannten fernen Warteschlangenpunkt"
# für jede ferne Messaging-Engines-UUID, für die Sie
# einen fernen put/get-Status haben.
class KnownRemoteQueuePoint:
  "Eine Klasse für die Ausgabe einer Laufzeitzusammenfassung eines bekannten fernen Warteschlangenpunkts"
  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
  # XML-Tag für Zusammenfassung dieses KnownRemoteQueuePoint ausgeben
  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) + '"')
      # Hierfür wird nur eine einzige Zeile benötigt
      out.write('/>\n')
    except:
      et.printErrorAndCloseTag(sys.exc_info(), 1)

# Scriptausführung beginnt hier...

# Der einzige Eingabeparameter ist der Name der Ausgabedatei.
# Standardmäßig wird STDOUT verwendet, wenn kein Name angegeben ist.
if len(sys.argv) > 0: 
  print "Writing output to", sys.argv[0]
  out = open(sys.argv[0], 'w')
  fileOpened = 1
else:
  out = sys.stdout
  fileOpened = 0

# Alle Messaging-Engines in der Konfiguration suchen und eine UUID
# für die Messaging-Engines im Namensverzeichnis erstellen
mesByUUID = {}
mesByBus = {}
mes = AdminConfig.list("SIBMessagingEngine").split("\n")
for me in mes:
  # Umbrüche unter Windows entfernen
  me = me.strip()
  # Ein ME-Objekt erstellen
  meBus  = AdminConfig.showAttribute(me, "busName")
  meName = AdminConfig.showAttribute(me, "name")
  meUUID = AdminConfig.showAttribute(me, "uuid")
  meObject = MessagingEngine(meBus, meName, meUUID)
  # Messaging-Engines nach UUID in die Zuordnung aufnehmen
  mesByUUID[meUUID] = meObject
  # Messaging-Engines in die Liste für diesen Bus aufnehmen
  if (mesByBus.has_key(meBus)): meList = mesByBus[meBus]
  else: meList = []
  meList.append(meObject)
  mesByBus[meBus] = meList

# Die Busse und Messaging-Engines in jedem Bus durchlaufen
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()

Im Folgenden sehen Sie die Beispielausgabe für das 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>

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjo0060_
Dateiname:tjo0060_.html