class Middleware::MetricsMiddleware
def call(env)
def call(env) start_time = Time.now @status, @headers, @response = @app.call(env) end_time = Time.now if ZuoraConnect.configuration.enable_inbound_metrics_flag == true # If the url contains any CSS or JavaScript files then do not collect metrics for them block_words = ["css", "assets", "jpg", "png", "jpeg", "ico"] if block_words.any? { |word| env['PATH_INFO'].include?(word) } return [@status, @headers, @response] end response_time = end_time - start_time 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 # Writing to telegraf: Handle 404 and 500 requests if @status == 404 || @status == 304 # Getting the endpoint and content_type request_path = @status == 404 ? "ActionController#RoutingError" : env["action_controller.instance"].present? ? "#{env["action_controller.instance"].class}##{env["action_controller.instance"].action_name}" : "" # 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" # end content_type = @headers['Content-Type'].split(';')[0] if @headers['Content-Type'] ZuoraConnect::AppInstanceBase.write_to_telegraf("endpoint_name": request_path, "method_name": env['REQUEST_METHOD'], "status_code": @status, "response_time": response_time, "content_type": content_type, "direction": "inbound") if request_path.present? end end [@status, @headers, @response] end
def initialize(app)
def initialize(app) @app = app end