Example #1
0
def processWebsphere(context, processName, pattern):
    wasOsh = context.application.getOsh()
    cellName = None
    serverName = None
    process = context.application.getProcess(processName)
    processOriginCmd = process.commandLine
    if processOriginCmd is not None:
        logger.debug('For process id ', process.getPid(),
                     ' found original command line ', processOriginCmd)
        m = re.search(pattern, processOriginCmd)
        if m is not None:
            cellName = m.group(1)
            serverName = m.group(3)
            fullName = ''.join([m.group(2), '_', m.group(3)]).strip()
            logger.debug('Parsed out server name ', serverName, ' in cell ',
                         cellName)
        else:
            logger.debug(
                'Failed to parse out cell name and server name from command line'
            )
    if serverName is not None:
        wasOsh.setStringAttribute('j2eeserver_servername', serverName)
        if fullName:
            wasOsh.setStringAttribute('j2eeserver_fullname', fullName)
        modeling.setJ2eeServerAdminDomain(wasOsh, cellName)
        modeling.setAppServerType(wasOsh)
    else:
        raise IgnoreApplicationException(
            'WebSphere details cannot be acquired, ignoring the application')
    def enrichAppServerOsh(self, context, processName):
        r'''Goal of this is to set for reported Weblogic AS
         - administrative domain name
         - application type as Application Server (AS)
         @types: applications.ApplicationSignatureContext, str
        '''
        # @types: ProcessObject
        process = context.application.getProcess(processName)
        # compose function to get process by PID required to get
        # domain root directory path
        appComponent = context.application.getApplicationComponent()
        applicationSignature = appComponent.getApplicationSignature()
        processInfoManager = applicationSignature.getProcessesManager()
        # here it is - function accept PID and returns process or None
        getProcessByPid = (processInfoManager
                           and processInfoManager.getProcessByPid
                           or (lambda *args: None)
        )

        # first of all set application type as AS for the server OSH
        serverOsh = context.application.getOsh()
        modeling.setAppServerType(serverOsh)

        # initialize required data
        loadExternalDtd = 0
        shell = context.client # for shell jobs we have shellutils.Shell instance
        fs = file_system.createFileSystem(shell)

        try:
            # find out path of domain root directory
            domainRootPath = weblogic_by_shell.getDomainRootDirPath(shell, fs, process,
                                               getProcessByPid)
        except:
            logger.debug("Domain root directory path cannot be found from the runtime information.")
            return
        domainLayout = weblogic_discoverer.createDomainLayout(fs, domainRootPath)
        parser = weblogic_discoverer.createDomainConfigParserByLayout(domainLayout, loadExternalDtd)
        try:
            domainDescriptorFile = domainLayout.getFileContent(
                        domainLayout.getDomainConfigFilePath()
            )
            domainDescriptor = parser.parseConfiguration(domainDescriptorFile.content)
        except (Exception, JException):
            logger.warnException("Failed to process config.xml")
        else:
            # get version of the platform
            versionInfo = domainDescriptor.versionInfo
            logger.info("Platform version is %s" % versionInfo)
            domainName = domainDescriptor.getName()
            # update server administrative domain attribute
            modeling.setJ2eeServerAdminDomain(serverOsh, domainName)
            servers = domainDescriptor.getServers()
            for server in servers:
                if server.getName() == serverOsh.getAttributeValue('name'):
                    serverFullName = jee.ServerTopologyBuilder()._composeFullName(server)
                    serverOsh.setAttribute('j2eeserver_fullname', serverFullName)
                    break
