aboutsummaryrefslogtreecommitdiff
path: root/src/com/github/ivarref
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/github/ivarref')
-rw-r--r--src/com/github/ivarref/yoltq.clj23
-rw-r--r--src/com/github/ivarref/yoltq/impl.clj5
2 files changed, 27 insertions, 1 deletions
diff --git a/src/com/github/ivarref/yoltq.clj b/src/com/github/ivarref/yoltq.clj
index 0f63e25..8c8ca7a 100644
--- a/src/com/github/ivarref/yoltq.clj
+++ b/src/com/github/ivarref/yoltq.clj
@@ -257,6 +257,29 @@
(sort-by (juxt :qname :status))
(vec))))
+(defn job-group-progress [queue-name job-group]
+ (let [{:keys [conn]} @*config*
+ db (d/db conn)]
+ (->> (d/q '[:find ?e ?qname ?job-group ?status
+ :keys :e :qname :job-group :status
+ :in $ ?qname ?job-group
+ :where
+ [?e :com.github.ivarref.yoltq/queue-name ?qname]
+ [?e :com.github.ivarref.yoltq/job-group ?job-group]
+ [?e :com.github.ivarref.yoltq/status ?status]]
+ db queue-name job-group)
+ (mapv #(select-keys % [:qname :job-group :status]))
+ (mapv (fn [qitem] {qitem 1}))
+ (reduce (partial merge-with +) {})
+ (mapv (fn [[{:keys [qname job-group status]} v]]
+ (array-map
+ :qname qname
+ :job-group job-group
+ :status status
+ :count v)))
+ (sort-by (juxt :qname :job-group :status))
+ (vec))))
+
(defn get-errors [qname]
(let [{:keys [conn]} @*config*
db (d/db conn)]
diff --git a/src/com/github/ivarref/yoltq/impl.clj b/src/com/github/ivarref/yoltq/impl.clj
index ac573d1..ffb1ad8 100644
--- a/src/com/github/ivarref/yoltq/impl.clj
+++ b/src/com/github/ivarref/yoltq/impl.clj
@@ -12,6 +12,7 @@
[#:db{:ident :com.github.ivarref.yoltq/id, :cardinality :db.cardinality/one, :valueType :db.type/uuid, :unique :db.unique/identity}
#:db{:ident :com.github.ivarref.yoltq/ext-id, :cardinality :db.cardinality/one, :valueType :db.type/string, :unique :db.unique/value}
#:db{:ident :com.github.ivarref.yoltq/queue-name, :cardinality :db.cardinality/one, :valueType :db.type/keyword, :index true}
+ #:db{:ident :com.github.ivarref.yoltq/job-group, :cardinality :db.cardinality/one, :valueType :db.type/keyword, :index true}
#:db{:ident :com.github.ivarref.yoltq/status, :cardinality :db.cardinality/one, :valueType :db.type/keyword, :index true}
#:db{:ident :com.github.ivarref.yoltq/payload, :cardinality :db.cardinality/one, :valueType :db.type/string}
#:db{:ident :com.github.ivarref.yoltq/payload-bytes, :cardinality :db.cardinality/one, :valueType :db.type/bytes}
@@ -103,7 +104,9 @@
(pr-str-safe :depends-on [q ext-id]))
(throw (ex-info (str ":depends-on not found in database. Queue: " q ", id: " ext-id) opts))))
(when-let [ext-id (:id opts)]
- {:com.github.ivarref.yoltq/ext-id (pr-str-safe :id [queue-name ext-id])}))))
+ {:com.github.ivarref.yoltq/ext-id (pr-str-safe :id [queue-name ext-id])})
+ (when-let [job-group (:job-group opts)]
+ {:com.github.ivarref.yoltq/job-group job-group}))))
(do
(log/error "Did not find registered handler for queue" queue-name)
(throw (ex-info (str "Did not find registered handler for queue: " queue-name) {:queue queue-name})))))