/
jobs.py
100 lines (87 loc) · 2.79 KB
/
jobs.py
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import os
import redis
from fastapi import APIRouter
from rq import Connection, Queue
from rq.job import Job
from log.logger import logger
from api.routers.nvd_feed_update import main
from git.git import do_clone
redis_url = os.environ["REDIS_URL"]
router = APIRouter(
prefix="/jobs",
tags=["jobs"],
responses={404: {"description": "Not found"}},
)
# -----------------------------------------------------------------------------
@router.post("/clone", tags=["jobs"])
async def create_clone_job(repository):
with Connection(redis.from_url(redis_url)):
queue = Queue()
job = Job.create(
do_clone,
(
repository,
"/tmp",
),
description="clone job " + repository,
result_ttl=1000,
)
queue.enqueue_job(job)
response_object = {
"job_data": {
"job_id": job.get_id(),
"job_status": job.get_status(),
"job_queue_position": job.get_position(),
"job_description": job.description,
"job_created_at": job.created_at,
"job_started_at": job.started_at,
"job_ended_at": job.ended_at,
"job_result": job.result,
}
}
return response_object
@router.get("/{job_id}", tags=["jobs"])
async def get_job(job_id):
with Connection(redis.from_url(redis_url)):
queue = Queue()
job = queue.fetch_job(job_id)
if job:
logger.info("job {} result: {}".format(job.get_id(), job.result))
response_object = {
"job_data": {
"job_id": job.get_id(),
"job_status": job.get_status(),
"job_queue_position": job.get_position(),
"job_description": job.description,
"job_created_at": job.created_at,
"job_started_at": job.started_at,
"job_ended_at": job.ended_at,
"job_result": job.result,
}
}
else:
response_object = {"status": "error"}
return response_object
@router.post("/update_feed", tags=["jobs"])
async def create_update_feed_job():
with Connection(redis.from_url(redis_url)):
queue = Queue()
job = Job.create(
main,
description="update nvd feed",
result_ttl=1000,
)
queue.enqueue_job(job)
response_object = {
"job_data": {
"job_id": job.get_id(),
"job_status": job.get_status(),
"job_queue_position": job.get_position(),
"job_description": job.description,
"job_created_at": job.created_at,
"job_started_at": job.started_at,
"job_ended_at": job.ended_at,
"job_result": job.result,
}
}
return response_object