def processGlassfish(context, processName):
    glassfishOsh = context.application.getOsh()

    logger.debug('Started processing')
    process = context.application.getProcess(processName)
    processOriginCmd = process.commandLine
    if processOriginCmd is not None:
        serverName = None
        serverRuntime = None
        if processOriginCmd.find(
                'com.sun.enterprise.glassfish.bootstrap.ASMain') != -1:
            serverRuntime = glassfish_discoverer.createServerRuntimeV3(
                processOriginCmd, None)
            DescriptorClass = glassfish_discoverer.DomainXmlDescriptorV3
        elif processOriginCmd.find('com.sun.enterprise.server.PELaunch') != -1:
            serverRuntime = glassfish_discoverer.createServerRuntimeV2(
                processOriginCmd, None)
            DescriptorClass = glassfish_discoverer.DomainXmlDescriptorV2

        if serverRuntime:
            serverName = serverRuntime.findServerName()
            globalSettings = GeneralSettingsConfigFile.getInstance()
            loadExternalDTD = globalSettings.getPropertyBooleanValue(
                'loadExternalDTD', 0)

            fs = file_system.createFileSystem(context.client)
            layout = glassfish_discoverer.createServerLayout(serverRuntime, fs)
            domainXmlFile = layout.getFile(layout.getDomainXmlPath())

            xPathParser = glassfish_discoverer.XpathParser(loadExternalDTD)
            descriptor = DescriptorClass(xPathParser, domainXmlFile.content)
            domainName = descriptor.findDomainName()

            nodeName = descriptor.findNodeNameByServerName(serverName)

            if serverName and domainName:
                logger.debug('Reporting serverName %s, domainName %s' %
                             (serverName, domainName))
                glassfishOsh.setStringAttribute('j2eeserver_servername',
                                                serverName)
                modeling.setJ2eeServerAdminDomain(glassfishOsh, domainName)
                modeling.setAppServerType(glassfishOsh)
                # server full name
                nodeNamePart = nodeName and '%s_' % nodeName or ''
                fullName = '%s%s' % (nodeNamePart, serverName)
                glassfishOsh.setAttribute('j2eeserver_fullname', fullName)
            else:
                logger.debug(
                    'Glassfish details cannot be acquired, ignoring the application %s, %s'
                    % (serverName, domainName))
        else:
            logger.debug('Server runtime is not created')
    else:
        logger.debug('No process comman line found for pid: %s' %
                     process.getPid())
