diff --git a/lib/resque/scheduler/server.rb b/lib/resque/scheduler/server.rb index 286118a7..9f3faeb9 100644 --- a/lib/resque/scheduler/server.rb +++ b/lib/resque/scheduler/server.rb @@ -97,7 +97,11 @@ def delayed_jobs_klass end def delayed_search - @jobs = find_job(params[:search]) + @jobs = if params[:search_args]=='checked' + find_jobs_with_expr(params[:search]) + else + find_job(params[:search]) + end erb scheduler_template('search') end @@ -151,6 +155,11 @@ def queue_from_class_name(class_name) ) end + def find_jobs_with_expr(search_expr) + results = working_jobs_for_expr(search_expr) + results + delayed_jobs_for_search_expr(search_expr) + end + def find_job(worker) worker = worker.downcase results = working_jobs_for_worker(worker) @@ -243,6 +252,33 @@ def working_jobs_for_worker(worker) end end + def working_jobs_for_expr(expr) + [].tap do |results| + working = [*Resque.working] + work = working.select do |w| + w.job && w.job['payload'].inspect.match(/#{expr}/) + end + work.each do |w| + results += [ + w.job['payload'].merge( + 'queue' => w.job['queue'], 'where_at' => 'working' + ) + ] + end + end + end + + def delayed_jobs_for_search_expr(expr) + schedule_size = Resque.delayed_queue_schedule_size + [].tap do |dels| + Resque.delayed_queue_peek(0, schedule_size).map do |d| + Resque.delayed_timestamp_peek(d, 0, Resque.delayed_timestamp_size(d)).select do |j| + dels << j.merge!('timestamp' => d, 'where_at' => 'delayed') if j.inspect.match(/#{expr}/i) + end + end + end + end + def delayed_jobs_for_worker(_worker) [].tap do |dels| schedule_size = Resque.delayed_queue_schedule_size diff --git a/lib/resque/scheduler/server/views/delayed.erb b/lib/resque/scheduler/server/views/delayed.erb index 023c2b7a..7e5998f2 100644 --- a/lib/resque/scheduler/server/views/delayed.erb +++ b/lib/resque/scheduler/server/views/delayed.erb @@ -46,7 +46,7 @@ <%= h(show_job_arguments(job['args'])) if job && delayed_timestamp_size == 1 %> <% if job %> - All schedules + All schedules <% end %> diff --git a/lib/resque/scheduler/server/views/search_form.erb b/lib/resque/scheduler/server/views/search_form.erb index b717bfb6..2255c973 100644 --- a/lib/resque/scheduler/server/views/search_form.erb +++ b/lib/resque/scheduler/server/views/search_form.erb @@ -1,4 +1,6 @@
+ /> +
diff --git a/test/resque-web_test.rb b/test/resque-web_test.rb index 35829342..400d1016 100644 --- a/test/resque-web_test.rb +++ b/test/resque-web_test.rb @@ -101,7 +101,7 @@ test "contains link to all schedules for class #{job['class']}" do Resque.enqueue_at(Time.now + job['t'], job['class'], *job['args']) get '/delayed' - assert !(last_response.body =~ %r{/delayed/jobs/#{URI.escape(job['class'].to_s)}}).nil? + assert !(last_response.body =~ %r{/delayed/jobs/#{URI::Parser.new.escape(job['class'].to_s)}}).nil? end end end @@ -112,7 +112,7 @@ Resque.enqueue_at(@t, SomeIvarJob, 'foo', 'bar') get( URI('/delayed/jobs/SomeIvarJob?args=' << - URI.encode(%w(foo bar).to_json)).to_s + URI.encode_www_form_component(%w(foo bar).to_json)).to_s ) end @@ -135,7 +135,7 @@ def self.queue Resque.enqueue_at(@t, Foo::Bar, 'foo', 'bar') get( URI('/delayed/jobs/Foo::Bar?args=' << - URI.encode(%w(foo bar).to_json)).to_s + URI.encode_www_form_component(%w(foo bar).to_json)).to_s ) end