diff --git a/al_hostserver/altrain.py b/al_hostserver/altrain.py index 3b0c27d9..cac2034c 100644 --- a/al_hostserver/altrain.py +++ b/al_hostserver/altrain.py @@ -30,7 +30,10 @@ # only safe to set when running locally. On a production server allowing # this to remain true is major security hole. AL_HOST_FETCH_ABOVE_ROOT = True +DEBUGGING_STATE = False +import sys +sys.path.append('../') def find_conf(cwd): split_path = os.path.normpath(cwd).split(os.sep) @@ -284,6 +287,9 @@ def parse_args(argv): help="Specifies the directory of the outer loop repo.") parser.add_argument('--outer-loop-url', default=None, dest="outer_loop_url", metavar="", help="Specifies the URL of a running outer loop server.") + parser.add_argument('--debug', action='store_true', help="Makes logging messages visible in the console.") + parser.add_argument('--debug-agent', action='store_true', dest="debug_agent", help="Makes logging messages for the agent visible in the console.") + parser.add_argument('--debug-performance', action='store_true', dest="debug_performance", help="Makes logging messages for performance visible in the console.") try: args = parser.parse_args(argv) @@ -328,6 +334,7 @@ def parse_args(argv): args.log_dir = os.path.abspath(apply_wd(args.log_dir)) args.al_dir = os.path.abspath(apply_wd(args.al_dir)) args.html_bridge_dir = dir_from_package("al_hostserver") + args.modular_agent_dir = os.path.abspath(apply_wd(args.al_dir)) # os.path.join(calling_dir,args.al_dir) assert os.path.isfile(training_abs), "No such file %r" % training_abs @@ -362,7 +369,7 @@ def parse_args(argv): def main(args): - global al_process, ctat_process, browser_process, outer_loop_process, calling_dir + global al_process, ctat_process, browser_process, outer_loop_process, calling_dir, logging_process if args.no_al_server: assert args.al_port is not None, "Must specify AL_PORT in altrain.conf or command line" @@ -382,6 +389,21 @@ def main(args): if(check_port(args.ctat_host, args.ctat_port, args.force)): _env = os.environ.copy() _env["AL_HOST_FETCH_ABOVE_ROOT"] = str(AL_HOST_FETCH_ABOVE_ROOT) + DEBUGGING_STATE = False + if(args.debug or args.debug_agent or args.debug_performance): + _env["DEBUGGING_STATE"] = "True" + else: + _env["DEBUGGING_STATE"] = "False" + if(args.debug_agent): + _env["DEBUGGING_AGENT"] = "True" + else: + _env["DEBUGGING_AGENT"] = "False" + if(args.debug_performance): + _env["DEBUGGING_PERFORMANCE"] = "True" + else: + _env["DEBUGGING_PERFORMANCE"] = "False" + logging_process = subprocess.Popen([sys.executable, os.path.join( + args.al_dir, "agents", "ModularAgent.py")], env=_env) ctat_process = subprocess.Popen([ sys.executable, os.path.join( args.html_bridge_dir, "host_server.py"), diff --git a/al_hostserver/host_server.py b/al_hostserver/host_server.py index 23c49cbc..b68a9fc0 100644 --- a/al_hostserver/host_server.py +++ b/al_hostserver/host_server.py @@ -21,7 +21,8 @@ from glob import glob # from flask import Flask, -FETCH_ABOVE_ROOT = str(os.environ.get("AL_HOST_FETCH_ABOVE_ROOT","False")).lower() == "true" +FETCH_ABOVE_ROOT = str(os.environ.get("AL_HOST_FETCH_ABOVE_ROOT","False")).lower() == "true" +debuggingState = str(os.environ.get("DEBUGGING_STATE", "False")).lower() == "true" print("FETCH_ABOVE_ROOT", FETCH_ABOVE_ROOT) @@ -99,17 +100,15 @@ def check_started(host,port): class HostServer(Flask): - def run(self, host=None, port=None, debug=None, load_dotenv=True, **options): - thread = threading.Thread(target=lambda : check_started(host,port)) - thread.start() - super(HostServer, self).run(host=host, port=port, debug=debug, load_dotenv=load_dotenv, **options) + def run(self, host=None, port=None, debug=debuggingState, load_dotenv=True, **options): + thread = threading.Thread(target=lambda : check_started(host,port)) + thread.start() + super(HostServer, self).run(host=host, port=port, debug=debug, load_dotenv=load_dotenv, **options) print("HOST CWD", os.getcwd(), __name__) # app = HostServer(__name__,static_folder='.',root_path=os.getcwd()) app = HostServer(__name__,static_folder=".")#,root_path=os.getcwd()) - - # output.write("Anon Student Id\tSession Id\tTime\tStudent Response Type\tTutor Response Type\tLevel (Unit)\tProblemName\tStep Name\tSelection\tAction\tInput\tFeedback Text\tOutcome\n"); LOG_HEADERS = {"user_guid" :"Anon Student Id", "session_id" :"Session Id", @@ -755,7 +754,7 @@ def handle_host(path): log_file_handle = open(output_file_path, 'a', newline='') csv_writer = csv.DictWriter(log_file_handle, LOG_HEADERS.values(),delimiter="\t") log = logging.getLogger('werkzeug') - log.disabled = True + log.disabled app.run(HOST_DOMAIN,port,threaded=True) # print("IT DIED")