about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2025-03-24 16:23:36 -0500
committerFrederick Muriuki Muriithi2025-03-24 16:23:36 -0500
commit594a0f9632785a4acb6d99ddd6d5171138339b60 (patch)
treeda0953541191283aaf8d82ca19706c73fee41637
parentae5f0242cd937137cc2c90b6ecd44f63e1dd8c4b (diff)
downloadgn-libs-594a0f9632785a4acb6d99ddd6d5171138339b60.tar.gz
Provide initial incomplete jobs manager script.
-rw-r--r--gn_libs/scripts/__init__.py1
-rw-r--r--gn_libs/scripts/worker.py49
2 files changed, 50 insertions, 0 deletions
diff --git a/gn_libs/scripts/__init__.py b/gn_libs/scripts/__init__.py
new file mode 100644
index 0000000..678c5e0
--- /dev/null
+++ b/gn_libs/scripts/__init__.py
@@ -0,0 +1 @@
+"""Initialise scripts that will be accessible globally."""
diff --git a/gn_libs/scripts/worker.py b/gn_libs/scripts/worker.py
new file mode 100644
index 0000000..2479aef
--- /dev/null
+++ b/gn_libs/scripts/worker.py
@@ -0,0 +1,49 @@
+import sys
+import shlex
+import argparse
+import traceback
+
+from gn_libs import jobs, sqlite3
+
+
+def run_job(conn, job_id):
+    """Run the job."""
+    try:
+        pass
+    except:
+        jobs.update_metadata(conn, args.job_id, "status", "error")
+        jobs.push_to_stream(conn, args.job_id, "stderr", traceback.format_exc())
+        return 4
+
+
+def parse_args():
+    """Define and parse CLI args."""
+    parser = argparse.ArgumentParser(
+        prog="GN-Libs Worker",
+        description = (
+            "Generic worker to launch and manage jobs defined with gn-libs"))
+    parser.add_argument(
+        "jobs_db_uri",
+        help="The URI to the SQLite3 database holding the jobs' details")
+    parser.add_argument("job_id", help="The id of the job being processed")
+    return parser.parse_args()
+
+def main():
+    """Entry-point to this program."""
+    args = parse_args()
+    with (sqlite3.connection(args.jobs_db_uri) as conn,
+          sqlite3.cursor(conn) as cursor):
+        job = jobs.job(conn, args.job_id)
+        if job:
+            return run_job(conn, args.job_id)
+
+        jobs.update_metadata(conn, args.job_id, "status", "error")
+        jobs.push_to_stream(conn, args.job_id, "stderr", "Job not found!")
+        return 2
+
+    return 3
+
+
+
+if __name__ == "__main__":
+    sys.exit(main())