예제 #1
0
 def __parseSystemComponent(self, item, componentClass):
     r'@types: Properties, PyClass -> SystemComponent'
     version = (self.__getPropertyIgnoreCase('MajorVersion', item)
                and sap_jee.SystemComponent.Version(
                     self.__getPropertyIgnoreCase('MajorVersion', item),
                     self.__getPropertyIgnoreCase('MinorVersion', item),
                     self.__getPropertyIgnoreCase('MicroVersion', item))
                or None)
     objectName = jmx.restoreObjectName(
                     self.__getPropertyIgnoreCase('jmxObjectName', item))
     # attribute 'Name' can be None but object name contains it
     name = (self.__getPropertyIgnoreCase('Name', item)
             or objectName.getKeyProperty('name'))
     jars = self.__getPropertyIgnoreCase('Jars', item)
     jars = (jars
             # convert ArrayList to list
             and list(jars)
             or ())
     return componentClass(
         name,
         self.__getPropertyIgnoreCase('DisplayName', item),
         self.__getPropertyIgnoreCase('Description', item),
         self.__getPropertyIgnoreCase('ProviderName', item),
         version,
         jars
     )
예제 #2
0
 def _parseCluster(self, item):
     r'@types: Properties -> jee.Cluster'
     objectNameRepr = item.get('jmxObjectName')
     objectName = jmx.restoreObjectName(objectNameRepr)
     cluster = jee.Cluster(objectName.getKeyProperty('name'))
     cluster.setObjectName(objectNameRepr)
     return cluster
예제 #3
0
 def _getMbeanIdentifier(self, obj):
     r'@types: jee.HasObjectName'
     if obj.getObjectName():
         objectName = jmx.restoreObjectName(obj.getObjectName())
         mbeanIdentifier = objectName.getKeyProperty('mbeanIdentifier')
         # an example cells/ddm-rnd-yg-vm3Cell01/nodes/ddm-rnd-yg-vm3Node01/servers/server1/resources.xml
         # we have to strip the resources.xml with the latest slash
         theLatestSlashIndex = mbeanIdentifier.rfind('/')
         mbeanIdentifier = mbeanIdentifier[:theLatestSlashIndex]
         return mbeanIdentifier
예제 #4
0
 def _getMbeanIdentifier(self, obj):
     r"@types: jee.HasObjectName"
     if obj.getObjectName():
         objectName = jmx.restoreObjectName(obj.getObjectName())
         mbeanIdentifier = objectName.getKeyProperty("mbeanIdentifier")
         # an example cells/ddm-rnd-yg-vm3Cell01/nodes/ddm-rnd-yg-vm3Node01/servers/server1/resources.xml
         # we have to strip the resources.xml with the latest slash
         theLatestSlashIndex = mbeanIdentifier.rfind("/")
         mbeanIdentifier = mbeanIdentifier[:theLatestSlashIndex]
         return mbeanIdentifier
