-
Notifications
You must be signed in to change notification settings - Fork 0
/
core.clj
130 lines (121 loc) · 4.2 KB
/
core.clj
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
(ns cljobq-web.controllers.core
(:require
[cljobq-web.views.core :as views]
[cljobq-web.middleware :as middleware]
[cljobq.job :as cj]
[hiccup.util :refer [url to-str]]
[ring.util.response :refer [redirect]]))
(defn jobs-controller [filt request queue]
(let [ctx (::middleware/context request)
db (:db ctx)
queue-names (cj/list-queue-names db)
stats (cj/get-stats db queue)
jobs (cond->> (cj/list-jobs db queue)
(= filt :queued) (filter #(= (:status %) "pending"))
(= filt :scheduled) (filter #(= (:status %) "scheduled")))]
(views/job-list
{:filt filt
:request request
:flash (:flash request)
:queue queue
:queue-names queue-names
:stats stats
:jobs jobs})))
(defn failed-jobs-controller [request queue]
(let [ctx (::middleware/context request)
db (:db ctx)
queue-names (cj/list-queue-names db)
stats (cj/get-stats db queue)
jobs (cj/list-failed-jobs db queue)]
(views/failed-job-list
{:flash (:flash request)
:request request
:queue queue
:queue-names queue-names
:stats stats
:jobs jobs})))
(defn recurring-jobs-controller [request queue]
(let [ctx (::middleware/context request)
db (:db ctx)
queue-names (cj/list-queue-names db)
stats (cj/get-stats db queue)
jobs (cj/list-recurring-jobs db queue)]
(views/recurring-job-list
{:flash (:flash request)
:request request
:queue queue
:queue-names queue-names
:stats stats
:jobs jobs})))
(defn job-controller [request id]
(let [ctx (::middleware/context request)
db (:db ctx)
job (-> (cj/get-job-by-id db {:id id})
cj/dbjob->friendly-job)]
(views/single-job
{:flash (:flash request)
:request request
:job job})))
(defn failed-job-controller [request id]
(let [ctx (::middleware/context request)
db (:db ctx)
job (-> (cj/get-failed-job-by-id db {:id id})
cj/dbjob->friendly-job)
related-job (some->> (:related-job-id job)
(cj/get-job-by-id db)
cj/dbjob->friendly-job)]
(views/single-failed-job
{:flash (:flash request)
:request request
:job job
:related-job related-job})))
(defn run-job-controller [request id]
(let [ctx (::middleware/context request)
db (:db ctx)
job (-> (cj/get-job-by-id db {:id id})
cj/dbjob->friendly-job)
{:keys [queue job-name]} job]
(cj/reenqueue-job! db {:id id})
(-> (redirect (to-str (url "/queued" {:queue queue})))
(assoc :flash
(str "Job "
job-name
" ["
queue
"] scheduled to run immediately.")))))
(defn retry-failed-controller [request id]
(let [ctx (::middleware/context request)
db (:db ctx)
job (-> (cj/get-failed-job-by-id db {:id id})
cj/dbjob->friendly-job)
{:keys [queue job-name]} job]
(cj/retry-failed-job! db {:id id})
(-> (redirect (to-str (url "/queued" {:queue queue})))
(assoc :flash
(str "Job "
job-name
" ["
queue
"] scheduled to retry immediately.")))))
(defn delete-failed-controller [request id]
(let [ctx (::middleware/context request)
db (:db ctx)
job (-> (cj/get-failed-job-by-id db {:id id})
cj/dbjob->friendly-job)
{:keys [queue job-name]} job]
(cj/delete-failed-job-by-id! db {:id id})
(-> (redirect (to-str (url "/failed" {:queue queue})))
(assoc :flash
(str "Failed job "
job-name
" ["
queue
"] deleted.")))))
(defn clear-failed-controller [request queue]
(let [ctx (::middleware/context request)
db (:db ctx)]
(if queue
(cj/reset-failed-jobs-by-queue! db {:queue queue})
(cj/reset-failed-jobs! db))
(-> (redirect (to-str (url "/failed" {:queue queue})))
(assoc :flash "Failed jobs cleared."))))