Source code for insights.parsers.sapcontrol

"""
sapcontrol - Commands ``sapcontrol``
====================================
Shared parsers for parsing output of the ``sapcontrol [option]`` commands.

SAPControlSystemUpdateList- command ``sapcontrol -nr <NR> -function GetSystemUpdateList``
-----------------------------------------------------------------------------------------
"""
from insights.core import CommandParser
from insights.core.exceptions import ParseException, SkipComponent
from insights.core.plugins import parser
from insights.parsers import parse_delimited_table
from insights.specs import Specs


[docs] @parser(Specs.sapcontrol_getsystemupdatelist) class SAPControlSystemUpdateList(CommandParser): """ This class provides processing for the output of the ``sapcontrol -nr <NR> -function GetSystemUpdateList`` command on SAP system. Sample output of the command:: 29.01.2019 01:20:36 GetSystemUpdateList OK hostname, instanceNr, status, starttime, endtime, dispstatus vm37-39, 00, Running, 29.01.2019 00:00:02, 29.01.2019 01:10:11, GREEN vm37-39, 02, Running, 29.01.2019 00:00:05, 29.01.2019 01:11:11, GREEN vm37-39, 03, Running, 29.01.2019 00:00:05, 29.01.2019 01:12:36, GREEN Examples: >>> rks.is_running True >>> rks.is_green True >>> rks.data[-1]['status'] == 'Running' True >>> rks.data[-1]['dispstatus'] == 'GREEN' True >>> rks.data[0]['instanceNr'] == '00' True Attributes: is_running (Boolean): The status of GetSystemUpdateList is_green (Boolean): The display status of GetSystemUpdateList data (list): List of dicts where keys are the lead name of header line and values are the string value. """
[docs] def parse_content(self, content): if not content: raise SkipComponent("Empty output.") header = "hostname, instanceNr, status, starttime, endtime, dispstatus" if len(content) <= 3 or header not in content: raise ParseException("Incorrect content: '{0}'".format(content[-1])) header_sp = [i.strip() for i in header.split(',')] self.data = parse_delimited_table( content, delim=',', max_splits=5, strip=True, heading_ignore=header_sp) if not self.data: raise SkipComponent("Empty or useless output.") self.is_running = all(l['status'] == 'Running' for l in self.data) self.is_green = all(l['dispstatus'] == 'GREEN' for l in self.data)