예제 #5
0
def discoverJms(domain, jmsDiscoverer, jmsTopologyReporter):
    r'@types: jee.Domain, jee.Server, weblogic_discoverer.JmsDiscovererByJmx, jms.TopologyReporter -> ObjectStateHolderVector'
    vector = ObjectStateHolderVector()
    # all JMS servers
    logger.info("Find all JMS servers")
    jmsServers = []
    # DISCOVER ALL JMS SERVERS
    try:
        # get named server with store information (name & store)
        jmsServers = jmsDiscoverer.findServersWithStore()
    except (Exception, JException):
        logger.warnException("Failed to get all JMS servers with information about store")
        try:
            # name attribute available only
            jmsServers = jmsDiscoverer.findServers()
        except (Exception, JException):
            logger.warnException("Failed to get all JMS servers without information about store")
    runningServerByName = {}

    # JMS SERVERS IN RUNTIME
    try:
        for server in jmsDiscoverer.findServersInRuntime():
            runningServerByName[server.getName()] = server
    except (Exception, JException):
        logger.warnException("Failed to find JMS servers in runtime")

    # servers in domain by name
    jeeServerByName = {}
    for node in domain.getNodes():
        for server in node.getServers():
            jeeServerByName[server.getName()] = server

    for server in jmsServers:
        # discover destinations
        serverToReport = server
        deploymentTarget = None

        runningInstance = runningServerByName.get(server.getName())
        if runningInstance:
            serverToReport = runningInstance
            serverToReport.store = server.store
            # try to resolve server deployment target
            objectName = jmx.restoreObjectName( runningInstance.getObjectName() )
            jeeServerName = objectName.getKeyProperty('ServerRuntime')
            jeeServer = jeeServerByName.get(jeeServerName)
            if jeeServer:
                deploymentTarget = jeeServer

        destinations = jmsDiscoverer.discoverDestinations(server)
        for destination in destinations:
            destination.server = server
        try:
            vector.addAll( jmsTopologyReporter.reportJmsServer(domain, deploymentTarget, server))
            vector.addAll( jmsTopologyReporter.reportResources(domain, deploymentTarget, *destinations))
        except Exception:
            logger.warnException("Failed to report JMS resources for %s" % server)

    # JMS Modules
    jmsModules = []
    try:
        jmsModules.extend(jmsDiscoverer.findJmsModules())
    except (Exception, JException):
        logger.debug("Failed to find JMS modules")
    jmsModuleByName = {}
    for module in jmsModules:
        jmsModuleByName[module.getName()] = module

    # non-distributed JMS Topics and Queues
    destinationInModules = []
    try:
        destinationInModules.extend(jmsDiscoverer.findDestinationsInModules())
    except (Exception, JException):
        logger.debug('Failed to find Destinations in JMS modules')
    for destination in destinationInModules:
        jmsModuleName = jmsDiscoverer.getModuleNameByDestination(destination)
        server = jmsModuleByName.get(jmsModuleName)
        if server:
            destination.server = server
            try:
                vector.addAll( jmsTopologyReporter.reportJmsServer(domain, deploymentTarget, server) )
                vector.addAll( jmsTopologyReporter.reportResources(domain, deploymentTarget, destination) )
            except Exception:
                logger.debug("Failed to report JMS resources of JMS Module %s" % server)

    return vector
예제 #6
0
            except (Exception, JException):
                logger.warnException("Failed to find available connection pools")
            # datasources
            try:
                for ds in dsDicoverer.findDatasources():
                    datasourceByName[ds.getName()] = ds
            except (Exception, JException):
                logger.warnException("Failed to find available datasources")
            # XA enabled datasources
            try:
                for ds in dsDicoverer.findTxDatasources():
                    datasourceByName[ds.getName()] = ds
            except (Exception, JException):
                logger.warnException("Failed to find available XA datasources")
            for ds in datasourceByName.values():
                objectName = jmx.restoreObjectName(ds.getObjectName())
                targetName = objectName.getKeyProperty('Location')
                if targetName:
                    datasourcesByTargetName.setdefault(targetName, []).append(ds)

                pool = ds.poolName and connectionPoolByName.get(ds.poolName)
                if pool:
                    ds.url = pool.url
                    ds.driverClass = pool.driverClass
                    ds.initialCapacity.set(pool.initialCapacity.value())
                    ds.maxCapacity.set(pool.maxCapacity.value())
                    ds.capacityIncrement.set(pool.capacityIncrement.value())
                    ds.testConnectionsOnRelease = pool.testConnectionsOnRelease
            try:
                dsVector = datasourceTopologyReporter.reportDatasourcesWithDeployer(domain, None, *datasourceByName.values())
            except (Exception, JException):
