class ElasticAPM::Http

@api private

def initialize(config, adapter: HttpAdapter)

def initialize(config, adapter: HttpAdapter)
  @config = config
  @adapter = adapter.new(config)
  @base_payload = {
    service: ServiceInfo.build(config),
    process: ProcessInfo.build(config),
    system: SystemInfo.build(config)
  }
  @filters = Filters.new(config)
end

def post(path, payload = {})

def post(path, payload = {})
  payload.merge! @base_payload
  filters.apply(payload)
  request = prepare_request path, payload.to_json
  response = @adapter.perform request
  return response if response.is_a?(Net::HTTPSuccess)
  error 'POST returned an unsuccessful status code (%d)', response.code
  error "apm-server's response: %s", response.body
  response
end

def prepare_request(path, data)

def prepare_request(path, data)
  @adapter.post url_for(path) do |req|
    req['Accept'] = ACCEPT
    req['Content-Type'] = CONTENT_TYPE
    req['User-Agent'] = USER_AGENT
    if (token = @config.secret_token)
      req['Authorization'] = "Bearer #{token}"
    end
    prepare_request_body! req, data
  end
end

def prepare_request_body!(req, data)

def prepare_request_body!(req, data)
  if @config.http_compression &&
     data.bytesize > @config.compression_minimum_size
    deflated = Zlib.deflate data, @config.compression_level
    req['Content-Encoding'] = 'deflate'
    req['Content-Length'] = deflated.bytesize.to_s
    req.body = deflated
  else
    req['Content-Length'] = data.bytesize.to_s
    req.body = data
  end
end

def url_for(path)

def url_for(path)
  "#{@config.server_url}#{path}"
end