aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sos/plugins/python.py63
1 files changed, 55 insertions, 8 deletions
diff --git a/sos/plugins/python.py b/sos/plugins/python.py
index e355f518..f2d16c1e 100644
--- a/sos/plugins/python.py
+++ b/sos/plugins/python.py
@@ -10,6 +10,9 @@
from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
import sos.policies
+import os
+import json
+import hashlib
class Python(Plugin, DebianPlugin, UbuntuPlugin):
@@ -21,25 +24,69 @@ class Python(Plugin, DebianPlugin, UbuntuPlugin):
packages = ('python',)
+ python_version = "python -V"
+
def setup(self):
- self.add_cmd_output("python -V", suggest_filename="python-version")
+ self.add_cmd_output(
+ self.python_version, suggest_filename="python-version"
+ )
self.add_cmd_output("pip list")
class RedHatPython(Python, RedHatPlugin):
packages = ('python', 'python36', 'python2', 'platform-python')
+ option_list = [
+ ('hashes', "gather hashes for all python files", 'slow',
+ False)]
def setup(self):
self.add_cmd_output(['python2 -V', 'python3 -V'])
- self.add_cmd_output("pip list")
if isinstance(self.policy, sos.policies.redhat.RHELPolicy) and \
self.policy.dist_version() > 7:
- self.add_cmd_output(
- '/usr/libexec/platform-python -V',
- suggest_filename='python-version'
- )
- else:
- self.add_cmd_output('python -V', suggest_filename='python-version')
+ self.python_version = "/usr/libexec/platform-python -V"
+ super(RedHatPython, self).setup()
+
+ if self.get_option('hashes'):
+ digests = {
+ 'digests': []
+ }
+
+ py_paths = [
+ '/usr/lib',
+ '/usr/lib64',
+ '/usr/local/lib',
+ '/usr/local/lib64'
+ ]
+
+ for py_path in py_paths:
+ for root, _, files in os.walk(py_path):
+ for file_ in files:
+ filepath = os.path.join(root, file_)
+ if filepath.endswith('.py'):
+ try:
+ with open(filepath, 'rb') as f:
+ digest = hashlib.sha256()
+ chunk = 1024
+ while True:
+ data = f.read(chunk)
+ if data:
+ digest.update(data)
+ else:
+ break
+
+ digest = digest.hexdigest()
+
+ digests['digests'].append({
+ 'filepath': filepath,
+ 'sha256': digest
+ })
+ except IOError:
+ self._log_error(
+ "Unable to read python file at %s" %
+ filepath
+ )
+
+ self.add_string_as_file(json.dumps(digests), 'digests.json')
# vim: set et ts=4 sw=4 :