Initial Source code version

This commit is contained in:
Frank Agerholm 2025-12-11 12:07:17 +01:00
commit d979374cbc
23 changed files with 2628 additions and 0 deletions

83
app/cli.py Normal file
View file

@ -0,0 +1,83 @@
# app/cli.py
import argparse
import sys
import json
import os
import httpx
DEFAULT_API_URL = os.environ.get("TASK_QUEUE_API_URL", "http://127.0.0.1:8000")
def cmd_create_job(args: argparse.Namespace) -> int:
"""
Legt einen neuen Job an (MailCheck) und gibt Status/Tasks aus.
"""
payload = {} # ggf. später erweitern
body = {"job_type": args.job_type, "domain": args.domain, "payload": payload}
try:
with httpx.Client(base_url=args.api_url, timeout=15) as client:
resp = client.post("/jobs", json=body)
resp.raise_for_status()
job = resp.json()
except httpx.HTTPError as e:
print(f"[ERROR] API-Request fehlgeschlagen: {e}", file=sys.stderr)
return 1
print(f"Job {job['id']} ({job['job_type']}) Domain: {job['domain']} Status: {job['status']}")
for t in job.get("tasks", []):
print(f"- Task {t['name']}: {t['status']} (id={t['id']})")
return 0
def cmd_get_job(args: argparse.Namespace) -> int:
"""
Holt einen bestehenden Job und zeigt Status/Tasks.
"""
try:
with httpx.Client(base_url=args.api_url, timeout=15) as client:
resp = client.get(f"/jobs/{args.job_id}")
resp.raise_for_status()
job = resp.json()
except httpx.HTTPError as e:
print(f"[ERROR] API-Request fehlgeschlagen: {e}", file=sys.stderr)
return 1
print(json.dumps(job, indent=2))
return 0
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
prog="tq",
description="Task-Queue CLI (FastAPI + PostgreSQL + RabbitMQ) RHEL-freundlich mit argparse",
)
parser.add_argument(
"--api-url", default=DEFAULT_API_URL,
help=f"Basis-URL der API (Default: {DEFAULT_API_URL})"
)
sub = parser.add_subparsers(dest="command", required=True)
# create-job
p_create = sub.add_parser("create-job", help="Neuen Job anlegen")
p_create.add_argument("job_type", help="JobType, z. B. MailCheck")
p_create.add_argument("--domain", "-d", required=True, help="Domain für den Job (z. B. example.com)")
p_create.set_defaults(func=cmd_create_job)
# get-job
p_get = sub.add_parser("get-job", help="Job-Status abrufen")
p_get.add_argument("job_id", help="Job-ID (UUID)")
p_get.set_defaults(func=cmd_get_job)
return parser
def main(argv: list[str] | None = None) -> int:
parser = build_parser()
args = parser.parse_args(argv)
# Subcommand dispatch
if hasattr(args, "func"):
return args.func(args)
parser.print_help()
return 2
if __name__ == "__main__":
sys.exit(main())