Beispiel #1
0
def run(arguments, event):
    arguments = json.loads(arguments)
    script_uid = arguments["script_uid"]
    task_id = arguments["task_id"]

    script = Script(script_uid)

    process = Popen(
        ["bash", script.install_requirements_path],
        stdin=PIPE,
        stdout=PIPE,
        stderr=PIPE,
        bufsize=-1,
    )

    process_output = ""
    exitcode = 0

    while True:
        output = process.stdout.readline().decode("utf-8")

        if process.poll() is not None:
            exitcode = process.poll()

            break

        if output:
            process_output += output
            event.trigger(
                "task_output",
                {
                    "task_id": task_id,
                    "output": output,
                    "script_uid": script.uid,
                    "task": "install_requirements",
                },
            )

    output, error = process.communicate()

    event.trigger(
        "task_output",
        {
            "task_id": task_id,
            "output": "",
            "script_uid": script.uid,
            "task": "install_requirements",
        },
    )
    event.trigger("pip_requirements_installed", script.to_dict())
    event.trigger("action_complete", {
        "action": "install_requirements",
        "uid": script.uid
    })

    return process_output
Beispiel #2
0
def run(arguments, event):
    arguments = json.loads(arguments)
    script_uid = arguments["script_uid"]
    task_id = arguments["task_id"]

    event.trigger("action_started", {"uid": script_uid, "action": "execute"})

    script = Script(script_uid)

    process = Popen(["bash", script.execute_path],
                    stdout=PIPE,
                    stderr=PIPE,
                    shell=False)

    exitcode = 0
    process_output = ""

    while True:
        output = process.stdout.readline()
        process_output += output.decode("utf-8")
        if process.poll() is not None:
            break

        if output:
            event.trigger(
                "task_output",
                {
                    "task_id": task_id,
                    "script_uid": script_uid,
                    "output": output.decode("utf-8"),
                    "task": "execute",
                },
            )

    exitcode = process.poll()

    stdout, stderr = process.communicate()

    if stderr:
        event.trigger(
            "task_output",
            {
                "task_id": task_id,
                "script_uid": script_uid,
                "output": stderr.decode("utf-8"),
                "task": "execute",
            },
        )

    session = Session()
    log = Log(script=script_uid,
              text=process_output,
              error=stderr,
              exitcode=exitcode)
    session.add(log)
    session.commit()
    session.close()

    event.trigger(
        "task_output",
        {
            "task_id": task_id,
            "output": "",
            "script_uid": script.uid,
            "task": "execute"
        },
    )
    script = script.to_dict()

    # Decode bytes to string
    try:
        stderr = stderr.decode("utf-8")
    except AttributeError:
        pass

    try:
        process_output = process_output.decode("utf-8")
    except AttributeError:
        pass

    script["logs"].insert(
        0,
        {
            "date": maya.now().rfc2822(),
            "stderr": stderr,
            "stdout": process_output,
            "exitcode": exitcode,
        },
    )
    event.trigger("script_executed", script)

    event.trigger("script_updated", script)
    event.trigger("action_complete", {
        "action": "execute",
        "uid": script["uid"]
    })

    return stdout