[Kimchi-devel] [PATCH 2/2] model/debugreports.py

Aline Manera alinefm at linux.vnet.ibm.com
Mon Nov 23 18:04:14 UTC 2015



On 17/11/2015 11:54, mesmriti at linux.vnet.ibm.com wrote:
> From: Megha Smriti <mesmriti at linux.vnet.ibm.com>

Please, add an appropriated commit message explaining what this patch is 
for.

>
> ---
>   src/wok/plugins/gingerbase/model/debugreports.py | 103 ++++++++++++++---------
>   1 file changed, 61 insertions(+), 42 deletions(-)
>
> diff --git a/src/wok/plugins/gingerbase/model/debugreports.py b/src/wok/plugins/gingerbase/model/debugreports.py
> index 94ab7fe..9c325ef 100644
> --- a/src/wok/plugins/gingerbase/model/debugreports.py
> +++ b/src/wok/plugins/gingerbase/model/debugreports.py
> @@ -19,13 +19,13 @@
>   # License along with this library; if not, write to the Free Software
>   # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
>
> -import fnmatch
>   import glob
>   import logging
>   import os
>   import shutil
>   import subprocess
>   import time
> +import re
>
>   from wok.exception import InvalidParameter, NotFoundError, OperationFailed
>   from wok.exception import WokException
> @@ -75,50 +75,19 @@ class DebugReportsModel(object):
>           def log_error(e):
>               log = logging.getLogger('Model')
>               log.warning('Exception in generating debug file: %s', e)
> -
>           try:
> -            command = ['sosreport', '--batch', '--name=%s' % name]
> -            output, error, retcode = run_command(command)
> -
> -            if retcode != 0:
> -                raise OperationFailed("GGBDR0003E", {'name': name,
> -                                                     'err': retcode})
> -
> -            # SOSREPORT might create file in /tmp or /var/tmp
> -            # FIXME: The right way should be passing the tar.xz file directory
> -            # though the parameter '--tmp-dir', but it is failing in Fedora 20
> -            patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*']
> -            reports = []
> -            reportFile = None
> -            for p in patterns:
> -                reports = reports + [f for f in glob.glob(p % name)]
> -            for f in reports:
> -                if not fnmatch.fnmatch(f, '*.md5'):
> -                    reportFile = f
> -                    break
> -            # Some error in sosreport happened
> -            if reportFile is None:
> -                wok_log.error('Debug report file not found. See sosreport '
> -                              'output for detail:\n%s', output)
> -                fname = (patterns[0] % name).split('/')[-1]
> -                raise OperationFailed('GGBDR0004E', {'name': fname})
> -
> -            md5_report_file = reportFile + '.md5'
> -            report_file_extension = '.' + reportFile.split('.', 1)[1]
> +            # Sosreport collection
> +            sosreport_file = sosreport_collection(name)
> +            md5_report_file = sosreport_file + '.md5'

> +            report_file_extension = '.' + sosreport_file.split('.', 1)[1]
>               path = config.get_debugreports_path()
> -            target = os.path.join(path, name + report_file_extension)
> -            # Moving report
> -            msg = 'Moving debug report file "%s" to "%s"' % (reportFile,
> -                                                             target)
> -            wok_log.info(msg)
> -            shutil.move(reportFile, target)
> -            # Deleting md5
> -            msg = 'Deleting report md5 file: "%s"' % (md5_report_file)
> +            sosreport_target = os.path.join(path,
> +                                            name + report_file_extension)
> +            msg = 'Moving debug report file "%s" to "%s"' \
> +                  % (sosreport_file, sosreport_target)

Why do you need to move the file if you use the --tmp-dir to collect and 
save the sosreport in the right location?

>               wok_log.info(msg)
> -            with open(md5_report_file) as f:
> -                md5 = f.read().strip()
> -                wok_log.info('Md5 file content: "%s"', md5)
> -            os.remove(md5_report_file)

> +            shutil.move(sosreport_file, sosreport_target)

This is not needed anymore, right? As we are using the --tmp-dir from 
now on.

> +            delete_the_sosreport_md5_file(md5_report_file)
>               cb('OK', True)
>               return
>
> @@ -213,3 +182,53 @@ class DebugReportContentModel(object):
>
>       def lookup(self, name):
>           return self._debugreport.lookup(name)
> +
> +
> +def delete_the_sosreport_md5_file(md5_file):
> +    """
> +    Deleting md5 file and displaying the contents of the same.
> +    """
> +    msg = 'Deleting report md5 file: "%s"' % md5_file
> +    wok_log.info(msg)
> +    with open(md5_file) as f:
> +        md5 = f.read().strip()
> +        wok_log.info('Md5 file content: "%s"', md5)
> +    os.remove(md5_file)
> +
> +
> +def sosreport_collection(name):


> +    """
> +    Code for the collection of sosreport n the path
> +    /var/tmp as specified in the command.
> +    """

This comment is not up to date

> +    path_sosreport = '/var/tmp/'
> +    command = ['sosreport', '--batch', '--name=%s' % name,
> +               '--tmp-dir=%s' % path_sosreport]
> +    output, error, retcode = run_command(command)
> +    if retcode != 0:
> +        raise OperationFailed("GGBDR0003E", {'name': name,
> +                                             'err': retcode})
> +

> +    # SOSREPORT might create file in /tmp or /var/tmp
> +    # FIXME: The right way should be passing the tar.xz file directory
> +    # though the parameter '--tmp-dir', but it is failing in Fedora 20

You can remove this comment.

> +    sosreport_name = name.replace('_', '')

Do not change the user input without letting the user know about it.
As I said before, we should not allow user to enter underscore in the 
debug report name.

> +    sosreport_name_regex = '(\s+)(' + path_sosreport + \
> +                           ')(sosreport-' +\
> +                           sosreport_name + '-\d+.tar.xz)'
> +    sosreport_file = None
> +    output = output.splitlines()
> +    for line in output:
> +        if line:
> +            matched_name = re.match(sosreport_name_regex, line)
> +            if matched_name:
> +                path = matched_name.groups()[1]
> +                fname = matched_name.groups()[2]
> +                sosreport_file = path + fname
> +                break

You don't need that code anymore while using --tmp-dir

The file will be <tmp-dir>/sosreport-<name>.tar.gz

> +    # Some error in sosreport happened
> +    if sosreport_file is None:
> +        wok_log.error('Debug report file not found. See sosreport '
> +                      'output for detail:\n%s', output)
> +        raise OperationFailed('GGBDR0004E', {'name': name})
> +    return sosreport_file




More information about the Kimchi-devel mailing list