Source code for insights.specs.datasources.httpd

Custom datasources related to ``httpd``
import json

from import Ps
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
from insights.parsers.mount import ProcMounts
from insights.specs.datasources import get_running_commands

[docs]@datasource(Ps, HostContext) def httpd_cmds(broker): """ Function to search the output of ``ps auxcww`` to find all running Apache webserver processes and extract the binary path. Returns: list: List of the binary paths to each running process """ cmds = get_running_commands(broker[Ps], broker[HostContext], ['httpd', ]) if cmds: return cmds raise SkipComponent
@datasource(ProcMounts, HostContext) def httpd_on_nfs(broker): """ Function to get the count of httpd opened file on nfs v4 Returns: str: JSON string with keys: "httpd_ids", "nfs_mounts", "open_nfs_files" """ mnt = broker[ProcMounts] mps ='nfs4') # get nfs 4.0 mount points nfs_mounts = [m.mount_point for m in mps if 'vers' in m.mount_options and m.mount_options.vers.startswith("4")] if nfs_mounts: # get all httpd ps httpd_pids = broker[HostContext].shell_out("pgrep httpd") if httpd_pids: open_nfs_files = 0 lsof_cmds = ["lsof -p {0}".format(pid) for pid in httpd_pids if pid] # maybe there are thousands open files for cmd in lsof_cmds: for line in broker[HostContext].shell_out(cmd): items = line.split() if len(items) > 8 and items[8].startswith(tuple(nfs_mounts)): open_nfs_files += 1 result_dict = {"http_ids": httpd_pids, "nfs_mounts": nfs_mounts, "open_nfs_files": open_nfs_files} relative_path = 'insights_commands/httpd_open_nfsV4_files' return DatasourceProvider(content=json.dumps(result_dict), relative_path=relative_path) raise SkipComponent