diff --git a/Changes.md b/Changes.md index faee5bd2..c8cf07a3 100644 --- a/Changes.md +++ b/Changes.md @@ -1,3 +1,8 @@ +2.17.7 +----------- + +- Auto-prune jobs older than one hour from the Workers page [#1508] + 2.17.6 ----------- diff --git a/lib/sidekiq/web.rb b/lib/sidekiq/web.rb index 2288b4e3..d764633e 100644 --- a/lib/sidekiq/web.rb +++ b/lib/sidekiq/web.rb @@ -38,7 +38,7 @@ module Sidekiq end get "/workers" do - erb :index + erb :workers end get "/queues" do diff --git a/lib/sidekiq/web_helpers.rb b/lib/sidekiq/web_helpers.rb index ba881e16..3acecf2b 100644 --- a/lib/sidekiq/web_helpers.rb +++ b/lib/sidekiq/web_helpers.rb @@ -47,13 +47,28 @@ module Sidekiq end end + MAX_JOB_DURATION = 60*60 + def workers @workers ||= begin to_rem = [] workers = Sidekiq.redis do |conn| conn.smembers('workers').map do |w| msg = conn.get("worker:#{w}") - msg ? [w, Sidekiq.load_json(msg)] : (to_rem << w; nil) + if !msg + to_rem << w + nil + else + m = Sidekiq.load_json(msg) + run_at = Time.at(m['run_at']) + # prune jobs older than one hour + if run_at < (Time.now - MAX_JOB_DURATION) + to_rem << w + nil + else + [w, m, run_at] + end + end end.compact.sort { |x| x[1] ? -1 : 1 } end diff --git a/web/views/_workers.erb b/web/views/_workers.erb index 79afb8c8..d5896690 100644 --- a/web/views/_workers.erb +++ b/web/views/_workers.erb @@ -6,7 +6,7 @@ <%= t('Arguments') %> <%= t('Started') %> - <% workers.each_with_index do |(worker, msg), index| %> + <% workers.each_with_index do |(worker, msg, run_at), index| %> <%= worker %> @@ -16,7 +16,7 @@
<%= display_args(msg['payload']['args']) %>
- <%= relative_time(msg['run_at'].is_a?(Numeric) ? Time.at(msg['run_at']) : Time.parse(msg['run_at'])) %> + <%= relative_time(run_at) %> <% end %> diff --git a/web/views/index.erb b/web/views/workers.erb similarity index 100% rename from web/views/index.erb rename to web/views/workers.erb