def create_execution(script_id, params, user): logging.info('[SERVICE]: Creating execution') script = ScriptService.get_script(script_id, user) if not script: raise ScriptNotFound(message='Script with id ' + script_id + ' does not exist') if script.status != 'SUCCESS': raise ScriptStateNotValid(message='Script with id ' + script_id + ' is not BUILT') execution = Execution(script_id=script.id, params=params, user_id=user.id) try: logging.info('[DB]: ADD') db.session.add(execution) db.session.commit() except Exception as error: raise error try: environment = SETTINGS.get('environment', {}) environment['EXECUTION_ID'] = execution.id param_serial = json.dumps(params).encode('utf-8') param_serial = str(base64.b64encode(param_serial)).replace( '\'', '') logging.debug(param_serial) docker_run.delay(execution.id, script.slug, environment, param_serial) except Exception as e: raise e return execution
def update_execution(execution, execution_id): logging.info('[SERVICE]: Updating execution') status = execution.get('status', None) progress = execution.get('progress', None) results = execution.get('results', None) if status is None and progress is None and results is None: raise Exception execution = ExecutionService.get_execution(execution_id=execution_id) if not execution: raise ExecutionNotFound(message='Execution with id '+execution_id+' does not exist') if status is not None: execution.status = status if status == 'FINISHED' or status == 'FAILED': execution.end_date = datetime.datetime.utcnow() execution.progress = 100 user = UserService.get_user(str(execution.user_id)) script = ScriptService.get_script(str(execution.script_id)) email = EmailService.send_html_email( recipients=[user.email], html=EXECUTION_FINISHED_MAIL_CONTENT.format(status, execution.params.get('task_name'), script.name, str(execution.id), execution.start_date, execution.end_date, status), subject='[MISLAND] Execution finished' ) if progress is not None: execution.progress = progress if results is not None: execution.results = results try: logging.info('[DB]: ADD') db.session.add(execution) db.session.commit() except Exception as error: raise error return execution
def get_script(script): """Get a script""" logging.info('[ROUTER]: Getting script '+script) include = request.args.get('include') include = include.split(',') if include else [] try: script = ScriptService.get_script(script, current_identity) except ScriptNotFound as e: logging.error('[ROUTER]: '+e.message) return error(status=404, detail=e.message) except Exception as e: logging.error('[ROUTER]: '+str(e)) return error(status=500, detail='Generic Error') return jsonify(data=script.serialize(include)), 200
def download_script(script): """Download a script""" logging.info('[ROUTER]: Download script '+script) try: script = ScriptService.get_script(script, current_identity) return send_from_directory(directory=SETTINGS.get('SCRIPTS_FS'), filename=script.slug + '.tar.gz') except ScriptNotFound as e: logging.error('[ROUTER]: '+e.message) return error(status=404, detail=e.message) except NotAllowed as e: logging.error('[ROUTER]: '+e.message) return error(status=403, detail=e.message) except Exception as e: logging.error('[ROUTER]: '+str(e)) return error(status=500, detail='Generic Error')