sos/0039-Remove-profile-support.patch
Bryn M. Reeves 5261563507 Update sos to 3.1
Update sos to the 3.1 upstream release and add post-release patches
from the development tree.
2014-04-01 12:25:00 +01:00

245 lines
9.3 KiB
Diff

From 4553f0942c00b47342deea7fc47bb9822484a65e Mon Sep 17 00:00:00 2001
From: "Bryn M. Reeves" <bmr@redhat.com>
Date: Tue, 25 Mar 2014 17:28:31 +0000
Subject: [PATCH 39/61] Remove --profile support
The handrolled profile logging support in sos hasn't been widely
used in a long time and is a problem better solved with external
profiling and coverage tools.
Rip out all the support and documentation. This shortens and
simplifies numerous Plugin class methods.
Fixes Issue #244.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
man/en/sosreport.1 | 5 +----
sos/plugins/__init__.py | 30 ------------------------------
sos/sosreport.py | 35 +----------------------------------
tests/plugin_tests.py | 4 +---
4 files changed, 3 insertions(+), 71 deletions(-)
diff --git a/man/en/sosreport.1 b/man/en/sosreport.1
index c800576..e189433 100644
--- a/man/en/sosreport.1
+++ b/man/en/sosreport.1
@@ -11,7 +11,7 @@ sosreport \- Collect and package diagnostic and support data
[--report] [--config-file conf] [--batch]\fR
[--build] [--name name] [--ticket-number number]
[--debug] [--tmp-dir directory]\fR
- [--profile] [--help]\fR
+ [--help]\fR
.SH DESCRIPTION
\fBsosreport\fR generates a compressed tar archive of diagnostic
information from the running system. The archive may be stored
@@ -84,9 +84,6 @@ archive as a temporary file or directory tree.
Enable interactive debugging using the python debugger. Exceptions in
sos or plug-in code will cause a trap to the pdb shell.
.TP
-.B \--profile
-Enable profiler logging.
-.TP
.B \--help
Display usage message.
.SH MAINTAINER
diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py
index efb6950..cf2a710 100644
--- a/sos/plugins/__init__.py
+++ b/sos/plugins/__init__.py
@@ -137,7 +137,6 @@ class Plugin(object):
self.collect_cmds = []
self.soslog = self.commons['soslog'] if 'soslog' in self.commons else logging.getLogger('sos')
- self.proflog = self.commons['proflog'] if 'proflog' in self.commons else logging.getLogger('sosprofile')
# get the option list into a dictionary
for opt in self.option_list:
@@ -171,9 +170,6 @@ class Plugin(object):
This function returns the number of replacements made.
'''
- if self.commons['cmdlineopts'].profiler:
- start_time = time()
-
globstr = '*' + cmd + '*'
self.soslog.debug("substituting '%s' for '%s' in commands matching %s"
% (subst, regexp, globstr))
@@ -200,11 +196,6 @@ class Plugin(object):
msg = 'regex substitution failed for %s in plugin %s with: "%s"'
self.soslog.error(msg % (called['exe'], self.name(), e))
replacements = None
-
- if self.commons['cmdlineopts'].profiler:
- time_passed = time() - start_time
- self.proflog.debug("subst: %-75s time: %f"
- % (globstr, time_passed))
return replacements
def do_file_sub(self, srcpath, regexp, subst):
@@ -215,9 +206,6 @@ class Plugin(object):
This function returns the number of replacements made.
'''
- if self.commons['cmdlineopts'].profiler:
- start_time = time()
-
try:
path = self._get_dest_for_srcpath(srcpath)
self.soslog.debug("substituting '%s' for '%s' in %s"
@@ -234,10 +222,6 @@ class Plugin(object):
msg = 'regex substitution failed for %s in plugin %s with: "%s"'
self.soslog.error(msg % (path, self.name(), e))
replacements = 0
- if self.commons['cmdlineopts'].profiler:
- time_passed = time() - start_time
- self.proflog.debug("subst : %-75s time: %f"
- % (srcpath, time_passed))
return replacements
def do_regex_find_all(self, regex, fname):
@@ -314,10 +298,6 @@ class Plugin(object):
/etc/my_file.conf the file would end up at
/configurations/my_file.conf.
'''
-
- if self.commons['cmdlineopts'].profiler:
- start_time = time()
-
if self._path_in_path_list(srcpath, self.forbidden_paths):
self.soslog.debug("%s is in the forbidden path list" % srcpath)
return ''
@@ -358,9 +338,6 @@ class Plugin(object):
'dstpath':dest,
'symlink':"no"})
- if self.commons['cmdlineopts'].profiler:
- time_passed = time() - start_time
- self.proflog.debug("copied: %-75s time: %f" % (srcpath, time_passed))
except Exception as e:
self.soslog.error("Unable to copy %s to %s" % (srcpath, dest))
self.soslog.error(traceback.format_exc())
@@ -560,9 +537,6 @@ class Plugin(object):
"""Execute a command and save the output to a file for inclusion in the
report.
"""
- if self.commons['cmdlineopts'].profiler:
- start_time = time()
-
# pylint: disable-msg = W0612
status, shout, runtime = self.get_command_output(exe, timeout=timeout)
if (status == 127):
@@ -582,10 +556,6 @@ class Plugin(object):
self.executed_commands.append({'exe': exe, 'file':outfn_strip}) # save in our list
self.commons['xmlreport'].add_command(cmdline=exe,exitcode=status,f_stdout=outfn_strip,runtime=runtime)
- if self.commons['cmdlineopts'].profiler:
- time_passed = time() - start_time
- self.proflog.debug("output: %-75s time: %f" % (exe, time_passed))
-
return os.path.join(self.archive.get_archive_path(), outfn)
# For adding output
diff --git a/sos/sosreport.py b/sos/sosreport.py
index 13a46bf..afa5371 100644
--- a/sos/sosreport.py
+++ b/sos/sosreport.py
@@ -220,7 +220,6 @@ class SoSOptions(object):
_config_file = ""
_tmp_dir = ""
_report = True
- _profiler = False
_compression_type = 'auto'
_options = None
@@ -431,19 +430,6 @@ class SoSOptions(object):
self._report = value
@property
- def profiler(self):
- if self._options != None:
- return self._options.profiler
- return self._profiler
-
- @profiler.setter
- def profiler(self, value):
- self._check_options_initialized()
- if not isinstance(value, bool):
- raise TypeError("SoSOptions.profiler expects a boolean")
- self._profiler = value
-
- @property
def compression_type(self):
if self._options != None:
return self._options.compression_type
@@ -508,9 +494,6 @@ class SoSOptions(object):
parser.add_option("--no-report", action="store_true",
dest="report",
help="Disable HTML/XML reporting", default=False)
- parser.add_option("--profile", action="store_true",
- dest="profiler",
- help="turn on profiling", default=False)
parser.add_option("-z", "--compression-type", dest="compression_type",
help="compression technology to use [auto, zip, gzip, bzip2, xz] (default=auto)",
default="auto")
@@ -563,7 +546,6 @@ class SoSReport(object):
'rptdir': self.rptdir,
'tmpdir': self.tmpdir,
'soslog': self.soslog,
- 'proflog' : self.proflog,
'policy': self.policy,
'verbosity': self.opts.verbosity,
'xmlreport': self.xml_report,
@@ -680,32 +662,17 @@ class SoSReport(object):
ui_console.setLevel(logging.INFO)
self.ui_log.addHandler(ui_console)
- # profile logging
- if self.opts.profiler:
- self.proflog = logging.getLogger('sosprofile')
- self.proflog.setLevel(logging.DEBUG)
- self.sos_profile_log_file = self.get_temp_file()
- plog = logging.FileHandler(self.sos_profile_log_file.name)
- plog.setFormatter(logging.Formatter('%(message)s'))
- plog.setLevel(logging.DEBUG)
- self.proflog.addHandler(plog)
- else:
- self.proflog = logging.getLogger('sosprofile')
- self.proflog.setLevel(logging.FATAL)
-
def _finish_logging(self):
logging.shutdown()
# the logging module seems to persist in the jython/jboss/eap world
# so the handlers need to be removed
- for logger in [logging.getLogger(x) for x in ('sos', 'sosprofile', 'sos_ui')]:
+ for logger in [logging.getLogger(x) for x in ('sos', 'sos_ui')]:
for h in logger.handlers:
logger.removeHandler(h)
if getattr(self, "sos_log_file", None):
self.archive.add_file(self.sos_log_file.name, dest=os.path.join('sos_logs', 'sos.log'))
- if getattr(self, "sos_profile_log_file", None):
- self.archive.add_file(self.sos_profile_log_file.name, dest=os.path.join('sos_logs', 'profile.log'))
if getattr(self, "sos_ui_log_file", None):
self.archive.add_file(self.sos_ui_log_file.name, dest=os.path.join('sos_logs', 'ui.log'))
diff --git a/tests/plugin_tests.py b/tests/plugin_tests.py
index 31ffae4..0f8ef5d 100644
--- a/tests/plugin_tests.py
+++ b/tests/plugin_tests.py
@@ -89,9 +89,7 @@ class EnablerPlugin(Plugin):
class MockOptions(object):
-
- profiler = False
-
+ pass
class PluginToolTests(unittest.TestCase):
--
1.7.11.7