class Smith::Commands::Dump

Public Instance Methods

dump() click to toggle source
# File lib/smith/commands/smithctl/dump.rb, line 14
def dump
  case target.size
  when 0
    "No queue specified. Please specify a queue."
  when 1
    queue = target.first
    Messaging::Queue.number_of_messages(queue) do |queue_length|
      Messaging::Receiver.new(queue, :auto_ack => false, :prefetch => 1000, :passive => true) do |receiver|

        count = 0
        t_start = Time.now.to_f

        receiver.on_error do |ch,channel_close|
          raise
          case channel_close.reply_code
          when 404
            responder.succeed("Queue does not exist: #{queue}")
          else
            responder.succeed("Unknown error: #{channel_close.reply_text}")
          end
          Smith.stop
        end

        if queue_length > 0
          EM.add_periodic_timer(1) do
            Messaging::Queue.number_of_messages(queue) do |queue_length|
              if queue_length == 0
                t_end = Time.now.to_f
                if options[:verbose]
                  responder.succeed("dumped #{count} messages in #{t_end - t_start} seconds.")
                else
                  responder.succeed("")
                end
              end
            end
          end

          receiver.subscribe do |payload, r|
            if payload
              EM.next_tick do
                STDOUT.puts MultiJson.dump(payload)
              end
            end
            count += 1
            r.ack(true)
          end
        else
          responder.succeed("No messages on queue: #{queue}")
        end
      end
    end
  else
    "You can only specify one queue at a time"
  end
end
execute() click to toggle source
# File lib/smith/commands/smithctl/dump.rb, line 6
def execute
  if options[:'yes-i-want-to-remove-all-acls-from-the-queue']
    dump
  else
    responder.succeed("Missing option. You need to supply the ridiculously long anti-fuckup option.")
  end
end

Private Instance Methods

options_spec() click to toggle source
# File lib/smith/commands/smithctl/dump.rb, line 72
def options_spec
  banner "Dump a queue to STDOUT.\n\n  This is a very DANGEROUS command in that it removes all messages from a queue.", "<queue>"

  opt    :'yes-i-want-to-remove-all-acls-from-the-queue',  "Remove all acls from the queue and print to stdout", :type => :boolean,  :short => :none
  opt    :verbose,                                         "Print the number of acls dumped.", :type => :boolean,  :short => :v
end