lib/log_stats.rb in log_stats-0.3.0 vs lib/log_stats.rb in log_stats-0.4.0

- old
+ new

@@ -1,46 +1,60 @@ require "json" require "log_stats/version" require "log_stats/line_parser" require "log_stats/logger" +require "log_stats/stats" require "log_stats/requests/stats" require "log_stats/requests/kpi" require "log_stats/requests/text_output" module LogStats def self.run(log_data, config) data = get_data(log_data, config) - if config[:stats_format] == "text" && request_config = config[:events][:requests] + if config[:output_format] == "text" && request_config = config[:events][:requests] Requests::TextOutput.print(data[:requests], request_config) end - if config[:stats_format] == "json" + if config[:output_format] == "json" puts JSON.generate(data) end data end def self.get_data(log_data, config) - logger = Logger.new(config[:verbose]) - logger.info("\nParsing request lines...") - data = LineParser.parse(log_data, config) + Logger.info(config, "\nParsing log lines...") + events = LineParser.parse(log_data, config) result = {} - if requests = data[:requests] - requests_count = requests.size - requests_config = config[:events][:requests] - logger.info("\nNumber of request lines: #{requests_count}") - logger.info("Start time: #{requests[0][:time]}") - logger.info("End time: #{requests[-1][:time]}") - - logger.info("\nCalculating request stats...") - stats = Requests::Stats.stats(requests, requests_config) - result[:requests] = { - requests_count: requests_count, - requests: requests, - stats: stats, - requests_by_status: requests.group_by { |request| request[:status] }, - requests_by_code: requests.group_by { |request| request[:code] }, - kpi: Requests::KPI.calculate(requests, stats) + if requests = events[:requests] + result[:requests] = get_requests_data(requests, config) + end + other_event_names = events.keys.reject { |k| k == :requests } + other_result = other_event_names.reduce({}) do |acc, event_name| + acc[event_name] = { + count: events[event_name].size, + fields: Stats.fields(events[event_name], config[:events][event_name]), + group_by: Stats.group_by(events[event_name], config[:events][event_name]), + events: events[event_name] } + acc end - result + result.merge(other_result) + end + + def self.get_requests_data(requests, config) + requests_count = requests.size + requests_config = config[:events][:requests] + Logger.info(config, "\nNumber of request lines: #{requests_count}") + Logger.info(config, "Start time: #{requests[0][:time]}") + Logger.info(config, "End time: #{requests[-1][:time]}") + + Logger.info(config, "\nCalculating request stats...") + stats = Requests::Stats.stats(requests, requests_config) + { + requests_count: requests_count, + requests: requests, + stats: stats, + requests_by_status: requests.group_by { |request| request[:status] }, + requests_by_code: requests.group_by { |request| request[:code] }, + kpi: Requests::KPI.calculate(requests, stats) + } end end