Source code for insights.parsers.db2

"""
db2 - db2 database information
==============================
Parsers included in this module are:

Db2ls - command ``db2ls -a -c``
-------------------------------

Db2DatabaseConfiguration - Command ``/usr/sbin/runuser -l  <user name>  -c 'db2 get database configuration for %s'``
--------------------------------------------------------------------------------------------------------------------

Db2DatabaseManager - Command ``/usr/sbin/runuser -l  <user name>  -c 'db2 get dbm cfg'``
----------------------------------------------------------------------------------------
"""

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


[docs] @parser(Specs.db2ls_a_c) class Db2ls(CommandParser, list): """ Parse the output of `db2ls -a -c` into a list of dictionaries. Typical output of this command:: #PATH:VRMF:FIXPACK:SPECIAL:INSTALLTIME:INSTALLERUID /opt/ibm/db2/V11.5:11.5.6.0:0 ::Fri Jan 14 20:20:07 2022 CST :0 /opt/ibm/db2/V11.5_01:11.5.7.0:0 ::Fri Feb 11 10:34:51 2022 CST :0 Examples: >>> type(db2ls) <class 'insights.parsers.db2.Db2ls'> >>> len(db2ls) 2 >>> db2ls[0]['PATH'] '/opt/ibm/db2/V11.5' >>> db2ls[1]['PATH'] '/opt/ibm/db2/V11.5_01' >>> db2ls[1]['VRMF'] '11.5.7.0' >>> db2ls[1]['INSTALLERUID'] '0' """
[docs] def parse_content(self, content): if not content: raise SkipComponent("Empty.") keys = [] for line in content: if not keys and line.startswith('#PATH'): keys = [i.strip('#') for i in line.split(':')] continue line_splits = [i.strip() for i in line.split(':', 4)] line_splits.extend([i.strip(': ') for i in line_splits.pop(-1).rsplit(':', 1)]) self.append(dict(zip(keys, line_splits))) if len(self) == 0: raise SkipComponent('Nothing to parse.')
[docs] @parser(Specs.db2_database_configuration) class Db2DatabaseConfiguration(CommandParser, dict): """ Parse the output of the ``/usr/sbin/runuser -l <user name> -c 'db2 get database configuration for %s'`` command. Attributes: default (dict): the database configuration details Sample Input:: Database Configuration for Database TESTD1 Database configuration release level = 0x1500 Database release level = 0x1500 Update to database level pending = NO (0x0) Database territory = US Database code page = 1208 Examples: >>> db2databaseconfiguration["Database configuration release level"] '0x1500' >>> db2databaseconfiguration["user"] 'dbp' """
[docs] def parse_content(self, content): if not content: raise SkipComponent("The result is empty") result = {} for line in content: if "=" in line: key, value = line.split("=") result[key.strip()] = value.strip() if not result: raise SkipComponent("The format is incorrect") result["user"] = self.file_path.split("_")[3].strip() result["db_name"] = self.file_path.split("_")[-1].strip() self.update(result)
[docs] @parser(Specs.db2_database_manager) class Db2DatabaseManager(CommandParser, dict): """ Parse the output of the ``/usr/sbin/runuser -l <user name> -c 'db2 get dbm cfg'`` command. Attributes: default (dict): the database management details Sample Input:: Database Manager Configuration Node type = Enterprise Server Edition with local and remote clients Database manager configuration release level = 0x1500 CPU speed (millisec/instruction) (CPUSPEED) = 3.306409e-07 Communications bandwidth (MB/sec) (COMM_BANDWIDTH) = 1.000000e+02 Max number of concurrently active databases (NUMDB) = 32 Federated Database System Support (FEDERATED) = NO Examples: >>> db2databasemanager["Max number of concurrently active databases (NUMDB)"] '32' >>> db2databasemanager["user"] 'dbp' """
[docs] def parse_content(self, content): if not content: raise SkipComponent("The result is empty") result = {} for line in content: if "=" in line: key, value = line.split("=") result[key.strip()] = value.strip() if not result: raise SkipComponent("The format is incorrect") result["user"] = self.file_path.split("_")[3] self.update(result)