Sophie

Sophie

distrib > Fedora > 19 > x86_64 > by-pkgid > 2183d0e55a8d454b8164909066cf1904 > files > 39

sos-3.1-1.fc19.src.rpm

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/72] 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.9.3