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_scripts(): """Get all scripts""" logging.info('[ROUTER]: Getting all scripts') include = request.args.get('include') include = include.split(',') if include else [] try: scripts = ScriptService.get_scripts(current_identity) except Exception as e: logging.error('[ROUTER]: '+str(e)) return error(status=500, detail='Generic Error') return jsonify(data=[script.serialize(include) for script in scripts]), 200
def publish_script(script): """Publish a script""" logging.info('[ROUTER]: Publishsing script '+script) try: script = ScriptService.publish_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()), 200
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 delete_script(script): """Delete a script""" logging.info('[ROUTER]: Deleting script: '+script) identity = current_identity if identity.role != 'ADMIN' and identity.email != '*****@*****.**': return error(status=403, detail='Forbidden') try: script = ScriptService.delete_script(script, 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()), 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')
def get_script_logs(script): """Get a script logs""" logging.info('[ROUTER]: Getting script logs of script %s ' % (script)) try: start = request.args.get('start', None) if start: start = dateutil.parser.parse(start) last_id = request.args.get('last-id', None) logs = ScriptService.get_script_logs(script, start, last_id) 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=[log.serialize() for log in logs]), 200
def create_script(): """ Create a new script """ logging.info('[ROUTER]: Creating a script') sent_file = request.files.get('file') if sent_file.filename == '': sent_file.filename = 'script' user = current_identity try: user = ScriptService.create_script(sent_file, user) except InvalidFile as e: logging.error('[ROUTER]: '+e.message) return error(status=400, detail=e.message) except ScriptDuplicated as e: logging.error('[ROUTER]: '+e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER]: '+str(e)) return error(status=500, detail='Generic Error') return jsonify(data=user.serialize()), 200
def update_script(script): """Update a script""" logging.info('[ROUTER]: Updating a script') sent_file = request.files.get('file') if sent_file.filename == '': sent_file.filename = 'script' user = current_identity if user.role != 'ADMIN' and user.email != '*****@*****.**': return error(status=403, detail='Forbidden') try: script = ScriptService.update_script(script, sent_file, user) except InvalidFile as e: logging.error('[ROUTER]: '+e.message) return error(status=400, detail=e.message) 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') return jsonify(data=script.serialize()), 200