Source code for insights.parsers.iris

"""
Iris - InterSystems
===================
Parsers included in this module are:

IrisList - Command ``/usr/bin/iris list``
=========================================

IrisCpf - Files ``iris.cpf``
============================

IrisMessages - Files ``messages.log``
=====================================
"""

from insights.core import CommandParser, IniConfigFile, LogFileOutput
from insights.core.exceptions import SkipComponent
from insights.core.plugins import parser
from insights.specs import Specs


[docs] @parser(Specs.iris_list) class IrisList(CommandParser, list): """ Parse the output of the ``/usr/bin/iris list`` command. Attributes: default (dict): the default instance Sample Input:: Configuration 'IRIS' (default) directory: /intersystems versionid: 2023.1.0.235.1com datadir: /intersystems conf file: iris.cpf (SuperServer port = 1972, WebServer = 52773) status: running, since Tue Jun 27 01:55:25 2023 state: ok product: InterSystems IRIS Examples: >>> iris_info[0]['status'] 'running, since Tue Jun 27 01:55:25 2023' >>> iris_info.is_running True >>> iris_info.default['status'] 'running, since Tue Jun 27 01:55:25 2023' """
[docs] def parse_content(self, content): self.default = {} item_instance = {} for line in content: if not line.strip(): continue if line.strip().startswith('Configuration'): instance_name = line.split()[1].strip('\'"') item_instance = {"instance_name": instance_name} if "(default)" in line: self.default = item_instance self.append(item_instance) elif ":" in line and item_instance: key, value = line.split(":", 1) item_instance[key.strip()] = value.strip() if len(self) == 0: raise SkipComponent("The result is empty")
@property def is_running(self): """Return True when the iris instance is running, and False when it is down""" return any(item.get('status', "").startswith('running') for item in self)
[docs] @parser(Specs.iris_cpf) class IrisCpf(IniConfigFile): """ Parse the content of "iris.cpf" file. Sample Input:: [ConfigFile] Product=IRIS Version=2023.1 [Databases] IRISSYS=/intersystems/mgr/ IRISLIB=/intersystems/mgr/irislib/ IRISTEMP=/intersystems/mgr/iristemp/ IRISLOCALDATA=/intersystems/mgr/irislocaldata/ IRISAUDIT=/intersystems/mgr/irisaudit/ ENSLIB=/intersystems/mgr/enslib/ USER=/intersystems/mgr/user/ [Namespaces] %SYS=IRISSYS USER=USER Examples: >>> "Namespaces" in iris_cpf True >>> iris_cpf.has_option('Databases', 'IRISSYS') True >>> iris_cpf.get("Databases", "IRISSYS") '/intersystems/mgr/' """ pass
[docs] @parser(Specs.iris_messages_log) class IrisMessages(LogFileOutput): """ Parse the content of "messages.log" file. Sample Input:: 06/26/23-08:02:17:828 (144145) 0 [Generic.Event] Allocated 495MB shared memory 06/26/23-08:02:17:828 (144145) 0 [Generic.Event] 32MB global buffers, 80MB routine buffers, 64MB journal buffers, 4MB buffer descriptors, 300MB heap, 5MB ECP, 9MB miscellaneous 06/26/23-08:02:17:831 (144145) 0 [Crypto.IntelSandyBridgeAESNI] Intel Sandy Bridge AES-NI instructions detected. 06/26/23-08:02:17:831 (144145) 0 [SIMD] SIMD optimization level: DEFAULT X86 06/26/23-08:02:17:903 (144145) 0 [WriteDaemon.UsingWIJFile] Using WIJ file: /intersystems/mgr/IRIS.WIJ 06/26/23-08:02:17:903 (144145) 0 [Generic.Event] No journaling info from prior system 06/26/23-08:02:18:110 (144145) 0 [Generic.Event] Startup of InterSystems IRIS [IRIS for UNIX (Red Hat Enterprise Linux 8 for x86-64) 2023.1 (Build 235.1) Fri Jun 2 2023 13:26:47 EDT] in ../bin/ with mgr: /intersystems/mgr with wij: /intersystems/mgr/IRIS.WIJ from: /intersystems/mgr/ OS=[Linux], version=[#1 SMP Fri Sep 30 11:45:06 EDT 2022], release=[4.18.0-425.3.1.el8.x86_64], machine=[x86_64] nodename=[rhel8]. numasyncwijbuf: 2, wdwrite_asyncio_max: 64, wijdirectio: on, synctype: 3 System Initialized. 06/26/23-08:02:18:136 (144182) 0 [WriteDaemon.Started] Write daemon started. [Namespaces] %SYS=IRISSYS USER=USER Examples: >>> len(list(iris_log.get('Generic.Event'))) 4 """ time_format = '%m/%d/%y-%H:%M:%S:%f'