class Octo

Public Class Methods

new(options = {}) click to toggle source
# File lib/octo.rb, line 12
def initialize(options = {})
  @options = options.merge({
    file: false,
    multi: false
  })

  self.load
end

Public Instance Methods

run_mysql(profile, query) click to toggle source
# File lib/octo.rb, line 38
def run_mysql(profile, query)
  @config['mysql'][profile].each do |server|
    print "Running query on #{server}... "

    begin
      server_data = server.match(/(.+):(.+)@(.+)\/(.+)/)
      client = Mysql2::Client.new(username: server_data[1],
                                  password: server_data[2],
                                  host: server_data[3],
                                  database: server_data[4])

      results = client.query(query)
      puts "#{results.count} results"
      table = Terminal::Table.new(headings: results.fields) do |t|
        results.each(as: :array) do |row|
          t << row
        end
      end

      puts table
    rescue Exception => e
      puts "ERROR: #{e.inspect}"
    end
  end
end
run_ssh(profile, command) click to toggle source
# File lib/octo.rb, line 21
def run_ssh(profile, command)
  Net::SSH::Multi.start do |session|
    @config['ssh'][profile].each do |server|
      session.use server
    end

    session.exec command do |ch, stream, data|
      stream = stream == :stderr ? $stderr : $stdout
      data.each_line do |line|
        stream.puts "[#{green(ch.properties[:server].to_s)}] #{line}"
      end
      stream.flush
    end
    session.loop
  end
end