def processGlassfish(context, processName):
    glassfishOsh = context.application.getOsh()

    logger.debug('Started processing')
    process = context.application.getProcess(processName)
    processOriginCmd = process.commandLine
    if processOriginCmd is not None:
        serverName = None
        serverRuntime = None
        if processOriginCmd.find('com.sun.enterprise.glassfish.bootstrap.ASMain') != -1:
            serverRuntime = glassfish_discoverer.createServerRuntimeV3(processOriginCmd, None)
            DescriptorClass = glassfish_discoverer.DomainXmlDescriptorV3
        elif processOriginCmd.find('com.sun.enterprise.server.PELaunch') != -1:
            serverRuntime = glassfish_discoverer.createServerRuntimeV2(processOriginCmd, None)
            DescriptorClass = glassfish_discoverer.DomainXmlDescriptorV2

        if serverRuntime:
            serverName = serverRuntime.findServerName()
            globalSettings = GeneralSettingsConfigFile.getInstance()
            loadExternalDTD = globalSettings.getPropertyBooleanValue('loadExternalDTD', 0)

            fs = file_system.createFileSystem(context.client)
            layout = glassfish_discoverer.createServerLayout(serverRuntime, fs)
            domainXmlFile = layout.getFile(layout.getDomainXmlPath())

            xPathParser = glassfish_discoverer.XpathParser(loadExternalDTD)
            descriptor = DescriptorClass(xPathParser, domainXmlFile.content)
            domainName = descriptor.findDomainName()

            nodeName = descriptor.findNodeNameByServerName(serverName)

            if serverName and domainName:
                logger.debug('Reporting serverName %s, domainName %s' % (serverName, domainName))
                glassfishOsh.setStringAttribute('j2eeserver_servername', serverName)
                modeling.setJ2eeServerAdminDomain(glassfishOsh, domainName)
                modeling.setAppServerType(glassfishOsh)
                # server full name
                nodeNamePart = nodeName and '%s_' % nodeName or ''
                fullName = '%s%s' % (nodeNamePart, serverName)
                glassfishOsh.setAttribute('j2eeserver_fullname', fullName)
            else:
                logger.debug('Glassfish details cannot be acquired, ignoring the application %s, %s' % (serverName, domainName))
        else:
            logger.debug('Server runtime is not created')
    else:
        logger.debug('No process comman line found for pid: %s' % process.getPid())
 def process(self, context):
     application = context.application
     osh = application.getOsh()
     process = application.getMainProcesses()[0]
     command_line = process.commandLine
     server_name = 'default'
     p = 'org\.jboss\.Main.*?\s+-{1,2}(?:c\s+|configuration\s*=\s*)([\w_\.-]+)'
     m = re.search(p, command_line)
     if m is not None:
         server_name = m.group(1)
         logger.debug('Found jboss ', server_name, ' configuration')
     else:
         logger.debug('Found jboss default configuration')
     osh.setAttribute('j2eeserver_servername', server_name)
     #TODO: replace to jee.ServerTopologyBuilder._composeFullName
     osh.setAttribute('j2eeserver_fullname', server_name)
     modeling.setJ2eeServerAdminDomain(osh, server_name)
     modeling.setAppServerType(osh)
 def process(self, context):
     application = context.application
     osh = application.getOsh()
     process = application.getMainProcesses()[0]
     command_line = process.commandLine
     server_name = 'default'
     p = 'org\.jboss\.Main.*?\s+-{1,2}(?:c\s+|configuration\s*=\s*)([\w_\.-]+)'
     m = re.search(p, command_line)
     if m is not None:
         server_name = m.group(1)
         logger.debug('Found jboss ', server_name, ' configuration')
     else:
         logger.debug('Found jboss default configuration')
     osh.setAttribute('j2eeserver_servername', server_name)
     #TODO: replace to jee.ServerTopologyBuilder._composeFullName
     osh.setAttribute('j2eeserver_fullname', server_name)
     modeling.setJ2eeServerAdminDomain(osh, server_name)
     modeling.setAppServerType(osh)
 def process(self, context):
     application = context.application
     osh = application.getOsh()
     shell = context.client
     fs = file_system.createFileSystem(shell)
     ip = application.getConnectionIp()
     dns_resolver = jee_discoverer.DnsResolverDecorator(
                             netutils.createDnsResolverByShell(shell), ip)
     process = application.getMainProcesses()[0]
     cmd_line = process.commandLine
     server_runtime = jboss_discoverer.createServerRuntime(cmd_line, ip)
     home_dir = server_runtime.findHomeDirPath()
     config = server_runtime.extractOptionValue('--server-config')
     layout = jboss_discoverer.StandaloneModeLayout(fs, home_dir, config)
     loadDtd = 0
     server_config_parser = jboss_discoverer.ServerConfigParserV7(loadDtd)
     standalone_config_path = layout.getStandaloneConfigPath()
     standalone_config_file = layout.getFileContent(standalone_config_path)
     content = standalone_config_file.content
     standalone_config_with_expressions = (
                 server_config_parser.parseStandaloneServerConfig(content))
     server_properties = jboss_discoverer.SystemProperties()
     properties_from_cmd_line = server_runtime.findJbossProperties()
     server_properties.update(properties_from_cmd_line)
     config_props = standalone_config_with_expressions.getSystemProperties()
     server_properties.update(config_props)
     standalone_config = server_config_parser.resolveStandaloneServerConfig(
                      standalone_config_with_expressions, server_properties)
     server_name = standalone_config.getServerName()
     if not server_name:
         try:
             server_name = dns_resolver.resolveHostnamesByIp(ip)[0]
         except netutils.ResolveException:
             server_name = 'Default'
     if server_name is not None:
         osh.setAttribute('j2eeserver_servername', server_name)
         #TODO: replace to jee.ServerTopologyBuilder._composeFullName
         osh.setAttribute('j2eeserver_fullname', server_name)
         modeling.setJ2eeServerAdminDomain(osh, server_name)
     modeling.setAppServerType(osh)
 def process(self, context):
     application = context.application
     osh = application.getOsh()
     shell = context.client
     fs = file_system.createFileSystem(shell)
     ip = application.getConnectionIp()
     dns_resolver = jee_discoverer.DnsResolverDecorator(
         netutils.createDnsResolverByShell(shell), ip)
     process = application.getMainProcesses()[0]
     cmd_line = process.commandLine
     server_runtime = jboss_discoverer.createServerRuntime(cmd_line, ip)
     home_dir = server_runtime.findHomeDirPath()
     config = server_runtime.extractOptionValue('--server-config')
     layout = jboss_discoverer.StandaloneModeLayout(fs, home_dir, config)
     loadDtd = 0
     server_config_parser = jboss_discoverer.ServerConfigParserV7(loadDtd)
     standalone_config_path = layout.getStandaloneConfigPath()
     standalone_config_file = layout.getFileContent(standalone_config_path)
     content = standalone_config_file.content
     standalone_config_with_expressions = (
         server_config_parser.parseStandaloneServerConfig(content))
     server_properties = jboss_discoverer.SystemProperties()
     properties_from_cmd_line = server_runtime.findJbossProperties()
     server_properties.update(properties_from_cmd_line)
     config_props = standalone_config_with_expressions.getSystemProperties()
     server_properties.update(config_props)
     standalone_config = server_config_parser.resolveStandaloneServerConfig(
         standalone_config_with_expressions, server_properties)
     server_name = standalone_config.getServerName()
     if not server_name:
         try:
             server_name = dns_resolver.resolveHostnamesByIp(ip)[0]
         except netutils.ResolveException:
             server_name = 'Default'
     if server_name is not None:
         osh.setAttribute('j2eeserver_servername', server_name)
         #TODO: replace to jee.ServerTopologyBuilder._composeFullName
         osh.setAttribute('j2eeserver_fullname', server_name)
         modeling.setJ2eeServerAdminDomain(osh, server_name)
     modeling.setAppServerType(osh)
