Sha256: ae6e9ba0be8cccf2b6b8e23136c5963d9ce6b71d78f24ea5e7d3f6bd929a77a3

Contents?: true

Size: 988 Bytes

Versions: 1

Compression:

Stored size: 988 Bytes

Contents

# frozen_string_literal: true

require 'uri'
require 'net/http'
require 'json'

module Analytics
  class Middleware
    def initialize(app)
      @app = app
      @api_key = Rails.application.secrets.ANALYTICS_API_KEY
      raise StandardError.new 'ANALYTICS_API_KEY secret unset.' if @api_key.nil?
    end

    def call(env)
      start = Time.now
      status, headers, response = @app.call(env)

      data = {
        api_key: @api_key,
        hostname: env['HTTP_HOST'],
        path: env['REQUEST_PATH'],
        user_agent: env['HTTP_USER_AGENT'],
        method: env['REQUEST_METHOD'],
        status: status,
        framework: "Rails",
        response_time: (Time.now - start).to_f.round,
      }

      Thread.new {
        log_request(data)
      }

      [status, headers, response]
    end

    private

    def log_request(data)
      uri = URI('https://api-analytics-server.vercel.app/api/log-request')
      res = Net::HTTP.post(uri, data.to_json)
    end
  end
end



Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
api_analytics-1.0.2 lib/api_analytics.rb