예제 #7
0
                    for server in node.getServers():
                        serverByNodeName.setdefault(node.getName(), {}).setdefault(server.getName(), server)

                # cluster by name mapping
                clusterByName = {}
                for cluster in domain.getClusters():
                    clusterByName[cluster.getName()] = cluster

                for application in filter(isAmongApplicationsToDiscover, applications):
                    # mapping of objectNames of modules to deployment target
                    modulesByTarget = {}

                    # determine deployment targets
                    for module in application.getModules():
                        objectNameStr = module.getObjectName()
                        objectName = jmx.restoreObjectName(objectNameStr)
                        nodeName = objectName.getKeyProperty('node')

                        # get servers in module node by name
                        serverByName = serverByNodeName.get(nodeName)
                        if serverByName:
                            process = objectName.getKeyProperty('process')
                            jeeServer = objectName.getKeyProperty('J2EEServer')
                            jeeServerName = jeeServer or process
                            server = serverByName.get(jeeServerName)
                            if server:
                                # determine whether server is a cluster member
                                clusterRole = server.getRole(jee.ClusterMemberServerRole)
                                if clusterRole:
                                    target = clusterByName.get(clusterRole.clusterName)
                                    if not target:
예제 #8
0
                    for server in node.getServers():
                        serverByNodeName.setdefault(node.getName(), {}).setdefault(server.getName(), server)

                # cluster by name mapping
                clusterByName = {}
                for cluster in domain.getClusters():
                    clusterByName[cluster.getName()] = cluster

                for application in filter(isAmongApplicationsToDiscover, applications):
                    # mapping of objectNames of modules to deployment target
                    modulesByTarget = {}

                    # determine deployment targets
                    for module in application.getModules():
                        objectNameStr = module.getObjectName()
                        objectName = jmx.restoreObjectName(objectNameStr)
                        nodeName = objectName.getKeyProperty("node")

                        # get servers in module node by name
                        serverByName = serverByNodeName.get(nodeName)
                        if serverByName:
                            process = objectName.getKeyProperty("process")
                            jeeServer = objectName.getKeyProperty("J2EEServer")
                            jeeServerName = jeeServer or process
                            server = serverByName.get(jeeServerName)
                            if server:
                                # determine whether server is a cluster member
                                clusterRole = server.getRole(jee.ClusterMemberServerRole)
                                if clusterRole:
                                    target = clusterByName.get(clusterRole.clusterName)
                                    if not target:
예제 #9
0
def discoverJms(domain, jmsDiscoverer, jmsTopologyReporter):
    r'@types: jee.Domain, jee.Server, weblogic_discoverer.JmsDiscovererByJmx, jms.TopologyReporter -> ObjectStateHolderVector'
    vector = ObjectStateHolderVector()
    # all JMS servers
    logger.info("Find all JMS servers")
    jmsServers = []
    # DISCOVER ALL JMS SERVERS
    try:
        # get named server with store information (name & store)
        jmsServers = jmsDiscoverer.findServersWithStore()
    except (Exception, JException):
        logger.warnException(
            "Failed to get all JMS servers with information about store")
        try:
            # name attribute available only
            jmsServers = jmsDiscoverer.findServers()
        except (Exception, JException):
            logger.warnException(
                "Failed to get all JMS servers without information about store"
            )
    runningServerByName = {}

    # JMS SERVERS IN RUNTIME
    try:
        for server in jmsDiscoverer.findServersInRuntime():
            runningServerByName[server.getName()] = server
    except (Exception, JException):
        logger.warnException("Failed to find JMS servers in runtime")

    # servers in domain by name
    jeeServerByName = {}
    for node in domain.getNodes():
        for server in node.getServers():
            jeeServerByName[server.getName()] = server

    for server in jmsServers:
        # discover destinations
        serverToReport = server
        deploymentTarget = None

        runningInstance = runningServerByName.get(server.getName())
        if runningInstance:
            serverToReport = runningInstance
            serverToReport.store = server.store
            # try to resolve server deployment target
            objectName = jmx.restoreObjectName(runningInstance.getObjectName())
            jeeServerName = objectName.getKeyProperty('ServerRuntime')
            jeeServer = jeeServerByName.get(jeeServerName)
            if jeeServer:
                deploymentTarget = jeeServer

        destinations = jmsDiscoverer.discoverDestinations(server)
        for destination in destinations:
            destination.server = server
        try:
            vector.addAll(
                jmsTopologyReporter.reportJmsServer(domain, deploymentTarget,
                                                    server))
            vector.addAll(
                jmsTopologyReporter.reportResources(domain, deploymentTarget,
                                                    *destinations))
        except Exception:
            logger.warnException("Failed to report JMS resources for %s" %
                                 server)

    # JMS Modules
    jmsModules = []
    try:
        jmsModules.extend(jmsDiscoverer.findJmsModules())
    except (Exception, JException):
        logger.debug("Failed to find JMS modules")
    jmsModuleByName = {}
    for module in jmsModules:
        jmsModuleByName[module.getName()] = module

    # non-distributed JMS Topics and Queues
    destinationInModules = []
    try:
        destinationInModules.extend(jmsDiscoverer.findDestinationsInModules())
    except (Exception, JException):
        logger.debug('Failed to find Destinations in JMS modules')
    for destination in destinationInModules:
        jmsModuleName = jmsDiscoverer.getModuleNameByDestination(destination)
        server = jmsModuleByName.get(jmsModuleName)
        if server:
            destination.server = server
            try:
                vector.addAll(
                    jmsTopologyReporter.reportJmsServer(
                        domain, deploymentTarget, server))
                vector.addAll(
                    jmsTopologyReporter.reportResources(
                        domain, deploymentTarget, destination))
            except Exception:
                logger.debug(
                    "Failed to report JMS resources of JMS Module %s" % server)

    return vector
