class Middleware::MetricsMiddleware

def call(env)

def call(env)
  start_time = Time.now
  @status, @headers, @response = @app.call(env)
  # If the url contains any CSS or JavaScript files then do not collect metrics for them
  if ["css", "assets", "jpg", "png", "jpeg", "ico"].any? { |word| env['PATH_INFO'].include?(word) } || /.*\.js$/.match(env['PATH_INFO'])
    tags = {status: @status, controller: 'ActionController', action: 'Assets' }
    values = {response_time: ((Time.now - start_time)*1000).round(2) }
    ZuoraConnect::AppInstanceBase.write_to_telegraf(direction: 'request-inbound-assets', tags: tags, values: values)
  end
  if defined? Prometheus
    #Prometheus Stuff
    if env['PATH_INFO'] == '/connect/internal/metrics'
      #Do something before each scrape
      if defined? Resque.redis
        app_name = ENV['DEIS_APP'].present? ? "#{ENV['DEIS_APP']}" : "#{Rails.application.class.parent_name}"
        begin
          Resque.redis.ping
          Prometheus::REDIS_CONNECTION.set({connection:'redis',name:app_name},1)
          Prometheus::FINISHED_JOBS.set({type:'resque',name:app_name},Resque.info[:processed])
          Prometheus::PENDING_JOBS.set({type:'resque',name:app_name},Resque.info[:pending])
          Prometheus::ACTIVE_WORKERS.set({type:'resque',name:app_name},Resque.info[:working])
          Prometheus::WORKERS.set({type:'resque',name:app_name},Resque.info[:workers])
          Prometheus::FAILED_JOBS.set({type:'resque',name:app_name},Resque.info[:failed])
        rescue Redis::CannotConnectError
            Prometheus::REDIS_CONNECTION.set({connection:'redis',name:app_name},0)
        end
        if ZuoraConnect.configuration.custom_prometheus_update_block != nil
          ZuoraConnect.configuration.custom_prometheus_update_block.call()
        end
      end
    end
  end
  # Uncomment following block of code for handling engine requests/requests without controller
  # else
  #   # Handling requests which do not have controllers (engines)
  if env["SCRIPT_NAME"].present?
    controller_path = "#{env['SCRIPT_NAME'][1..-1]}"
    controller_path = controller_path.sub("/", "::")
    request_path = "#{controller_path}#UnknownAction"
  else
    # Writing to telegraf: Handle 404
    if [404].include?(@status)
      content_type = @headers['Content-Type'].split(';')[0] if @headers['Content-Type']
      content_type = content_type.gsub('text/javascript', 'application/javascript')
      tags = {status: @status, content_type: content_type}
   
      tags = tags.merge({controller: 'ActionController', action: 'RoutingError' })
      
      values = {response_time: ((Time.now - start_time)*1000).round(2) }
      ZuoraConnect::AppInstanceBase.write_to_telegraf(direction: :inbound, tags: tags, values: values)
    end
  end
  [@status, @headers, @response]
end

def initialize(app)

def initialize(app)
  @app = app
end