Source code for insights.specs.datasources.lpstat

"""
Custom datasources for lpstat information
"""
from insights.core.context import HostContext
from insights.core.exceptions import SkipComponent
from insights.core.plugins import datasource
from insights.core.spec_factory import DatasourceProvider, simple_command
from insights.specs import Specs


[docs] class LocalSpecs(Specs): """ Local specs used only by lpstat datasources """ lpstat_v = simple_command("/usr/bin/lpstat -v") """ Returns the output of command ``/usr/bin/lpstat -v`` """ lpstat_o = simple_command("/usr/bin/lpstat -o") """ Returns the output of command ``/usr/bin/lpstat -o`` """
@datasource(LocalSpecs.lpstat_v, HostContext) def lpstat_protocol_printers_info(broker): """ This datasource provides the not-sensitive information collected from ``/usr/bin/lpstat -v``. Typical content of ``/usr/bin/lpstat -v`` file is:: "device for test_printer1: ipp://cups.test.com/printers/test_printer1" Returns: DatasourceProvider: Returns the collected content containing non-sensitive information Raises: SkipComponent: When the filter/path does not exist or any exception occurs. """ try: content = broker[LocalSpecs.lpstat_v].content result = [] for line in content: if "device for " in line: "Remove printer address information" result.append(line.split("://", 1)[0] if '://' in line else line) if result: return DatasourceProvider(content="\n".join(result), relative_path='insights_commands/lpstat_-v') except Exception as e: raise SkipComponent("Unexpected exception:{e}".format(e=str(e))) raise SkipComponent @datasource(LocalSpecs.lpstat_o, HostContext) def lpstat_queued_jobs_count(broker): """ This datasource provides the count of all queued job. Typical content of ``/usr/bin/lpstat -o`` file is:: Cups-PDF-1802 root 265443328 Tue 05 Sep 2023 02:21:19 PM CST Cups-PDF-1803 root 265443328 Tue 05 Sep 2023 02:21:21 PM CST Cups-PDF-1804 root 265443328 Tue 05 Sep 2023 02:21:22 PM CST Sample data returned:: 3 Returns: DatasourceProvider: Returns the collected content containing the count of all queued jobs. Raises: SkipComponent: When there is not any content. """ content = broker[LocalSpecs.lpstat_o].content if content: cnt = 0 bad_lines = ["no such file or directory", "not a directory", "command not found", "no module named", "no files found for", "missing dependencies:", "Bad file descriptor"] for line in content: if not any(key in line for key in bad_lines): cnt += 1 if cnt: return DatasourceProvider(content="{0}".format(cnt), relative_path='insights_commands/lpstat_-o_jobs_count') raise SkipComponent