def run(self, name, context, args): cls_name, method_name = name.split(".", 1) cls = scenario_base.Scenario.get_by_name(cls_name) scenario_context = copy.deepcopy(getattr(cls, method_name).context) # TODO(boris-42): We should keep default behavior for `users` context # as a part of work on pre-created users this should be # removed. scenario_context.setdefault("users", {}) # merge scenario context and task context configuration scenario_context.update(context) context_obj = { "task": self.task, "admin": { "endpoint": self.admin_user }, "scenario_name": name, "config": scenario_context } args = cls.preprocess(method_name, context_obj, args) with base_ctx.ContextManager(context_obj): with rutils.Timer() as timer: self._run_scenario(cls, method_name, context_obj, args) return timer.duration()
def test_timer_exception(self): try: with utils.Timer() as timer: raise Exception() except Exception: pass self.assertEqual(3, len(timer.error)) self.assertEqual(timer.error[0], type(Exception()))
def test_timer_duration(self): start_time = time.time() end_time = time.time() with mock.patch('rally.utils.time') as mock_time: mock_time.time = mock.MagicMock(return_value=start_time) with utils.Timer() as timer: mock_time.time = mock.MagicMock(return_value=end_time) self.assertIsNone(timer.error) self.assertEqual(end_time - start_time, timer.duration())
def run(self, name, context, args): cls_name, method_name = name.split(".", 1) cls = scenario_base.Scenario.get_by_name(cls_name) # NOTE(boris-42): processing @types decorators args = types.preprocess(cls, method_name, context, args) with rutils.Timer() as timer: print("Runner context: %s" % (context)) self._run_scenario(cls, method_name, context, args) return timer.duration()
def _run_scenario_once(args): iteration, cls, method_name, context, kwargs = args LOG.info("Task %(task)s | ITER: %(iteration)s START" % {"task": context["task"]["uuid"], "iteration": iteration}) context["iteration"] = iteration scenario = cls( context=context, admin_clients=osclients.Clients(context["admin"]["endpoint"]), clients=osclients.Clients(context["user"]["endpoint"])) error = [] scenario_output = {"errors": "", "data": {}} try: with rutils.Timer() as timer: scenario_fn = getattr(scenario, method_name) fargs, fvargs, fkws, fdefaults = inspect.getargspec(scenario_fn) if fkws != None: kwargs["my_context"] = context print("KEYWORD ARGS PRESENT") else: print("NO KEYWORD ARGS") scenario_output = getattr(scenario, method_name)(**kwargs) or scenario_output except Exception as e: error = utils.format_exc(e) if cfg.CONF.debug: LOG.exception(e) finally: status = "Error %s: %s" % tuple(error[0:2]) if error else "OK" LOG.info("Task %(task)s | ITER: %(iteration)s END: %(status)s" % {"task": context["task"]["uuid"], "iteration": iteration, "status": status}) return {"duration": timer.duration() - scenario.idle_duration(), "idle_duration": scenario.idle_duration(), "error": error, "scenario_output": scenario_output, "atomic_actions": scenario.atomic_actions()}
def _run_scenario_once(args): iteration, cls, method_name, context, kwargs = args LOG.info("Task %(task)s | ITER: %(iteration)s START" % { "task": context["task"]["uuid"], "iteration": iteration }) scenario = cls(context=context, admin_clients=osclients.Clients( context["admin"]["endpoint"]), clients=osclients.Clients(context["user"]["endpoint"])) error = [] scenario_output = {} try: with rutils.Timer() as timer: scenario_output = getattr(scenario, method_name)(**kwargs) or {} except Exception as e: error = utils.format_exc(e) if cfg.CONF.debug: LOG.exception(e) finally: status = "Error %s: %s" % tuple(error[0:2]) if error else "OK" LOG.info( "Task %(task)s | ITER: %(iteration)s END: %(status)s" % { "task": context["task"]["uuid"], "iteration": iteration, "status": status }) return { "duration": timer.duration() - scenario.idle_duration(), "idle_duration": scenario.idle_duration(), "error": error, "scenario_output": scenario_output, "atomic_actions": scenario.atomic_actions() }
def func_atomic_actions(self, *args, **kwargs): with utils.Timer() as timer: f = func(self, *args, **kwargs) self._add_atomic_actions(name, timer.duration()) return f