Example #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
Example #3
0
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
Example #4
0
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
Example #5
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
Example #6
0
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
Example #7
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')
Example #8
0
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
Example #9
0
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
Example #10
0
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