diff options
Diffstat (limited to 'rumba/model.py')
-rw-r--r-- | rumba/model.py | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/rumba/model.py b/rumba/model.py index b877209..5647b1e 100644 --- a/rumba/model.py +++ b/rumba/model.py @@ -28,6 +28,7 @@ import abc import os import stat import time +import shutil import rumba.log as log from rumba import ssh_support @@ -70,13 +71,20 @@ class Testbed(object): username, password, proj_name, - http_proxy=None): + http_proxy=None, + system_logs=None): self.username = username self.password = password self.proj_name = proj_name self.exp_name = exp_name self.http_proxy = http_proxy self.flags = {'no_vlan_offload': False} + if system_logs is None: + self.system_logs = ['/var/log/syslog'] + elif isinstance(system_logs, str): + self.system_logs = [system_logs] + else: + self.system_logs = system_logs @abc.abstractmethod def swap_in(self, experiment): @@ -526,7 +534,12 @@ class Policy(object): class Experiment(object): __metaclass__ = abc.ABCMeta - def __init__(self, testbed, nodes=None, git_repo=None, git_branch=None): + def __init__(self, testbed, + nodes=None, + git_repo=None, + git_branch=None, + log_dir=None, + prototype_logs=None): if nodes is None: nodes = list() self.nodes = nodes @@ -544,6 +557,22 @@ class Experiment(object): self.dt_flows = [] # a list of per-DIF lists of data transfer flows self.mgmt_flows = [] # a list of per-DIF lists of management flows + # Determine log directory + if log_dir is None: + # If it is None, use /tmp/rumba/{project} + # Wipe it and make it again + exp_name = self.testbed.exp_name.replace('/', '_') # Just in case + log_dir = '/tmp/rumba/' + exp_name + '/' + shutil.rmtree(log_dir, ignore_errors=True) + os.mkdir(log_dir) + self.log_dir = log_dir + if not os.path.isdir(self.log_dir): + raise Exception('Destination "%s" is not a directory. ' + 'Cannot fetch logs.' + % self.log_dir) + self.prototype_logs = prototype_logs \ + if prototype_logs is not None else [] + # Generate missing information self.generate() |