def start_scenario(request, exptr_name=None, scen_name=None): exptr_scens = get_scenarios() if ( exptr_name in exptr_scens and scen_name in exptr_scens[exptr_name] and "full_path" in exptr_scens[exptr_name][scen_name] ): full_path = exptr_scens[exptr_name][scen_name]["full_path"] os.spawnlp(os.P_NOWAIT, "start_scenario", "start_scenario", "--exptr", exptr_name, "--scen", full_path, "-d") time.sleep(5) return redirect("scenario-runner:index") else: LOGGER.debug("exptr_name: %s not found in exptr_scens\n%s", exptr_name, json.dumps(exptr_scens, indent=4)) return redirect("scenario-runner:index")
def user_in_scenario_db(request): exptr = request.session["experimenter"] scen = request.session["scenario"] uid = request.session["tutalk_uid"] exptr_scens = get_scenarios() if exptr in exptr_scens: scens = exptr_scens[exptr] if scen in scens: scen_info = scens[scen] if "running" == scen_info["status"]: if "groups" in scen_info: for group in scen_info["groups"]: for user in group["users"]: if uid == user["uid"]: return True return False
def stop_scenario(request, exptr_name=None, scen_name=None): get_object_or_404(models.Experimenter, name=exptr_name) exptr_scens = get_scenarios() if exptr_name in exptr_scens: if scen_name in exptr_scens[exptr_name]: if "pid" in exptr_scens[exptr_name][scen_name]: pid = exptr_scens[exptr_name][scen_name]["pid"] if check_pid(pid): try: os.kill(pid, signal.SIGINT) time.sleep(1) if check_pid(pid): os.kill(pid, signal.SIGKILL) pfx = "%s.%s" % (exptr_name, scen_name) rc = get_redis_connection() rc.hdel( "%s.scenarios" % get_tutalk_host(), "%s.status" % pfx, "%s.pid" % pfx, "%s.groups" % pfx ) time.sleep(2) except OSError as ose: LOGGER.error(ose) return redirect("scenario-runner:index")