class Ruboty::Handlers::Lambda

Public Instance Methods

invoke(message) click to toggle source
# File lib/ruboty/handlers/lambda.rb, line 20
def invoke(message)
  fn = message[:fname]
  json = message[:fjson]

  resp = aws_lambda.invoke({
    function_name: fn,
    invocation_type: "RequestResponse",
    log_type: "Tail",
    payload: json,
    qualifier: "$LATEST",
  })

  result = Base64.decode64(resp.log_result)
  logs = []
  fields = []

  result.each_line do |line|
    case true
    when line.start_with?('START', 'END')
      next
    when line.start_with?('REPORT')
      line[7..-1].strip.split("\t").map {|f| f.split(':', 2).map(&:strip) }.each do |f|
        fields << {
          title: f[0],
          value: f[1],
          short: true
        }
      end
    else
      field = line.strip.split("\t")
      logs << "#{field[0]} #{field[2]}"
    end
  end

  payload = resp.payload.read
  fields << {
    title: "Payload",
    value: payload
  }

  success = resp.status_code >= 200 && resp.status_code <= 299

  message.reply(logs.join("\n"), code: true, attachments: [{
    color: success ? 'good' : 'danger',
    fields: fields
  }])
end
list(message) click to toggle source
# File lib/ruboty/handlers/lambda.rb, line 11
def list(message)
  resp = aws_lambda.list_functions
  funcs = resp.functions.map do |func|
    "- #{func.function_name}"
  end

  message.reply(funcs.join("\n"), code: true)
end

Private Instance Methods

aws_lambda() click to toggle source
# File lib/ruboty/handlers/lambda.rb, line 70
def aws_lambda
  @aws_lambda ||= Aws::Lambda::Client.new
end