<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Aline,<br>
    <br>
    I was able to see Megha's comments inline in the mail she sent.
    Please check one more time.<br>
    <br>
    Regards<br>
    Chandra<br>
    <br>
    <div class="moz-cite-prefix">On 26/11/15 10:57 PM, Aline Manera
      wrote:<br>
    </div>
    <blockquote cite="mid:56574108.9040307@linux.vnet.ibm.com"
      type="cite">
      <meta content="text/html; charset=windows-1252"
        http-equiv="Content-Type">
      <br>
      Hi Megha,<br>
      <br>
      I am not sure if your email was truncated but I don't see your
      comments.<br>
      <br>
      <div class="moz-cite-prefix">On 25/11/2015 16:46, Megha Smriti
        wrote:<br>
      </div>
      <blockquote cite="mid:565601FC.4080609@linux.vnet.ibm.com"
        type="cite">
        <meta http-equiv="content-type" content="text/html;
          charset=windows-1252">
        <br>
        <div class="moz-forward-container"><br>
          <br>
          -------- Forwarded Message --------
          <table class="moz-email-headers-table" border="0"
            cellpadding="0" cellspacing="0">
            <tbody>
              <tr>
                <th align="RIGHT" nowrap="nowrap" valign="BASELINE">Subject:


                </th>
                <td>Re: [PATCH] Dbginfo report generation</td>
              </tr>
              <tr>
                <th align="RIGHT" nowrap="nowrap" valign="BASELINE">Date:

                </th>
                <td>Wed, 25 Nov 2015 11:27:20 +0530</td>
              </tr>
              <tr>
                <th align="RIGHT" nowrap="nowrap" valign="BASELINE">From:

                </th>
                <td>Megha Smriti <a moz-do-not-send="true"
                    class="moz-txt-link-rfc2396E"
                    href="mailto:mesmriti@linux.vnet.ibm.com">&lt;mesmriti@linux.vnet.ibm.com&gt;</a></td>
              </tr>
              <tr>
                <th align="RIGHT" nowrap="nowrap" valign="BASELINE">To:
                </th>
                <td>Aline Manera <a moz-do-not-send="true"
                    class="moz-txt-link-rfc2396E"
                    href="mailto:alinefm@linux.vnet.ibm.com">&lt;alinefm@linux.vnet.ibm.com&gt;</a></td>
              </tr>
            </tbody>
          </table>
          <br>
          <br>
          <meta content="text/html; charset=windows-1252"
            http-equiv="Content-Type">
          <div class="moz-text-flowed" style="font-family: -moz-fixed;
            font-size: 14px;" lang="x-western"> <br>
            Hi Aline,<br>
            <br>
              Please find my comments inline and few suggestions.<br>
            <br>
            Thanks &amp; Regards,<br>
            Megha Smriti<br>
            <br>
            On 17/11/2015 20:05, <a moz-do-not-send="true"
              class="moz-txt-link-abbreviated"
              href="mailto:mesmriti@linux.vnet.ibm.com">mesmriti@linux.vnet.ibm.com</a>
            wrote: <br>
            <blockquote type="cite" style="color: #000000;">From: root <a
                moz-do-not-send="true" class="moz-txt-link-rfc2396E"
                href="mailto:root@localhost.localdomain"><a class="moz-txt-link-rfc2396E" href="mailto:root@localhost.localdomain">&lt;root@localhost.localdomain&gt;</a></a>
              <br>
              <br>
              Signed-off-by: root <a moz-do-not-send="true"
                class="moz-txt-link-rfc2396E"
                href="mailto:root@localhost.localdomain">&lt;root@localhost.localdomain&gt;</a>
              <br>
              --- <br>
                src/wok/plugins/gingerbase/i18n.py               |   4
              +- <br>
                src/wok/plugins/gingerbase/model/debugreports.py | 212
              ++++++++++++++++++----- <br>
                2 files changed, 167 insertions(+), 49 deletions(-) <br>
              <br>
              diff --git a/src/wok/plugins/gingerbase/i18n.py
              b/src/wok/plugins/gingerbase/i18n.py <br>
              index af75c70..6ff783b 100644 <br>
              --- a/src/wok/plugins/gingerbase/i18n.py <br>
              +++ b/src/wok/plugins/gingerbase/i18n.py <br>
              @@ -36,7 +36,9 @@ messages = { <br>
                    "GGBDR0007E": _("Debug report name must be a string.
              Only letters, digits, underscore ('_') and " <br>
                                    "hyphen ('-') are allowed."), <br>
                    "GGBDR0008E": _("The debug report with specified
              name \"%(name)s\" already exists. Please use another
              one."), <br>
              - <br>
              +    "GGBDR0009E": _("Unable to create dbginfo report with
              %(retcode)s. Details: %(err)s"), <br>
              +    "GGBDR0010E": _("Unable to compress the final debug
              report tar file with %(retcode)s. Details: %(error)s"), <br>
              +    "GGBDR0011E": _("Unable to generate final debug
              report %(name)s. Details: %(err)s"), <br>
                    "GGBHOST0001E": _("Unable to shutdown host machine
              as there are running virtual machines"), <br>
                    "GGBHOST0002E": _("Unable to reboot host machine as
              there are running virtual machines"), <br>
                    "GGBHOST0003E": _("There may be virtual machines
              running on the host"), <br>
              diff --git
              a/src/wok/plugins/gingerbase/model/debugreports.py
              b/src/wok/plugins/gingerbase/model/debugreports.py <br>
              index 94ab7fe..927e173 100644 <br>
              --- a/src/wok/plugins/gingerbase/model/debugreports.py <br>
              +++ b/src/wok/plugins/gingerbase/model/debugreports.py <br>
              @@ -19,13 +19,14 @@ <br>
                # License along with this library; if not, write to the
              Free Software <br>
                # Foundation, Inc., 51 Franklin Street, Fifth Floor,
              Boston, MA  02110-1301 USA <br>
              <br>
              -import fnmatch <br>
                import glob <br>
                import logging <br>
                import os <br>
                import shutil <br>
                import subprocess <br>
                import time <br>
              +import platform <br>
              +import re <br>
              <br>
                from wok.exception import InvalidParameter,
              NotFoundError, OperationFailed <br>
                from wok.exception import WokException <br>
              @@ -71,54 +72,109 @@ class DebugReportsModel(object): <br>
                        raise OperationFailed("GGBDR0002E") <br>
              <br>
                    @staticmethod <br>
              -    def sosreport_generate(cb, name): <br>
            </blockquote>
            <br>
            <blockquote type="cite" style="color: #000000;">+    def
              debugreport_generate(cb, name): <br>
                        def log_error(e): <br>
                            log = logging.getLogger('Model') <br>
                            log.warning('Exception in generating debug
              file: %s', e) <br>
            </blockquote>
            <br>
            I know it is already there prior to your patch, but we
            should use wok_log to log the errors. <br>
            This special wrapper can be removed. <br>
            <br>
              I will incorporate this in my next patch<br>
            <br>
            <blockquote type="cite" style="color: #000000;">         
              try: <br>
              -            command = ['sosreport', '--batch',
              '--name=%s' % name] <br>
              -            output, error, retcode = run_command(command)
              <br>
              - <br>
              -            if retcode != 0: <br>
              -                raise OperationFailed("GGBDR0003E",
              {'name': name, <br>
              -                                                    
              'err': retcode}) <br>
              - <br>
              -            # SOSREPORT might create file in /tmp or
              /var/tmp <br>
              -            # FIXME: The right way should be passing the
              tar.xz file directory <br>
              -            # though the parameter '--tmp-dir', but it is
              failing in Fedora 20 <br>
              -            patterns = ['/tmp/sosreport-%s-*',
              '/var/tmp/sosreport-%s-*'] <br>
              -            reports = [] <br>
              -            reportFile = None <br>
              -            for p in patterns: <br>
              -                reports = reports + [f for f in
              glob.glob(p % name)] <br>
              -            for f in reports: <br>
              -                if not fnmatch.fnmatch(f, '*.md5'): <br>
              -                    reportFile = f <br>
              -                    break <br>
              -            # Some error in sosreport happened <br>
              -            if reportFile is None: <br>
              -                wok_log.error('Debug report file not
              found. See sosreport ' <br>
              -                              'output for detail:\n%s',
              output) <br>
              -                fname = (patterns[0] %
              name).split('/')[-1] <br>
              -                raise OperationFailed('GGBDR0004E',
              {'name': fname}) <br>
              - <br>
              -            md5_report_file = reportFile + '.md5' <br>
              -            report_file_extension = '.' +
              reportFile.split('.', 1)[1] <br>
              +            # Sosreport generation <br>
              +            sosreport_file = sosreport_collection(name) <br>
              +            md5_report_file = sosreport_file + '.md5' <br>
              +            report_file_extension = '.' +
              sosreport_file.split('.', 1)[1] <br>
            </blockquote>
            <br>
            <blockquote type="cite" style="color: #000000;">+           
              # If the platform is a system Z machine. <br>
              +            if platform.machine().startswith('s390'): <br>
            </blockquote>
            <br>
            The debugreport_generate() function will be called only if
            the system has the dbginfo command <br>
            So you don't need to rely in the system arch to decide on
            that. <br>
            So the 'if' statement above can be safely removed. <br>
            <br>
              Will take care of this in my next patch.<br>
            <br>
            <blockquote type="cite" style="color: #000000;">+               


              path_debugreport = '<i class="moz-txt-slash"><span
                  class="moz-txt-tag">/</span>var/tmp<span
                  class="moz-txt-tag">/</span></i>' <br>
              +                dbgreport_regex = '(\S+\s+)(' +
              path_debugreport + \ <br>
              +                                 
              'DBGINFO-[\d+]{4}-[\d+]{2}' \ <br>
              +                                 
              '-[\d+]{2}-[\d+]{2}-[\d+]{2}' \ <br>
              +                                 
              '-[\d+]{2}-\w+-\d+\S+)(\s+\S+)' <br>
              +                command = ['/usr/sbin/dbginfo.sh', '-d',
              path_debugreport] <br>
              +                output, error, retcode =
              run_command(command) <br>
              +                if retcode != 0: <br>
              +                    raise OperationFailed("GGBDR0009E", <br>
              +                                          {'retcode':
              retcode, 'err': error}) <br>
              +                output = output.splitlines() <br>
              +                dbginfo_report = None <br>
              +                for line in output: <br>
              +                    line = line.strip() <br>
              +                    n = re.match(dbgreport_regex, line) <br>
              +                    if n: <br>
              +                        dbginfo_report = n.groups()[1] <br>
              +                        break <br>
              +                final_tar_report_name = name +
              report_file_extension <br>
              +                if dbginfo_report is not None: <br>
              +                    sosreport_tar =
              sosreport_file.split('/', 3)[3] <br>
              +                    dbginfo_tar =
              dbginfo_report.split('/', 3)[3] <br>
              +                    msg = 'Compressing the sosreport and
              debug info files into ' \ <br>
              +                          'final report file' <br>
              +                    wok_log.info(msg) <br>
              +                    # Compressing the sosreport and
              dbginfo reports into one <br>
              +                    # tar file <br>
              +                    command = ['tar', '-cvzf', '%s' %
              final_tar_report_name, <br>
              +                               '-C', path_debugreport,
              dbginfo_tar, <br>
              +                               sosreport_tar] <br>
            </blockquote>
            <br>
            You can use final_tar_report_name with the right debug
            report location to avoid need to move the file after that. <br>
              <br>
              
            <style type="text/css">
body { margin: 0 0 0 0; padding:0 0 0 0 }
td,div { font-family:Arial;font-size:10pt;vertical-align:top }
/* Copyright IBM Corp. 2014  All Rights Reserved.                    */
body { margin: 0 0 0 0; padding:0 0 0 0; overflow:hidden; background-color:#fafafa; }
.grayBackground { background-color:#f6f6f6; }
.transcript { background-color:#d2d2d2;}
.messageBlock {padding-left:10px; padding-right:10px;padding-top:0}
.expansion{height:10px;width:100%;overflow:hidden;}
.expansionx{height:10px;overflow:hidden;}
.line{height:1px;background-color:#cccccc;overflow:hidden;}
.message { padding-left:0px; padding-right:65px;margin-left:0px; word-wrap:break-word; white-space:-moz-pre-wrap; _white-space:pre; white-space:pre-wrap;}
.messageCont { padding-left:20px; margin-left:95px; word-wrap:break-word; white-space:-moz-pre-wrap; _white-space:pre;white-space:pre-wrap;}
.other { font-size:11px;color:#1970b0;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; white-space:nowrap; }
.myself { font-size:11px;color:#222222;font-style:normal;font-weight:bold;font-style:normal;float:left; width:95px; white-space:nowrap; }
.otherCont { font-size:8px;text-align:right; color:#1970b0;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.myselfCont { font-size:8px;text-align:right; color:#222222;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.system { font-size:11px; word-wrap:break-word;color:#d13f08;font-style:normal;font-weight:normal; white-space:-moz-pre-wrap; _white-space:pre;white-space:pre-wrap; }
.showTimestamp { padding-left:20px;font-size:11px; float:right; color:#999999;font-style:normal;font-weight:normal; }
.other1 { font-size:11px; color:#ba006e;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont1 { font-size:8px;text-align:right; color:#ba006e;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other2 { font-size:11px; color:#007670;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont2 { font-size:8px;text-align:right; color:#007670;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other3 { font-size:11px; color:#3b0256;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont3 { font-size:8px;text-align:right; color:#3b0256;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other4 { font-size:11px; color:#00512b;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont4 { font-size:8px;text-align:right; color:#00512b;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other5 { font-size:11px; color:#a91024;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont5 { font-size:8px;text-align:right; color:#a91024;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other6 { font-size:11px; color:#b8471b;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont6 { font-size:8px;text-align:right; color:#b8471b;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other7 { font-size:11px; color:#7f1c7d;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont7 { font-size:8px;text-align:right; color:#7f1c7d;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.highlight { background-color:#bed6f8; }
.datestamp { padding-right:0px; font-size:11px; cursor:default;padding-top:1px;padding-bottom:1px; background-color:#a7a7a7; width:100%; float:left; text-align:right; color:#333333; font-weight:bold; font-style:italic; }
#chatAlert { float:left; border-bottom:1px solid #E8D091; padding:6px; width:100%; color:#A5754C; }
#chatAlertImage { float:left; }
#chatAlertText { float:left; margin-left:6px; margin-right:10px;}
#chatAlertClose { float:right; margin-right:10px; padding-right:6px; margin-top:0px; }
#chatAlertText a { color:#A5754C; }
#chatAlertText a:hover { color:#A5754C; text-decoration:none; }

.tsDisplay { display:block }.dsDisplay { display:none }</style>
            <table>
            </table>
            <span class="left" style="font-size: 8pt; color: rgb(0, 0,
              0);"><span style="font-size: 10pt; font-weight: normal;
                font-style: normal;"> Instead of the direct location
                compressing it would be good to do in var/tmp</span></span>
            and then moving it to target directory <br>
             rather trying to do any operation on the target directory.
            In <span class="left" style="font-size: 8pt; color: rgb(0,
              0, 0);"><span style="font-size: 10pt; font-weight: normal;
                font-style: normal;">some cases if developer</span></span>
            <style type="text/css">
body { margin: 0 0 0 0; padding:0 0 0 0 }
td,div { font-family:Arial;font-size:10pt;vertical-align:top }
/* Copyright IBM Corp. 2014  All Rights Reserved.                    */
body { margin: 0 0 0 0; padding:0 0 0 0; overflow:hidden; background-color:#fafafa; }
.grayBackground { background-color:#f6f6f6; }
.transcript { background-color:#d2d2d2;}
.messageBlock {padding-left:10px; padding-right:10px;padding-top:0}
.expansion{height:10px;width:100%;overflow:hidden;}
.expansionx{height:10px;overflow:hidden;}
.line{height:1px;background-color:#cccccc;overflow:hidden;}
.message { padding-left:0px; padding-right:65px;margin-left:0px; word-wrap:break-word; white-space:-moz-pre-wrap; _white-space:pre; white-space:pre-wrap;}
.messageCont { padding-left:20px; margin-left:95px; word-wrap:break-word; white-space:-moz-pre-wrap; _white-space:pre;white-space:pre-wrap;}
.other { font-size:11px;color:#1970b0;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; white-space:nowrap; }
.myself { font-size:11px;color:#222222;font-style:normal;font-weight:bold;font-style:normal;float:left; width:95px; white-space:nowrap; }
.otherCont { font-size:8px;text-align:right; color:#1970b0;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.myselfCont { font-size:8px;text-align:right; color:#222222;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.system { font-size:11px; word-wrap:break-word;color:#d13f08;font-style:normal;font-weight:normal; white-space:-moz-pre-wrap; _white-space:pre;white-space:pre-wrap; }
.showTimestamp { padding-left:20px;font-size:11px; float:right; color:#999999;font-style:normal;font-weight:normal; }
.other1 { font-size:11px; color:#ba006e;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont1 { font-size:8px;text-align:right; color:#ba006e;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other2 { font-size:11px; color:#007670;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont2 { font-size:8px;text-align:right; color:#007670;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other3 { font-size:11px; color:#3b0256;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont3 { font-size:8px;text-align:right; color:#3b0256;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other4 { font-size:11px; color:#00512b;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont4 { font-size:8px;text-align:right; color:#00512b;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other5 { font-size:11px; color:#a91024;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont5 { font-size:8px;text-align:right; color:#a91024;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other6 { font-size:11px; color:#b8471b;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont6 { font-size:8px;text-align:right; color:#b8471b;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.other7 { font-size:11px; color:#7f1c7d;vertical-align:top;font-weight:bold;font-style:normal;float:left; width:95px; }
.otherCont7 { font-size:8px;text-align:right; color:#7f1c7d;font-family:Arial,Lucida Grande;font-style:normal;vertical-align:top;font-weight:bold;float:left; width:95px; }
.highlight { background-color:#bed6f8; }
.datestamp { padding-right:0px; font-size:11px; cursor:default;padding-top:1px;padding-bottom:1px; background-color:#a7a7a7; width:100%; float:left; text-align:right; color:#333333; font-weight:bold; font-style:italic; }
#chatAlert { float:left; border-bottom:1px solid #E8D091; padding:6px; width:100%; color:#A5754C; }
#chatAlertImage { float:left; }
#chatAlertText { float:left; margin-left:6px; margin-right:10px;}
#chatAlertClose { float:right; margin-right:10px; padding-right:6px; margin-top:0px; }
#chatAlertText a { color:#A5754C; }
#chatAlertText a:hover { color:#A5754C; text-decoration:none; }

.tsDisplay { display:block }.dsDisplay { display:none }</style>
            <table>
            </table>
            <span class="left" style="font-size: 8pt; color: rgb(0, 0,
              0);"><span style="font-size: 10pt; font-weight: normal;
                font-style: normal;"> makes a mistake it is possible
                that previous reports might get deleted . Please correct
                me if any other suggestions.</span></span>
            <meta http-equiv="Content-Type" content="text/html;
              charset=windows-1252">
            <meta http-equiv="Content-Type" content="text/html;
              charset=windows-1252">
            <br>
            <br>
            <blockquote type="cite" style="color: #000000;">+                   



              output, error, retcode = run_command(command) <br>
              +                    if retcode != 0: <br>
              +                        raise
              OperationFailed("GGBDR0010E", <br>
              +                                              {'retcode':
              retcode, <br>
              +                                               'error':
              error}) <br>
            </blockquote>
            <br>
            <blockquote type="cite" style="color: #000000;">+                   



              path = config.get_debugreports_path() <br>
              +                    dbg_target = os.path.join(path, <br>
              +                                              name +
              report_file_extension) <br>
            </blockquote>
            <br>
            Use the dbg_target value while running the 'tar' command
            above. So we don't need to move the file. <br>
            <br>
             Same as my comment above.<br>
            <br>
            <blockquote type="cite" style="color: #000000;">+                   



              # Moving final tar file to debugreports path <br>
              +                    msg = 'Moving final debug  report
              file "%s" to "%s"' % \ <br>
              +                          (final_tar_report_name,
              dbg_target) <br>
              +                    wok_log.info(msg) <br>
              +                    shutil.move(final_tar_report_name,
              dbg_target) <br>
            </blockquote>
            <br>
            The above block can be removed. <br>
            <br>
            <blockquote type="cite" style="color: #000000;">+                   



              # Deleting the sosreport md5 file <br>
              +                   
              delete_the_sosreport_md5_file(md5_report_file) <br>
              +                    # Deleting the dbingo report file <br>
              +                    msg = 'Deleting the dbginfo file "%s"
              ' \ <br>
              +                          % dbginfo_report <br>
              +                    wok_log.info(msg) <br>
              +                    os.remove(dbginfo_report) <br>
              +                    # Deleting the sosreport file <br>
              +                    msg = 'Deleting the sosreport file
              "%s" ' % sosreport_file <br>
              +                    wok_log.info(msg) <br>
              +                    os.remove(sosreport_file) <br>
              +                    wok_log.info('The debug report file
              has been moved') <br>
              +                    cb('OK', True) <br>
              +                    return <br>
              + <br>
              +        except WokException as e: <br>
              +            log_error(e) <br>
              +            raise <br>
              + <br>
              +        except OSError as e: <br>
              +            log_error(e) <br>
              +            raise <br>
              + <br>
              +        except Exception, e: <br>
              +            # No need to call cb to update the task
              status here. <br>
              +            # The task object will catch the exception
              raised here <br>
              +            # and update the task status there <br>
              +            log_error(e) <br>
              +            raise OperationFailed("GGBDR0011E", {'name':
              name, 'err': e}) <br>
              + <br>
              +    @staticmethod <br>
              +    def sosreport_generate(cb, name): <br>
            </blockquote>
            <br>
            <blockquote type="cite" style="color: #000000;">+        def
              log_error(e): <br>
              +            log = logging.getLogger('Model') <br>
              +            log.warning('Exception in generating debug
              file: %s', e) <br>
            </blockquote>
            <br>
            The same I commented before. We can use wok_log to log the
            errors. <br>
            <br>
              I will incorporate this in my next patch<br>
            <br>
            <blockquote type="cite" style="color: #000000;">+       
              try: <br>
              +            # Sosreport collection <br>
              +            sosreport_file = sosreport_collection(name) <br>
              +            md5_report_file = sosreport_file + '.md5' <br>
              +            report_file_extension = '.' +
              sosreport_file.split('.', 1)[1] <br>
                            path = config.get_debugreports_path() <br>
              -            target = os.path.join(path, name +
              report_file_extension) <br>
              -            # Moving report <br>
              -            msg = 'Moving debug report file "%s" to "%s"'
              % (reportFile, <br>
              -                                                            


              target) <br>
              +            sosreport_target = os.path.join(path, <br>
              +                                            name +
              report_file_extension) <br>
              +            msg = 'Moving debug report file "%s" to "%s"'
              \ <br>
              +                  % (sosreport_file, sosreport_target) <br>
                            wok_log.info(msg) <br>
              -            shutil.move(reportFile, target) <br>
              -            # Deleting md5 <br>
              -            msg = 'Deleting report md5 file: "%s"' %
              (md5_report_file) <br>
              -            wok_log.info(msg) <br>
              -            with open(md5_report_file) as f: <br>
              -                md5 = f.read().strip() <br>
              -                wok_log.info('Md5 file content: "%s"',
              md5) <br>
              -            os.remove(md5_report_file) <br>
            </blockquote>
            <br>
            <blockquote type="cite" style="color: #000000;">+           
              shutil.move(sosreport_file, sosreport_target) <br>
            </blockquote>
            <br>
            As we are using --tmp-dir option, we know exactly where the
            sosreport will be saved. So we don't need to move the file
            around. <br>
               When the sosreport is generated md5 file is generated
            along with the sosreport. That is why we generate the
            sosreport <br>
                in a var/tmp dir and remove the md5 file and then move
            the final file to the target location to avoid doing all the
            operations <br>
               on the target directory.<br>
            <br>
            <blockquote type="cite" style="color: #000000;">+           
              delete_the_sosreport_md5_file(md5_report_file) <br>
                            cb('OK', True) <br>
                            return <br>
              <br>
              @@ -142,17 +198,27 @@ class DebugReportsModel(object): <br>
                        # Please add new possible debug report command
              here <br>
                        # and implement the report generating function <br>
                        # based on the new report command <br>
              -        report_tools = ({'cmd': 'sosreport --help', <br>
              +        report_tools = ({'cmd': '/usr/sbin/dbginfo.sh
              --help', <br>
              +                         'fn':
              DebugReportsModel.debugreport_generate}, <br>
              +                        {'cmd': 'sosreport --help', <br>
                                         'fn':
              DebugReportsModel.sosreport_generate},) <br>
              <br>
                        # check if the command can be found by shell one
              by one <br>
                        for helper_tool in report_tools: <br>
                            try: <br>
              -                retcode =
              subprocess.call(helper_tool['cmd'], shell=True, <br>
              -                                         
              stdout=subprocess.PIPE, <br>
              -                                         
              stderr=subprocess.PIPE) <br>
              -                if retcode == 0: <br>
              -                    return helper_tool['fn'] <br>
            </blockquote>
            <br>
            <blockquote type="cite" style="color: #000000;">+               


              if 'cmd' == '/usr/sbin/dbginfo.sh --help': <br>
              +                    retcode =
              subprocess.call(helper_tool['cmd'], shell=True, <br>
              +                                             
              stdout=subprocess.PIPE, <br>
              +                                             
              stderr=subprocess.PIPE) <br>
              +                    if retcode == 0: <br>
              +                        return helper_tool['fn'] <br>
            </blockquote>
            <br>
            You don't need to a special condition to cover the dbginfo
            command. The former code already does that. <br>
            <br>
               I ll make the changes.<br>
            <blockquote type="cite" style="color: #000000;">+               


              else: <br>
              + <br>
              +                    retcode =
              subprocess.call(helper_tool['cmd'], shell=True, <br>
              +                                             
              stdout=subprocess.PIPE, <br>
              +                                             
              stderr=subprocess.PIPE) <br>
              +                    if retcode == 0: <br>
              +                        return helper_tool['fn'] <br>
                            except Exception, e: <br>
                                wok_log.info('Exception running command:
              %s', e) <br>
              <br>
              @@ -213,3 +279,53 @@ class
              DebugReportContentModel(object): <br>
              <br>
                    def lookup(self, name): <br>
                        return self._debugreport.lookup(name) <br>
              + <br>
              + <br>
              +def delete_the_sosreport_md5_file(md5_file): <br>
              +    """ <br>
              +    Deleting md5 file and displaying the contents of the
              same. <br>
              +    """ <br>
              +    msg = 'Deleting report md5 file: "%s"' % md5_file <br>
              +    wok_log.info(msg) <br>
              +    with open(md5_file) as f: <br>
              +        md5 = f.read().strip() <br>
              +        wok_log.info('Md5 file content: "%s"', md5) <br>
              +    os.remove(md5_file) <br>
              + <br>
              + <br>
              +def sosreport_collection(name): <br>
              +    """ <br>
              +    Code for the collection of sosreport n the path <br>
              +    /var/tmp as specified in the command. <br>
              +    """ <br>
              +    path_sosreport = '<i class="moz-txt-slash"><span
                  class="moz-txt-tag">/</span>var/tmp<span
                  class="moz-txt-tag">/</span></i>' <br>
              +    command = ['sosreport', '--batch', '--name=%s' %
              name, <br>
              +               '--tmp-dir=%s' % path_sosreport] <br>
              +    output, error, retcode = run_command(command) <br>
              +    if retcode != 0: <br>
              +        raise OperationFailed("GGBDR0003E", {'name':
              name, <br>
              +                                             'err':
              retcode}) <br>
              + <br>
            </blockquote>
            <br>
            <blockquote type="cite" style="color: #000000;">+    #
              SOSREPORT might create file in /tmp or /var/tmp <br>
              +    # FIXME: The right way should be passing the tar.xz
              file directory <br>
              +    # though the parameter '--tmp-dir', but it is failing
              in Fedora 20 <br>
            </blockquote>
            <br>
            You can remove this comment. <br>
            <br>
            <blockquote type="cite" style="color: #000000;">+   
              sosreport_name = name.replace('_', '') <br>
            </blockquote>
            <br>
            The same I commented before. We should not change the user
            input without informing user about it. <br>
            So it is better to block underscore in the debug report
            name. Please, update API.json accordingly. <br>
            <br>
               I ll make the required changes.<br>
            <blockquote type="cite" style="color: #000000;">+   
              sosreport_name_regex = '(\s+)(' + path_sosreport + \ <br>
              +                           ')(sosreport-' +\ <br>
              +                           sosreport_name +
              '-\d+.tar.xz)' <br>
              +    sosreport_file = None <br>
              +    output = output.splitlines() <br>
              +    for line in output: <br>
              +        if line: <br>
              +            matched_name = re.match(sosreport_name_regex,
              line) <br>
              +            if matched_name: <br>
              +                path = matched_name.groups()[1] <br>
              +                fname = matched_name.groups()[2] <br>
              +                sosreport_file = path + fname <br>
            </blockquote>
            <br>
            While using --tmp-dir you know exactly where the sosreport
            file will be: &lt;tmp-dir&gt;-sosreport-&lt;name&gt;.tar.gz
            <br>
            So you can need to parse the command output. <br>
                 I will take care of this in the next patch.<br>
            <blockquote type="cite" style="color: #000000;">+               


              break <br>
              +    # Some error in sosreport happened <br>
              +    if sosreport_file is None: <br>
              +        wok_log.error('Debug report file not found. See
              sosreport ' <br>
              +                      'output for detail:\n%s', output) <br>
              +        raise OperationFailed('GGBDR0004E', {'name':
              name}) <br>
              +    return sosreport_file <br>
            </blockquote>
            <br>
          </div>
          <br>
        </div>
        <br>
        <br>
        <fieldset class="mimeAttachmentHeader"></fieldset>
        <br>
        <pre wrap="">_______________________________________________
Kimchi-devel mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:Kimchi-devel@ovirt.org">Kimchi-devel@ovirt.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://lists.ovirt.org/mailman/listinfo/kimchi-devel">http://lists.ovirt.org/mailman/listinfo/kimchi-devel</a>
</pre>
      </blockquote>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Kimchi-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Kimchi-devel@ovirt.org">Kimchi-devel@ovirt.org</a>
<a class="moz-txt-link-freetext" href="http://lists.ovirt.org/mailman/listinfo/kimchi-devel">http://lists.ovirt.org/mailman/listinfo/kimchi-devel</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>