class Slnky::CLI::Command

Public Instance Methods

amqp(msg) click to toggle source
# File lib/slnky/cli/command.rb, line 44
def amqp(msg)
  response = msg.response
  tx = Slnky::Transport.instance

  tx.start!(self) do |_|
    queue = tx.queue(response, 'response', durable: false, auto_delete: true, routing_key: response)
    queue.subscribe do |raw|
      message = Slnky::Message.parse(raw)
      level = message.level.to_sym
      if level == :complete
        tx.stop!
      elsif level == :start
        # start tracking responders?
      else
        out level, message.message, message.service
      end
    end

    EventMachine.add_periodic_timer(timeout) do
      out :error, "timed out after #{timeout} seconds"
      tx.stop!('Timed out')
    end

    EventMachine.add_timer(1) do
      puts "sending request:".colorize(:light_white)
      Slnky.notify(msg)
    end
  end

  # sleep 10
  # Slnky.notify(msg)
end
execute() click to toggle source
# File lib/slnky/cli/command.rb, line 26
def execute
  @name = service
  Slnky::Config.configure(@name, environment: environment)
  data = {
      name: "slnky.#{service}.command",
      command: service == 'help' ? nil : command,
      args: args,
      response: "command-#{$$}",
  }
  msg = Slnky::Message.new(data)
  puts JSON.pretty_generate(msg.to_h) if dry_run?
  amqp(msg) unless dry_run?
end
name() click to toggle source
# File lib/slnky/cli/command.rb, line 40
def name
  @name
end
out(level, message, service=nil) click to toggle source
# File lib/slnky/cli/command.rb, line 77
def out(level, message, service=nil)
  service ||= Slnky::System.pid('local')
  lines = message.split("\n")
  lines.each do |line|
    str = service.colorize(:light_black)
    color = case level
              when :warn
                :yellow
              when :error
                :red
              else
                :white
    end
    str << (" [ %5s ] %s" % [level.to_s.upcase, line]).colorize(color)
    # puts "#{service} [#{level}] #{line}"
    puts str
  end
end