예제 #10
0
                logger.warnException(
                    "Failed to find available connection pools")
            # datasources
            try:
                for ds in dsDicoverer.findDatasources():
                    datasourceByName[ds.getName()] = ds
            except (Exception, JException):
                logger.warnException("Failed to find available datasources")
            # XA enabled datasources
            try:
                for ds in dsDicoverer.findTxDatasources():
                    datasourceByName[ds.getName()] = ds
            except (Exception, JException):
                logger.warnException("Failed to find available XA datasources")
            for ds in datasourceByName.values():
                objectName = jmx.restoreObjectName(ds.getObjectName())
                targetName = objectName.getKeyProperty('Location')
                if targetName:
                    datasourcesByTargetName.setdefault(targetName,
                                                       []).append(ds)

                pool = ds.poolName and connectionPoolByName.get(ds.poolName)
                if pool:
                    ds.url = pool.url
                    ds.driverClass = pool.driverClass
                    ds.initialCapacity.set(pool.initialCapacity.value())
                    ds.maxCapacity.set(pool.maxCapacity.value())
                    ds.capacityIncrement.set(pool.capacityIncrement.value())
                    ds.testConnectionsOnRelease = pool.testConnectionsOnRelease
            try:
                dsVector = datasourceTopologyReporter.reportDatasourcesWithDeployer(
예제 #11
0
                    appByName = {}
                    # mapping of resources by application name
                    # @types: dict(str, list(jee.Resource))
                    resourceByAppName = {}
                    # find all available applications
                    try:
                        for app in appDiscoverer.findApplications():
                            appByName[app.getName()] = app
                    except (Exception, JException):
                        logger.warnException('Failed  to discover applications')
                    # find EJB, WEB modules where 'J2EEApplication' in object name of each points to
                    # the application name it belongs to

                    for module in appDiscoverer.discoverEjbModules():
                        objectName = jmx.restoreObjectName(module.getObjectName())
                        applicationName = objectName.getKeyProperty('J2EEApplication')
                        application = appByName.get(applicationName)
                        if not application:
                            application = jee.Application(applicationName)
                            appByName[applicationName] = application
                        if isAppResourcesDiscoveryEnabled:
                            application.addModule(module)
                        # parse module descriptor to get references on used resources
                        files = filter(lambda f, expectedName = module.getDescriptorName():
                                       f.getName() == expectedName, module.getConfigFiles())
                        if files:
                            # take JEE deployment descriptor - there is only one
                            file_ = files[0]
                            descriptor = descrParser.parseEjbModuleDescriptor(file_.content, module)
                            for resource in descriptor.getResources():