Use lstat() in do_copy_path and check for char and block devices

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[libvirt] add missing os import

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] handle lstat exceptions in do_copy_path()

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] python3 exception lists must be tuples

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[megacli] new plugin for LSI MegaRAID based adapters

The MegaCLI utility is a proprietary utility provided by LSI which can
perform reporting and management functions for MegaRAID SAS|SCSI
adapters.  If the MegaCLI is detected, the plugin will collect basic
information such as adapter status, firmware rev, battery status, and
raid config.

Signed-off-by: Jon Magrini <jmagrini@redhat.com>
[plugin] log directory contents added via Plugin.copy_dir()

We're currently very verbose about the copyspecs and path lists
we process during setup() and collect() but right now we do not
log the same level of information for artefacts that are included
in the archive as a consequence of Plugin.do_copy_path() calling
copy_dir() on the result of copyspec expansion.

Log these explicitly and promote logging of copyspec expansion
to match that used for command logging.

This makes us very chatty at high verbosity but allows a clean
view of exactly what the tree walking code is doing (which my
sanity desperately needs).

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[archive, plugin] handle special file system nodes

Historically sos has ignored all types of file system node that
are not regular files or directories. Add support for collecting
block, character, fifo and socket special nodes by creating
matching nodes in the archive and propagating permissions from
the host file system.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] add simple collect() profiling

Similar to commit fd68a0c; add support for outputing messages
indicating the time taken to call collect() for each plugin:

[...]
  [plugin:systemtap] collected plugin 'systemtap' in 16.8759040833
  [plugin:systemd] collected plugin 'systemd' in 19.5138418674
  [plugin:block] collected plugin 'block' in 40.066119194
  [plugin:yum] collected plugin 'yum' in 101.271748066

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] kill Plugin.option_enabled()

Has been deprecated for years. Kill it and replace the remaining
uses with Plugin.get_option().

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[global] clean up formatting and remove obsolete pylint pragmas

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[openshift] remove cgroups collection

The openshift plugin used an obsolete cgroups path ("/cgroups").
Since the cgroups plugin now collects full information on all
configured cgroups remove this from the openshift plugin.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] Use superclass __doc__ if not defined in derived class

Fixes #320.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[archive] make archive debug logging depend on --debug

This significantly reduces log noise at maximum verbosity. Users
needing the interactive debugger can either use less verbosity (-v)
or put up with the flood of messages.

Fixes #319.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] remove debug code from Plugin.get_description()

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] implement global --verify option

Introduce a mechanism to allow plugins selective access to global
command line options via the standard Plugin.get_option() method.

Use this to implement a global --verify that plugins can test to
determine whether or not to execute potentially costly verify
operations.

Related: #304.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[systemd] do not verify journal unless --verify is given

Related: #304.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[rpm] do not perform rpm -V unless --verify is given

Related: #304.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[openswan] document that 'ipsec verify' is not costly

Although it's a 'verification' this is just a simple configuration
test of the environment; it typically completes in <1s.

Related: #304.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] implement global --all-logs option

Implement a global '--all-logs' option that causes all active
plugins to attempt to collect all logs present regardles of
rotation or size limiting. This replaces the numerous per-plugin
'all_logs' options and avoids the need for clumsy command lines
like:

 -k audit.all_logs,cron.all_logs,logs.all_logs,pcp.all_logs,...

The audit, cron, cups, libvirt, logs, mysql, and pcp plugins have
been converted to use the new option.

Fixes #305.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[plugin] implement global --log-size option

Implement a global '--log-size' option that causes all plugins
implementing log size limiting (via add_copy_spec_limit()) to
apply the specified value as the size limit.

Convert the auditd, cups, logs, nscd, rabbitmq, squid, and
upstart plugins to use the new option.

Fixes #306.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>