module Ecoportal::API::Common::ElasticApmIntegration

Constants

APM_SERVICE_NAME

Public Instance Methods

log_unexpected_server_error(response) click to toggle source

Log only errors that are only server's responsibility

# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 16
def log_unexpected_server_error(response)
  raise "Expecting Ecoportal::API::Common::Response. Given: #{response.class}" unless response.is_a?(Common::Response)
  return nil unless elastic_apm_service
  return nil unless unexpected_server_error?(response.status)
  if ElasticAPM.running?
    ElasticAPM.report(UnexpectedServerError.new(response.status, response.body))
  end
end

Private Instance Methods

elastic_apm_account_id() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 84
def elastic_apm_account_id
  @elastic_apm_account_id ||= ENV['ELASTIC_APM_ACCOUNT_ID']
end
elastic_apm_base_url() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 88
def elastic_apm_base_url
  @elastic_apm_base_url ||= "apm.#{elastic_apm_region}.aws.cloud.es.io"
end
elastic_apm_key() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 80
def elastic_apm_key
  @elastic_apm_key ||= ENV['ELASTIC_APM_KEY']
end
elastic_apm_options() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 54
def elastic_apm_options
  {
    service_name: APM_SERVICE_NAME,
    server_url:   elastic_apm_url,
    secret_token: elastic_apm_key,
    environment:  environment,
    #http_compression: false,
    transaction_sample_rate:  0.1,
    transaction_max_spans:    100,
    span_frames_min_duration: "5ms"
  }.tap do |options|
    options.merge!({
      log_level: Logger::DEBUG,
      log_path:  File.join(__dir__, "elastic_apm.log")
    }) if false
  end
end
elastic_apm_port() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 97
def elastic_apm_port
  @elastic_apm_port ||= ENV['ELASTIC_APM_PORT'] || "443"
end
elastic_apm_region() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 92
def elastic_apm_region
  @elastic_apm_region ||= ENV['ELASTIC_APM_REGION'] || "ap-southeast-2"
end
elastic_apm_service() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 44
def elastic_apm_service
  return false if @disable_apm
  begin
    ElasticAPM.start(**elastic_apm_options) unless ElasticAPM.running?
  rescue StandardError => e
    @disable_apm = true
    puts "ElasticAPM services not available: #{e}"
  end
end
elastic_apm_url() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 72
def elastic_apm_url
  @elastic_apm_url ||= "https://".tap do |url|
    url << "#{elastic_apm_account_id}"
    url << ".#{elastic_apm_base_url}"
    url << ":#{elastic_apm_port}"
  end
end
environment() click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 101
def environment
  @environment ||= "unknown".tap do |value|
    if instance_variable_defined?(:@host) && env = @host.gsub(".ecoportal.com", '')
      value.clear << env
    end
  end
end
unexpected_server_error?(code) click to toggle source
# File lib/ecoportal/api/common/elastic_apm_integration.rb, line 27
def unexpected_server_error?(code)
  code && (code >= 500) && (code <= 599)
end