commit 7289159bf7f7eb8718cccb87affc784197232d03
Author: Radek Pazdera <rpazdera(a)redhat.com>
Date: Thu Aug 23 11:30:45 2012 +0200
NetTestController: Write traceback to debug on error
When the recipe execution fails with an exception in NetTestController,
the exception is always caught and rethrown after propper cleanup has
been done.
This unfortunatelly leads to loosing the original exception traceback
which is very helpful for debugging.
The original traceback is now logged into debug when exception is
caught and then rethrown.
Signed-off-by: Radek Pazdera <rpazdera(a)redhat.com>
Common/Logs.py | 6 ++++++
NetTest/NetTestController.py | 4 +++-
NetTest/NetTestSlave.py | 7 ++-----
3 files changed, 11 insertions(+), 6 deletions(-)
---
diff --git a/Common/Logs.py b/Common/Logs.py
index ac0d5d3..0772f1f 100644
--- a/Common/Logs.py
+++ b/Common/Logs.py
@@ -12,9 +12,15 @@ jzupka(a)redhat.com (Jiri Zupka)
import os, sys, shutil, datetime
from logging import Formatter
import logging.handlers
+import traceback
LOCAL_IP = "(127.0.0.1)"
+def log_exc_traceback():
+ cmd_type, value, tb = sys.exc_info()
+ exception = traceback.format_exception(cmd_type, value, tb)
+ logging.debug(''.join(exception))
+
class FindRootPathError(Exception):
def __init__(self, path, rootFolder):
Exception.__init__(self, path, rootFolder)
diff --git a/NetTest/NetTestController.py b/NetTest/NetTestController.py
index c5a218c..41707c5 100644
--- a/NetTest/NetTestController.py
+++ b/NetTest/NetTestController.py
@@ -14,7 +14,7 @@ jpirko(a)redhat.com (Jiri Pirko)
import logging
import socket
import os
-from Common.Logs import Logs
+from Common.Logs import Logs, log_exc_traceback
from Common.SshUtils import scp_from_remote
from pprint import pprint, pformat
from Common.XmlRpc import ServerProxy
@@ -295,6 +295,7 @@ class NetTestController:
try:
self._ntparse.parse_recipe()
except Exception, exc:
+ log_exc_traceback()
logging.debug("Exception raised during recipe parsing. "\
"Deconfiguring machines.")
self._deconfigure_slaves()
@@ -377,6 +378,7 @@ class NetTestController:
try:
res = self._run_recipe()
except Exception, exc:
+ log_exc_traceback()
err = exc
if packet_capture:
diff --git a/NetTest/NetTestSlave.py b/NetTest/NetTestSlave.py
index a7722e4..8065591 100644
--- a/NetTest/NetTestSlave.py
+++ b/NetTest/NetTestSlave.py
@@ -11,7 +11,7 @@ __author__ = """
jpirko(a)redhat.com (Jiri Pirko)
"""
-from Common.Logs import Logs
+from Common.Logs import Logs, log_exc_traceback
import signal
import select, logging
import os
@@ -114,10 +114,7 @@ class NetTestSlaveXMLRPC:
try:
return NetTestCommand(command).run()
except:
- import sys, traceback
- cmd_type, value, tb = sys.exc_info()
- exception = traceback.format_exception(cmd_type, value, tb)
- logging.error(''.join(exception))
+ log_exc_traceback()
raise CommandException(command)
def machine_cleanup(self):