Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions lib/delayed/monitor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,7 @@ def as_expression(aggregate_function, aggregate_expression, column_name)
end

def count_grouped
if Job.connection.supports_partial_index?
failed_count_grouped.merge(live_count_grouped) { |_, l, f| l + f }
else
grouped_query(jobs, count: [:count, '*']).transform_values(&:count)
end
failed_count_grouped.merge(live_count_grouped) { |_, l, f| l + f }
end

def live_count_grouped
Expand Down
56 changes: 14 additions & 42 deletions spec/delayed/__snapshots__/monitor_spec.rb.snap
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,7 @@ SELECT SUM(count) AS count,
queue AS queue
FROM (SELECT `delayed_jobs`.`priority`, `delayed_jobs`.`queue`, COUNT(*) AS count
FROM `delayed_jobs`
WHERE `delayed_jobs`.`failed_at` IS NOT NULL
GROUP BY `delayed_jobs`.`priority`, `delayed_jobs`.`queue`) subquery
GROUP BY CASE WHEN priority < 10 THEN 0 WHEN priority < 20 THEN 10 WHEN priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `queue`

Expand All @@ -442,10 +443,9 @@ SELECT SUM(count) AS count,
-> Materialize (cost=...)
-> Table scan on <temporary>
-> Aggregate using temporary table
-> Covering index scan on delayed_jobs using idx_delayed_jobs_live (cost=...)
-> Filter: (delayed_jobs.failed_at is not null) (cost=...)
-> Covering index range scan on delayed_jobs using idx_delayed_jobs_live over (NULL < failed_at) (cost=...)
---
-- QUERIES FOR `future_count`:
---------------------------------
SELECT SUM(count) AS count,
SUM(future_count) AS future_count,
SUM(erroring_count) AS erroring_count,
Expand All @@ -471,6 +471,9 @@ SELECT SUM(count) AS count,
-> Filter: (delayed_jobs.failed_at is null) (cost=...)
-> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
---
-- QUERIES FOR `future_count`:
---------------------------------
-- (no new queries)
-- QUERIES FOR `locked_count`:
---------------------------------
SELECT SUM(claimed_count) AS claimed_count,
Expand Down Expand Up @@ -503,24 +506,7 @@ SELECT SUM(claimed_count) AS claimed_count,
-- (no new queries)
-- QUERIES FOR `failed_count`:
---------------------------------
SELECT SUM(count) AS count,
CASE WHEN priority < 10 THEN 0 WHEN priority < 20 THEN 10 WHEN priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS priority,
queue AS queue
FROM (SELECT `delayed_jobs`.`priority`, `delayed_jobs`.`queue`, COUNT(*) AS count
FROM `delayed_jobs`
WHERE `delayed_jobs`.`failed_at` IS NOT NULL
GROUP BY `delayed_jobs`.`priority`, `delayed_jobs`.`queue`) subquery
GROUP BY CASE WHEN priority < 10 THEN 0 WHEN priority < 20 THEN 10 WHEN priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `queue`

-> Table scan on <temporary>
-> Aggregate using temporary table
-> Table scan on subquery (cost=...)
-> Materialize (cost=...)
-> Table scan on <temporary>
-> Aggregate using temporary table
-> Filter: (delayed_jobs.failed_at is not null) (cost=...)
-> Covering index range scan on delayed_jobs using idx_delayed_jobs_live over (NULL < failed_at) (cost=...)
---
-- (no new queries)
-- QUERIES FOR `max_lock_age`:
---------------------------------
-- (no new queries)
Expand All @@ -546,6 +532,7 @@ SELECT SUM(count) AS count,
queue AS queue
FROM (SELECT `delayed_jobs`.`priority`, `delayed_jobs`.`queue`, COUNT(*) AS count
FROM `delayed_jobs`
WHERE `delayed_jobs`.`failed_at` IS NOT NULL
GROUP BY `delayed_jobs`.`priority`, `delayed_jobs`.`queue`) subquery
GROUP BY CASE WHEN priority < 10 THEN 0 WHEN priority < 20 THEN 10 WHEN priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `queue`

Expand All @@ -555,10 +542,9 @@ SELECT SUM(count) AS count,
-> Materialize (cost=...)
-> Table scan on <temporary>
-> Aggregate using temporary table
-> Table scan on delayed_jobs (cost=...)
-> Filter: (delayed_jobs.failed_at is not null) (cost=...)
-> Table scan on delayed_jobs (cost=...)
---
-- QUERIES FOR `future_count`:
---------------------------------
SELECT SUM(count) AS count,
SUM(future_count) AS future_count,
SUM(erroring_count) AS erroring_count,
Expand All @@ -584,6 +570,9 @@ SELECT SUM(count) AS count,
-> Filter: (delayed_jobs.failed_at is null) (cost=...)
-> Table scan on delayed_jobs (cost=...)
---
-- QUERIES FOR `future_count`:
---------------------------------
-- (no new queries)
-- QUERIES FOR `locked_count`:
---------------------------------
SELECT SUM(claimed_count) AS claimed_count,
Expand Down Expand Up @@ -616,24 +605,7 @@ SELECT SUM(claimed_count) AS claimed_count,
-- (no new queries)
-- QUERIES FOR `failed_count`:
---------------------------------
SELECT SUM(count) AS count,
CASE WHEN priority < 10 THEN 0 WHEN priority < 20 THEN 10 WHEN priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS priority,
queue AS queue
FROM (SELECT `delayed_jobs`.`priority`, `delayed_jobs`.`queue`, COUNT(*) AS count
FROM `delayed_jobs`
WHERE `delayed_jobs`.`failed_at` IS NOT NULL
GROUP BY `delayed_jobs`.`priority`, `delayed_jobs`.`queue`) subquery
GROUP BY CASE WHEN priority < 10 THEN 0 WHEN priority < 20 THEN 10 WHEN priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `queue`

-> Table scan on <temporary>
-> Aggregate using temporary table
-> Table scan on subquery (cost=...)
-> Materialize (cost=...)
-> Table scan on <temporary>
-> Aggregate using temporary table
-> Filter: (delayed_jobs.failed_at is not null) (cost=...)
-> Table scan on delayed_jobs (cost=...)
---
-- (no new queries)
-- QUERIES FOR `max_lock_age`:
---------------------------------
-- (no new queries)
Expand Down