Exemplo n.º 1
0
    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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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')