example/log_stats in log_stats-0.4.2 vs example/log_stats in log_stats-0.4.3

- old
+ new

@@ -2,20 +2,36 @@ ############################################################################# # This example script shows custom parsing of API requests from a log file. ############################################################################# -$:.unshift(File.dirname(__FILE__) + '/../lib') - -require 'log_stats' +require "log_stats" require "log_stats/config" require "json" require "uri" parse_time = Proc.new { |line| line[/\b20\d\d-\d\d-\d\dT\d\d:\d\d:\d\d/] } + custom_config = { - events: LogStats::Config.default_config[:events].merge({ + events: { + requests: { + # NOTE: matches Heroku router lines. Also matches Papertrails slightly modified lines. + line_pattern: /\s(heroku\/router)|(heroku\[router\]:)\s/, + fields: [ + {name: :time, parse: parse_time}, + {name: :method}, + {name: :host}, + {name: :path}, + {name: :status, numeric: true}, + {name: :code, optional: true}, + {name: :service, numeric: true} + ], + top_list_limit: 100, + apdex: {tolerating: 500, frustrated: 2000}, + apdex_goal: 0.9, + stats: false # Skip listing stats per request path to keep output size manageable + }, api_calls: { # 2017-02-19T06:21:25.522274+00:00 app[worker.2]: [WARN] [Vac::Request] Slow response time for url=http://sumore02.cmore.dk/api/tve_web/search/categories/160145/assets/ method=get status=304 size= response_time=141 line_pattern: /\s\[Vac::Request\] Slow response time\s/, fields: [ {name: :time, parse: parse_time}, @@ -24,22 +40,24 @@ {name: :response_time, numeric: true, events: true} ], group_by: { hostname: { id: Proc.new { |api_call| URI(api_call[:url]).host } - }, - method: { - id: Proc.new { |api_call| URI(api_call[:method]) } } - } + # NOTE: Grouping by HTTP method doesn't really add much at the moment, so commenting out for now + # method: { + # id: Proc.new { |api_call| URI(api_call[:method]) } + # } + }, + events: false, # Skip listing all individual API calls to keep output size manageable + limit: 5 } - }), - verbose: false + }, + verbose: true } config = LogStats::Config.default_config. merge(custom_config). merge(LogStats::Config.env_config) -log_file_data = ARGF.read +log_file_data = LogStats::Logger.elapsed(config, "Reading file") { ARGF.readlines } data = LogStats.get_data(log_file_data, config) -data[:requests] = data[:requests][:kpi] # Only output KPI from requests data puts JSON.pretty_generate(data)