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() 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