Source code for insights.combiners.modinfo

"""
Combiners for the parsers which parse the output of ``modinfo <module_name>``
=============================================================================

ModInfo
-------
The ModInfo combiner gathers all the ModInfoEach parsers into a dictionary
indexed by the module name.

ModulesInfo
-----------
The ModulesInfo combines the collected modules info from the result of
``KernelModulesInfo``.
"""
from insights.core.exceptions import SkipComponent
from insights.core.plugins import combiner
from insights.parsers.modinfo import (KernelModulesInfo, ModInfoEach, ModInfoAll)
from insights.util import deprecated


[docs]@combiner([ModInfoAll, ModInfoEach]) class ModInfo(dict): """ .. warning:: This combiner is deprecated, please use :py:class:`insights.combiners.modinfo.ModulesInfo` instead. Combiner for accessing all the modinfo outputs. Examples: >>> type(modinfo_obj) <class 'insights.combiners.modinfo.ModInfo'> >>> type(modinfo_obj['i40e']) <class 'insights.parsers.modinfo.ModInfoEach'> >>> modinfo_obj['i40e'].module_name 'i40e' >>> modinfo_obj['i40e'].module_name 'i40e' >>> modinfo_obj['i40e']['retpoline'] 'Y' >>> modinfo_obj['i40e'].module_version '2.3.2-k' >>> modinfo_obj['i40e'].module_path '/lib/modules/3.10.0-993.el7.x86_64/kernel/drivers/net/ethernet/intel/i40e/i40e.ko.xz' >>> "i40e" in modinfo_obj.retpoline_y True >>> "bnx2x" in modinfo_obj.retpoline_y False >>> "bnx2x" in modinfo_obj.retpoline_n True Raises: SkipComponent: When content is empty. Attributes: retpoline_y (set): A set of names of the modules with the attribute "retpoline: Y". retpoline_n (set): A set of names of the modules with the attribute "retpoline: N". """ def __init__(self, mi_all, mi_each): deprecated( ModInfo, "Please use the :class:`insights.parsers.modinfo.KernelModulesInfo` instead.", "3.1.25" ) self.retpoline_y = set() self.retpoline_n = set() if mi_all: self.update(mi_all) self.retpoline_y = mi_all.retpoline_y self.retpoline_n = mi_all.retpoline_n else: for m in mi_each: name = m.module_name self[name] = m self.retpoline_y.add(name) if m.get('retpoline') == 'Y' else None self.retpoline_n.add(name) if m.get('retpoline') == 'N' else None if len(self) == 0: raise SkipComponent("No Parsed Contents") @property def data(self): """ (dict): Dict with the module name as the key and the module details as the value. """ return self
[docs]@combiner([KernelModulesInfo]) class ModulesInfo(dict): """ Combiner to combine the result of KernelModulesInfo which supports filter and the parsers which only support one single module. It refers ``KernelModulesInfo`` first. Examples: >>> type(modules_obj) <class 'insights.combiners.modinfo.ModulesInfo'> >>> 'i40e' in modules_obj True >>> 'bnx2x' in modules_obj.retpoline_y False Raises: SkipComponent: When content is empty. Attributes: retpoline_y (set): A set of names of the modules with the attribute "retpoline: Y". retpoline_n (set): A set of names of the modules with the attribute "retpoline: N". """ def __init__(self, filtered_modules_info): self.retpoline_y = set() self.retpoline_n = set() if filtered_modules_info: self.update(filtered_modules_info) self.retpoline_n = filtered_modules_info.retpoline_n self.retpoline_y = filtered_modules_info.retpoline_y if not self: raise SkipComponent