Source code for insights.parsers.saphostexec

"""
saphostexec - Commands
======================

Shared parsers for parsing output of the ``saphostexec [option]`` commands.

SAPHostExecStatus- command ``saphostexec -status``
--------------------------------------------------

SAPHostExecVersion - command ``saphostexec -version``
-----------------------------------------------------
"""
from .. import parser, CommandParser, LegacyItemAccess
from insights.parsers import SkipException
from insights.specs import Specs
from collections import namedtuple


[docs]@parser(Specs.saphostexec_status) class SAPHostExecStatus(CommandParser, LegacyItemAccess): """ Class for parsing the output of `saphostexec -status` command. Typical output of the command is:: saphostexec running (pid = 9159) sapstartsrv running (pid = 9163) saposcol running (pid = 9323) Attributes: is_running (bool): The SAP Host Agent is running or not. services (list): List of services. Examples: >>> type(sha_status) <class 'insights.parsers.saphostexec.SAPHostExecStatus'> >>> sha_status.is_running True >>> sha_status.services['saphostexec'] '9159' """
[docs] def parse_content(self, content): self.is_running = False self.services = self.data = {} if 'saphostexec stopped' not in content[0]: for line in content: line_splits = line.split() self.services[line_splits[0]] = '' if len(line_splits) == 5 and line_splits[1] == 'running': self.services[line_splits[0]] = line_splits[-1][:-1] else: raise SkipException("Incorrect status: '{0}'".format(line)) self.is_running = self.services and all(p for p in self.services.values())
[docs]@parser(Specs.saphostexec_version) class SAPHostExecVersion(CommandParser, LegacyItemAccess): """ Class for parsing the output of `saphostexec -version` command. Typical output of the command is:: *************************** Component ******************** /usr/sap/hostctrl/exe/saphostexec: 721, patch 1011, changelist 1814854, linuxx86_64, opt (Jan 13 2018, 04:43:56) /usr/sap/hostctrl/exe/sapstartsrv: 721, patch 1011, changelist 1814854, linuxx86_64, opt (Jan 13 2018, 04:43:56) /usr/sap/hostctrl/exe/saphostctrl: 721, patch 1011, changelist 1814854, linuxx86_64, opt (Jan 13 2018, 04:43:56) /usr/sap/hostctrl/exe/xml71d.so: 721, patch 1011, changelist 1814854, linuxx86_64, opt (Jan 13 2018, 01:12:10) ********************************************************** -------------------- SAPHOSTAGENT information -------------------- kernel release 721 kernel make variant 721_REL compiled on Linux GNU SLES-9 x86_64 cc4.1.2 for linuxx86_64 compiled for 64 BIT compilation mode Non-Unicode compile time Jan 13 2018 04:40:52 patch number 33 latest change number 1814854 --------------------- supported environment --------------------- operating system Linux 2.6 Linux 3 Linux Attributes: components (dict): Dict of :py:class:`SAPComponent` instances. Examples: >>> type(sha_version) <class 'insights.parsers.saphostexec.SAPHostExecVersion'> >>> sha_version.components['saphostexec'].version '721' >>> sha_version.components['saphostexec'].patch '1011' """ SAPComponent = namedtuple("SAPComponent", field_names=["version", "patch", "changelist"]) """namedtuple: Type for storing the SAP components"""
[docs] def parse_content(self, content): self.components = self.data = {} for line in content: # Only process component lines for now if not line.startswith('/usr/sap/hostctrl/exe/'): continue key, val = line.split(':', 1) key = key.split('/')[-1] ver, pch, chl, _ = [s.split()[-1].strip() for s in val.split(', ', 3)] self.components[key] = self.SAPComponent(ver, pch, chl)