class AddyLambda::Common

Generic methods such as logging, error handling HTTP requests etc.

Constants

VARIABLE_DIRECT
VARIABLE_QUERYSTRING

Public Class Methods

delete_request(url, headers = nil) click to toggle source
# File lib/addy_lambda/common.rb, line 86
def self.delete_request(url, headers = nil)
  uri = URI(url)
  request = Net::HTTP::Delete.new(uri.request_uri)
  http_request(request, uri, headers)
end
enable_scout_apm() click to toggle source
# File lib/addy_lambda/common.rb, line 72
def self.enable_scout_apm
  return unless ENV['SCOUT_MONITOR'] == 'true'

  require 'scout_apm'
  ScoutApm::Agent.instance.install
end
generic_log(logger, event, context) click to toggle source
# File lib/addy_lambda/common.rb, line 9
def self.generic_log(logger, event, context)
  logger.debug('## EVENT')
  logger.debug(event.inspect)
  logger.debug('## CONTEXT')
  logger.debug(context.inspect)
end
get_body_as_object(event) click to toggle source
# File lib/addy_lambda/common.rb, line 16
def self.get_body_as_object(event)
  if event.key?('body') and event['body'].is_a? String
    JSON.parse(event['body'])
  elsif event.key?('body')
    event['body']
  else
    event
  end
end
get_error_json(context, error) click to toggle source
# File lib/addy_lambda/common.rb, line 56
def self.get_error_json(context, error)
  {
    "function_name": context.function_name,
    "errorType": error.class,
    "errorMessage": error.message,
    "stackTrace": error.backtrace,
    "log_group_name": context.log_group_name,
    "log_stream_name": context.log_stream_name,
    "request id": context.aws_request_id
  }.to_json
end
get_parameter(event, parameter, type, default_value = nil) click to toggle source
# File lib/addy_lambda/common.rb, line 26
def self.get_parameter(event, parameter, type, default_value = nil)
  event_body = get_body_as_object(event)

  case type
  when VARIABLE_DIRECT
    event_body.fetch(parameter, default_value)
  when VARIABLE_QUERYSTRING
    event['queryStringParameters'].fetch(parameter, default_value)
  else
    default_value
  end
end
get_request(url, params = nil, headers = nil) click to toggle source
# File lib/addy_lambda/common.rb, line 79
def self.get_request(url, params = nil, headers = nil)
  uri = URI(url)
  uri.query = URI.encode_www_form(params) if params
  request = Net::HTTP::Get.new(uri.request_uri)
  http_request(request, uri, headers)
end
handle_error(sns, logger, error, context) click to toggle source

sns = Aws::SNS::Resource.new(region: region)

# File lib/addy_lambda/common.rb, line 40
def self.handle_error(sns, logger, error, context)
  region = context.invoked_function_arn.split(':')[3]
  aws_account_id = context.invoked_function_arn.split(':')[4]

  err_msg = get_error_json(context, error)
  logger.error(err_msg)

  topic = sns.topic("arn:aws:sns:#{region}:#{aws_account_id}:system-errors")
  topic.publish(message: err_msg)
end
handle_error_and_raise(sns, logger, error, context) click to toggle source
# File lib/addy_lambda/common.rb, line 51
def self.handle_error_and_raise(sns, logger, error, context)
  handle_error(sns, logger, error, context)
  raise error
end
http_request(request, uri, headers) click to toggle source
# File lib/addy_lambda/common.rb, line 99
def self.http_request(request, uri, headers)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  headers&.each { |header, value| request[header] = value }
  response = http.request(request)
  parse_response(response)
end
logger() click to toggle source
# File lib/addy_lambda/common.rb, line 117
def self.logger
  @logger ||= Logger.new($stdout).tap { |logger| logger.level = ENV['LOG_LEVEL'].to_i }
end
parse_response(response) click to toggle source
# File lib/addy_lambda/common.rb, line 108
def self.parse_response(response)
  response_body = valid_json?(response.body) ? JSON.parse(response.body) : response.body
  return response_body if response.is_a?(Net::HTTPSuccess)

  raise_error_description(response_body['error_description'])
rescue JSON::ParserError => e
  raise_error_description(e.message)
end
post_request(url, params = nil, headers = nil) click to toggle source
# File lib/addy_lambda/common.rb, line 92
def self.post_request(url, params = nil, headers = nil)
  uri = URI(url)
  request = Net::HTTP::Post.new(uri.request_uri)
  request.set_form_data(params) if params
  http_request(request, uri, headers)
end
raise_error_description(description) click to toggle source
# File lib/addy_lambda/common.rb, line 68
def self.raise_error_description(description)
  raise StandardError, description
end
valid_json?(json) click to toggle source
# File lib/addy_lambda/common.rb, line 121
def self.valid_json?(json)
  JSON.parse(json)
  true
rescue JSON::ParserError
  false
end