def processWebsphere(context, processName, pattern):
    wasOsh = context.application.getOsh()
    cellName = None
    serverName = None
    process = context.application.getProcess(processName)
    processOriginCmd = process.commandLine
    if processOriginCmd is not None:
        logger.debug("For process id ", process.getPid(), " found original command line ", processOriginCmd)
        m = re.search(pattern, processOriginCmd)
        if m is not None:
            cellName = m.group(1)
            serverName = m.group(3)
            fullName = "".join([m.group(2), "_", m.group(3)]).strip()
            logger.debug("Parsed out server name ", serverName, " in cell ", cellName)
        else:
            logger.debug("Failed to parse out cell name and server name from command line")
    if serverName is not None:
        wasOsh.setStringAttribute("j2eeserver_servername", serverName)
        if fullName:
            wasOsh.setStringAttribute("j2eeserver_fullname", fullName)
        modeling.setJ2eeServerAdminDomain(wasOsh, cellName)
        modeling.setAppServerType(wasOsh)
    else:
        raise IgnoreApplicationException("WebSphere details cannot be acquired, ignoring the application")
    def enrichAppServerOsh(self, context, processName):
        r'''Goal of this is to set for reported Weblogic AS
         - administrative domain name
         - application type as Application Server (AS)
         @types: applications.ApplicationSignatureContext, str
        '''
        # @types: ProcessObject
        process = context.application.getProcess(processName)
        # compose function to get process by PID required to get
        # domain root directory path
        appComponent = context.application.getApplicationComponent()
        applicationSignature = appComponent.getApplicationSignature()
        processInfoManager = applicationSignature.getProcessesManager()
        # here it is - function accept PID and returns process or None
        getProcessByPid = (processInfoManager
                           and processInfoManager.getProcessByPid
                           or (lambda *args: None))

        # first of all set application type as AS for the server OSH
        serverOsh = context.application.getOsh()
        modeling.setAppServerType(serverOsh)

        # initialize required data
        loadExternalDtd = 0
        shell = context.client  # for shell jobs we have shellutils.Shell instance
        fs = file_system.createFileSystem(shell)

        try:
            # find out path of domain root directory
            domainRootPath = weblogic_by_shell.getDomainRootDirPath(
                shell, fs, process, getProcessByPid)
        except:
            logger.debug(
                "Domain root directory path cannot be found from the runtime information."
            )
            return
        domainLayout = weblogic_discoverer.createDomainLayout(
            fs, domainRootPath)
        parser = weblogic_discoverer.createDomainConfigParserByLayout(
            domainLayout, loadExternalDtd)
        try:
            domainDescriptorFile = domainLayout.getFileContent(
                domainLayout.getDomainConfigFilePath())
            domainDescriptor = parser.parseConfiguration(
                domainDescriptorFile.content)
        except (Exception, JException):
            logger.warnException("Failed to process config.xml")
        else:
            # get version of the platform
            versionInfo = domainDescriptor.versionInfo
            logger.info("Platform version is %s" % versionInfo)
            domainName = domainDescriptor.getName()
            # update server administrative domain attribute
            modeling.setJ2eeServerAdminDomain(serverOsh, domainName)
            servers = domainDescriptor.getServers()
            for server in servers:
                if server.getName() == serverOsh.getAttributeValue('name'):
                    serverFullName = jee.ServerTopologyBuilder(
                    )._composeFullName(server)
                    serverOsh.setAttribute('j2eeserver_fullname',
                                           serverFullName)
                    break