example/log_stats in log_stats-0.4.6 vs example/log_stats in log_stats-0.4.7

- old
+ new

@@ -91,8 +91,31 @@ } config = LogStats::Config.default_config. merge(custom_config). merge(LogStats::Config.env_config) -log_file_data = LogStats::Logger.elapsed(config, "Reading file") { ARGF.readlines } -data = LogStats.get_data(log_file_data, config) -puts JSON.pretty_generate(data) +file_path = ARGV[0] +dir_path = file_path[/^.+(?=\.[^.]+$)/] # File path minus extension +events_path = File.join(dir_path, 'events.json') +stats_path = File.join(dir_path, 'stats.json') + +if File.exists?(events_path) + # NOTE: it's faster to read cached JSON events data than processing the log file + events = LogStats::Logger.elapsed(config, "Reading and parsing #{events_path}") do + JSON.parse(IO.read("events.json")) + end +else + log_file_data = LogStats::Logger.elapsed(config, "Reading log file #{file_path}") do + IO.readlines(file_path) + end + events = LogStats.get_events(log_file_data, config) + LogStats::Logger.elapsed(config, "Writing #{events_path}") do + Dir.mkdir(dir_path) if !File.exists?(dir_path) + File.write(events_path, JSON.pretty_generate(events)) + end +end + +stats = LogStats.process_events(events, config) + +LogStats::Logger.elapsed(config, "Writing stats output to #{stats_path}") do + File.write(stats_path, JSON.pretty_generate(stats)) +end