import collections
import functools
import time
+import logging
ATTRIBUTE_PATTERN_BASE = re.compile(r"\{#\[(?P<label>[-a-zA-Z0-9._]*)\](?P<expr>(?P<component>\.addr\[[0-9]+\]|\.route\[[0-9]+\]|\.trace\[[0-9]+\])?.\[(?P<attribute>[-a-zA-Z0-9._]*)\])#}")
ATTRIBUTE_PATTERN_GUID_SUB = r"{#[%(guid)s]%(expr)s#}"
self._started_time = None
self._stopped_time = None
+ self._logger = logging.getLogger('nepi.core.execute')
+
if experiment_xml is None and root_dir is not None:
# Recover
self.load_experiment_xml()
try:
callable(*p, **kw)
except:
- import traceback
- traceback.print_exc(file=sys.stderr)
+ logging.exception("Exception occurred in asynchronous thread:")
excs.append(sys.exc_info())
return wrapped
threads = [ threading.Thread(target=wrap(callable)) for callable in callables ]
self._testbeds[guid].do_setup()
self._testbeds[guid].recover()
except:
+ self._logger.exception("During recovery of testbed %s", guid)
+
# Mark failed
self._failed_testbeds.add(guid)
self._testbeds[guid].do_setup()
self._testbeds[guid].recover()
except:
+ self._logger.exception("During recovery of testbed %s", guid)
+
# Mark failed
self._failed_testbeds.add(guid)
os.remove(os.path.join(self._root_dir, 'deployment_config.ini'))
except:
# Just print exceptions, this is just cleanup
- import traceback
- ######## BUG ##########
- #BUG: If the next line is uncomented pyQt explodes when shutting down the experiment !!!!!!!!
- #traceback.print_exc(file=sys.stderr)
+ self._logger.exception("Loading testbed configuration")
def _update_execute_xml(self):
# For all testbeds,