<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<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 nowrap="nowrap" valign="BASELINE" align="RIGHT">Subject:
</th>
<td>Re: [PATCH] Dbginfo report generation</td>
</tr>
<tr>
<th nowrap="nowrap" valign="BASELINE" align="RIGHT">Date:
</th>
<td>Wed, 25 Nov 2015 11:27:20 +0530</td>
</tr>
<tr>
<th nowrap="nowrap" valign="BASELINE" align="RIGHT">From:
</th>
<td>Megha Smriti <a moz-do-not-send="true"
class="moz-txt-link-rfc2396E"
href="mailto:mesmriti@linux.vnet.ibm.com"><mesmriti@linux.vnet.ibm.com></a></td>
</tr>
<tr>
<th nowrap="nowrap" valign="BASELINE" align="RIGHT">To: </th>
<td>Aline Manera <a moz-do-not-send="true"
class="moz-txt-link-rfc2396E"
href="mailto:alinefm@linux.vnet.ibm.com"><alinefm@linux.vnet.ibm.com></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 & 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"><root@localhost.localdomain></a></a>
<br>
<br>
Signed-off-by: root <a moz-do-not-send="true"
class="moz-txt-link-rfc2396E"
href="mailto:root@localhost.localdomain"><root@localhost.localdomain></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: <tmp-dir>-sosreport-<name>.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 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>