diff --git a/code/main.rb b/code/main.rb index 699139f..50dee01 100644 --- a/code/main.rb +++ b/code/main.rb @@ -225,6 +225,34 @@ def flash(type, msg) end end + post '/q/:name/adminoper' do + res = if params[:pause] && params[:resume] && params[:down] && params[:up] + # Makes no sense + elsif params[:pause] + action = "pause" + queuemgr.pause_queue(params[:name]) + elsif params[:resume] + action = "resume" + queuemgr.resume_queue(params[:name]) + elsif params[:down] + action = "down" + queuemgr.down_queue(params[:name]) + elsif params[:up] + action = "up" + queuemgr.up_queue(params[:name]) + end + + if not res + throw :halt, [500, "500 - Couldn't #{action} queue. Internal error."] + end + if res[0] != 'ok' + throw :halt, [500, "500 - Couldn't #{action} queue. #{res.inspect}."] + end + + flash :notice, "Successfully #{action}d queue #{params[:name]}" + redirect back + end + post '/q/:name/restart' do res = queuemgr.restart_queue(params[:name]) diff --git a/code/public/css/rq.css b/code/public/css/rq.css index 58be57c..200315b 100644 --- a/code/public/css/rq.css +++ b/code/public/css/rq.css @@ -182,6 +182,15 @@ form .note { font-style: italic; } +form.inline { + padding: 0; + margin: 0; +} + +form.inline button { + width: 5em; +} + #queue-lists {table-layout: fixed} #queue-lists td, #queue-lists th {padding: 5px} #queue-lists th {font-size: 20px} diff --git a/code/queuemgr.rb b/code/queuemgr.rb index 401a8aa..c418dcb 100644 --- a/code/queuemgr.rb +++ b/code/queuemgr.rb @@ -103,6 +103,68 @@ def handle_request(sock) resp = [(Time.now - @start_time).to_i, ].to_json send_packet(sock, resp) + when 'down_queue' + if valid_queue_name(arg) && queue = @queues[arg] + f = File.new("config/#{arg}.down", File::CREAT, 0644) rescue nil + if f + resp = ['ok', arg].to_json + else + resp = ['fail', 'not allowed to down'].to_json + end + else + resp = ['fail', 'invalid queue name'].to_json + end + send_packet(sock, resp) + + when 'up_queue' + if valid_queue_name(arg) && queue = @queues[arg] + if File.exists? "config/#{arg}.down" + count = File.unlink "config/#{arg}.down" rescue 0 + if count > 0 + resp = ['ok', arg].to_json + else + resp = ['fail', 'not allowed to up'].to_json + end + else + # Not downed anyways, return success + resp = ['ok', arg].to_json + end + else + resp = ['fail', 'invalid queue name'].to_json + end + send_packet(sock, resp) + + when 'pause_queue' + if valid_queue_name(arg) && queue = @queues[arg] + f = File.new("config/#{arg}.pause", File::CREAT, 0644) rescue nil + if f + resp = ['ok', arg].to_json + else + resp = ['fail', 'not allowed to pause'].to_json + end + else + resp = ['fail', 'invalid queue name'].to_json + end + send_packet(sock, resp) + + when 'resume_queue' + if valid_queue_name(arg) && queue = @queues[arg] + if File.exists? "config/#{arg}.pause" + count = File.unlink "config/#{arg}.pause" rescue 0 + if count > 0 + resp = ['ok', arg].to_json + else + resp = ['fail', 'not allowed to resume'].to_json + end + else + # Not paused anyways, return success + resp = ['ok', arg].to_json + end + else + resp = ['fail', 'invalid queue name'].to_json + end + send_packet(sock, resp) + when 'restart_queue' stop_queue(arg) # Reset the error count because the queue was manually restarted diff --git a/code/queuemgrclient.rb b/code/queuemgrclient.rb index a6bdbea..d2a4d03 100644 --- a/code/queuemgrclient.rb +++ b/code/queuemgrclient.rb @@ -45,6 +45,10 @@ def read_pid queues create_queue create_queue_link + up_queue + down_queue + pause_queue + resume_queue restart_queue delete_queue } diff --git a/code/views/_main_queue_row.erb b/code/views/_main_queue_row.erb index 47ed6f3..c75132e 100644 --- a/code/views/_main_queue_row.erb +++ b/code/views/_main_queue_row.erb @@ -5,7 +5,11 @@ raise unless qc.running? admin_stat, oper_stat = qc.status -%> +<% if admin_stat != 'DOWN' -%>
<%= msgs_labels.zip(qc.num_messages.values_at(*msgs_labels)).map{|ab| "#{ab[0]}:#{ab[1].to_s.ljust(4)} "}.join %>