aboutsummaryrefslogtreecommitdiff
path: root/sheepdog/worker.py
blob: 6299ca7cf2901b6ad9d8bc559e3e2f6d51422e1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"""Daemon that processes commands"""
import os
import sys
import time
import redis
import redis.connection

# Enable importing from one dir up since gn3 isn't installed as a globally
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))


def run_jobs(conn):
    """Process the redis using a redis connection, CONN"""
    # pylint: disable=E0401, C0415
    from gn3.commands import run_cmd
    cmd_id = (conn.lpop("GN3::job-queue") or b'').decode("utf-8")
    if bool(cmd_id):
        cmd = conn.hget(name=cmd_id, key="cmd")
        if cmd and (conn.hget(cmd, "status") == b"queued"):
            result = run_cmd(cmd.decode("utf-8"))
            conn.hset(name=cmd_id, key="result", value=result.get("output"))
            if result.get("code") == 0:  # Success
                conn.hset(name=cmd_id, key="status", value="success")
            else:
                conn.hset(name=cmd_id, key="status", value="error")


if __name__ == "__main__":
    redis_conn = redis.Redis()
    while True:  # Daemon that keeps running forever:
        run_jobs(redis_conn)
        time.sleep(0.1)