diff --git a/webservice/webservice.py b/webservice/webservice.py index 2d2e7f59bd25e2bc0e70cf02a4382591cc9f1823..991acbf3d92b0ebe1ef3d46a22ecc639a4c4b0fb 100644 --- a/webservice/webservice.py +++ b/webservice/webservice.py @@ -452,7 +452,7 @@ async def copy_untouched_files(file_list, out_folder, run): async def run_action(job_db, cmd, mode, proposal, run, rid) -> str: - """ Run action command (CORRECT OR DARK) + """Run action command (CORRECT or DARK). :param job_db: jobs database :param cmd: to run, should be a in list for as expected by subprocess.run @@ -465,48 +465,41 @@ async def run_action(job_db, cmd, mode, proposal, run, rid) -> str: Returns a formatted Success or Error message indicating outcome of the execution. """ - # FIXME: this coro has too many returns that can be simplified if mode == "prod": logging.info(" ".join(cmd)) retcode, stdout = await run_proc_async(cmd) - if retcode == 0: - if "DARK" in cmd: - logging.info(Success.START_CHAR.format(proposal, run)) - else: - logging.info(Success.START_CORRECTION.format(proposal, run)) - # enter jobs in job db - c = job_db.cursor() # FIXME: asyncio - rstr = stdout.decode() - - for r in rstr.split("\n"): - if "Submitted job:" in r: - _, jobid = r.split(":") - c.execute( - "INSERT INTO jobs VALUES (?, ?, ?, ?, 'PD', ?, ?, ?)", - (rid, jobid.strip(), proposal, run, - datetime.now().isoformat(), cmd[3], cmd[4]) - ) - job_db.commit() - logging.debug((" ".join(cmd)).replace(',', '').replace("'", "")) - if "DARK" in cmd: - return Success.START_CHAR.format(proposal, run) - else: - return Success.START_CORRECTION.format(proposal, run) - else: + if retcode != 0: logging.error(Errors.JOB_LAUNCH_FAILED.format(cmd, retcode)) return Errors.JOB_LAUNCH_FAILED.format(cmd, retcode) - else: if "DARK" in cmd: - logging.debug(Success.START_CHAR_SIM.format(proposal, run)) + message = Success.START_CHAR.format(proposal, run) else: - logging.debug(Success.START_CORRECTION_SIM.format(proposal, run)) + message = Success.START_CORRECTION.format(proposal, run) + + # Save submitted jobs to persistent database. + c = job_db.cursor() # FIXME: asyncio + rstr = stdout.decode() + + for r in rstr.split("\n"): + if "Submitted job:" in r: + _, jobid = r.split(":") + c.execute( + "INSERT INTO jobs VALUES (?, ?, ?, ?, 'PD', ?, ?, ?)", + (rid, jobid.strip(), proposal, run, + datetime.now().isoformat(), cmd[3], cmd[4]) + ) + job_db.commit() - logging.debug((" ".join(cmd)).replace(',', '').replace("'", "")) + else: # mode == "sim" if "DARK" in cmd: - return Success.START_CHAR_SIM.format(proposal, run) + message = Success.START_CHAR_SIM.format(proposal, run) else: - return Success.START_CORRECTION_SIM.format(proposal, run) + message = Success.START_CORRECTION_SIM.format(proposal, run) + + logging.info(message) + logging.info((" ".join(cmd)).replace(',', '').replace("'", "")) + return message async def wait_on_transfer(rpath, max_tries=300) -> bool: