def __setup_scenario(self, dic_payload): # Get the Base64 encoded ZIP file from payload click.secho(utils.logify('Unpacking scenario... '), nl=False) str_base64_zipped_scenario = dic_payload['scenarioBase64ZippedFolder'] obj_zipped_scenario = StringIO(base64.b64decode(str_base64_zipped_scenario)) obj_zipfile = ZipFile(obj_zipped_scenario, 'r') # Extract ZIP file into temporary folder self.scenario_folder = tempfile.mkdtemp(prefix='woodpecker-') obj_zipfile.extractall(self.scenario_folder) click.secho('DONE', fg='green', bold=True) # Logging temp folder str_message = ' '.join(('Scenario temporary folder set to: ', self.scenario_folder)) click.secho(utils.logify(str_message)) # Fill all the object properties self.controller_port = dic_payload.get('controllerPort', '7878') self.spawn_quota = dic_payload.get('spawnQuota', 1) self.scenario_name = dic_payload.get('scenarioName', 'Scenario') self.scenario_file_path = utils.get_abs_path(dic_payload.get('scenarioFile', './scenario.py'), self.scenario_folder) self.results_file_path = utils.get_abs_path(dic_payload.get('resultsFile', './results/results.sqlite'), self.scenario_folder) # Create spawner click.secho(utils.logify('Setting up spawner... ')) self.spawner = Spawner(self.controller_ip_address, self.controller_port, self.scenario_folder, self.scenario_name, self.scenario_file_path, self.results_file_path, self.spawn_quota) click.secho(utils.logify('Spawner created'), fg='green', bold=True)
def __initialize(self, str_scenario_name, **kwargs): # Self address self.ip_address = kwargs.get("ip_address", socket.gethostname()) # Controller port self.port = kwargs.get("port", 7878) # Allocate an empty dict to collect spawners data self.spawners = {} list_spawners = kwargs.get("spawners", [self.ip_address]) for str_spawner in list_spawners: self.spawners[str_spawner] = {} # Create a sender for each spawner self.spawners[str_spawner]["sender"] = Sender(str_spawner, self.port, "TCP") # Spawning mode (threads or subprocesses), defaults to threads self.spawn_mode = kwargs.get("spawn_mode", "thread") # Local flag to run everything on localhost (to be used in the future...), defaults to False self.local = kwargs.get("local", False) # Placeholder for scenario self.scenario = None # Scenario class name self.scenario_name = str_scenario_name # Scenario folder self.scenario_folder = utils.get_abs_path(kwargs.get("scenario_folder", os.getcwd())) # Scenario file, defaults to 'scenario.py' self.scenario_file = kwargs.get("scenario_file_path", "./scenario.py") # Scenario file path, defaults to standard scenario file self.scenario_file_path = utils.get_abs_path(self.scenario_file, self.scenario_folder) # Scenario duration, o be filled later self.scenario_duration = None # Result file, defaults to 'results/results.sqlite' file self.results_file = kwargs.get("results_file", "./results/results.sqlite") # Result file path self.results_file_path = utils.get_abs_path(self.results_file, self.scenario_folder) # Sysmonitor thread self.sysmonitor = Sysmonitor(self.ip_address, self.port, str_host_type="controller", bool_debug=False) # Log Collector thread self.logcollector = LogCollectorThread(self.results_file_path, self.ip_address, self.port) # Elapsed time since scenario duration self.scenario_elapsed_time = 0
def __initialize(self, **kwargs): # Controller and Log collector socket port self.port = kwargs.get('controller_port', 7878) # Controller address, void at the beginning self.server_address = kwargs.get('controller_ip_address', None) # Scenario folder, defaults to current directory self.scenario_folder = kwargs.get('scenario_folder', os.getcwd()) # Scenario file name, defaults to './scenario.py' self.scenario_file_path = utils.get_abs_path(kwargs.get('scenario_file', './scenario.py'), self.scenario_folder) # Results file path, defaults to './results/results.sqlite' self.results_file_path = utils.get_abs_path(kwargs.get('results_file', './results/results.sqlite'), self.scenario_folder) # Scenario name, defaults to 'Scenario' self.scenario_name = kwargs.get('scenario_name', 'Scenario') # Spawn quota for local spawner self.spawn_quota = kwargs.get('spawn_quota', 1) # Placeholder for scenario self.scenario = None # Armed flag, used to start and stop running self.armed = False # Elapsed time since scenario beginning self.elapsed_time = 0 # Internal message sender placeholder self.sender = Sender(self.server_address, self.port, 'UDP') if self.server_address else None # Sender spawn message poll interval self.sender_spawn_polling_interval = kwargs.get('sender_spawn_polling_interval', 5) self.sender_spawn_elapsed_time = 0.0 # Internal Sysmonitor object and related thread self.sysmonitor_polling_interval = kwargs.get('sysmonitor_polling_interval', 1.0) click.secho(utils.logify('Setting up Sysmonitor... ', 'Spawner')) self.sysmonitor = Sysmonitor(self.server_address, self.port, self.sysmonitor_polling_interval) click.secho(utils.logify('Sysmonitor started'), fg='green', bold=True)
def add_transaction(self, str_name, str_path): str_abspath = utils.get_abs_path(str_path, self.scenario_folder) obj_transaction = { 'name': str_name, 'path': str_abspath, 'class': utils.import_from_path(str_abspath, str_name, {'navigation_name': self.name}), 'server_address': self.server_address, 'server_port': self.server_port } self.test_transactions.append(obj_transaction)
def add_navigation(self, str_navigationname, str_path): self.navigations[str_navigationname] = {} self.navigations[str_navigationname]["path"] = str_path self.navigations[str_navigationname]["class"] = utils.import_from_path( utils.get_abs_path(str_path, self.scenario_folder), str_navigationname, {"navigation_name": str_navigationname}, ) self.navigations[str_navigationname]["ramps"] = [] self.navigations[str_navigationname]["iteration_limit"] = 0 self.navigations[str_navigationname]["current_spawns"] = 0 self.navigations[str_navigationname]["planned_spawns"] = 0 self.navigations[str_navigationname]["iterations"] = 0 self.navigations[str_navigationname]["start_time"] = None self.navigations[str_navigationname]["elapsed_time"] = 0 self.navigations[str_navigationname]["threads"] = []