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