From cb6f77f8583a70092b6d372634ca9cded72bf0c3 Mon Sep 17 00:00:00 2001 From: Akinori MUSHA Date: Tue, 29 Mar 2016 18:50:23 +0900 Subject: [PATCH 1/3] Simplify the log format for Dry Run - Omit the severity initial and progname - Show the elapsed time in HH:MM:SS instead of full date-time --- app/concerns/dry_runnable.rb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/concerns/dry_runnable.rb b/app/concerns/dry_runnable.rb index 61e86192..815aa9e0 100644 --- a/app/concerns/dry_runnable.rb +++ b/app/concerns/dry_runnable.rb @@ -5,7 +5,12 @@ module DryRunnable @dry_run = true log = StringIO.new - @dry_run_logger = Logger.new(log) + @started_at = Time.zone.now + @dry_run_logger = Logger.new(log).tap { |logger| + logger.formatter = proc { |severity, datetime, progname, message| + "[#{elapsed_time(datetime)}] #{severity} -- #{progname}: #{message}\n" + } + } @dry_run_results = { events: [], } @@ -13,13 +18,17 @@ module DryRunnable begin raise "#{short_type} does not support dry-run" unless can_dry_run? readonly! + @started_at = Time.zone.now + @dry_run_logger.info('Dry Run started') if event raise "This agent cannot receive an event!" unless can_receive_events? receive([event]) else check end + @dry_run_logger.info('Dry Run finished') rescue => e + @dry_run_logger.info('Dry Run failed') error "Exception during dry-run. #{e.message}: #{e.backtrace.join("\n")}" end @@ -35,6 +44,12 @@ module DryRunnable !!@dry_run end + def elapsed_time(datetime) + '%02d:%02d:%02d' % 2.times.inject([datetime - @started_at]) { |(x, *xs)| + [*x.divmod(60), *xs] + } + end + included do prepend Wrapper end From 5d63aea08ef864c3aa42820edfd18b693c60dc71 Mon Sep 17 00:00:00 2001 From: Akinori MUSHA Date: Tue, 29 Mar 2016 19:40:10 +0900 Subject: [PATCH 2/3] Update expected log in the specs --- spec/concerns/dry_runnable_spec.rb | 6 +++--- spec/controllers/agents_controller_spec.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/concerns/dry_runnable_spec.rb b/spec/concerns/dry_runnable_spec.rb index 58b392bb..1a937021 100644 --- a/spec/concerns/dry_runnable_spec.rb +++ b/spec/concerns/dry_runnable_spec.rb @@ -70,7 +70,7 @@ describe DryRunnable do [@agent.memory, counts] } - expect(results[:log]).to match(/\AE, .+ ERROR -- : Exception during dry-run. SandboxedAgent does not support dry-run: /) + expect(results[:log]).to match(/\A\[\d\d:\d\d:\d\d\] INFO -- : Dry Run failed\n\[\d\d:\d\d:\d\d\] ERROR -- : Exception during dry-run. SandboxedAgent does not support dry-run: /) expect(results[:events]).to eq([]) expect(results[:memory]).to eq({}) end @@ -86,7 +86,7 @@ describe DryRunnable do [@agent.memory, counts] } - expect(results[:log]).to match(/\AI, .+ INFO -- : Logging\nE, .+ ERROR -- : Recording error\n/) + expect(results[:log]).to match(/\A\[\d\d:\d\d:\d\d\] INFO -- : Dry Run started\n\[\d\d:\d\d:\d\d\] INFO -- : Logging\n\[\d\d:\d\d:\d\d\] ERROR -- : Recording error\n/) expect(results[:events]).to eq([{ 'test' => 'foo' }, { 'test' => 'bar' }]) expect(results[:memory]).to eq({ 'last_status' => 'ok', 'dry_run' => true }) end @@ -101,7 +101,7 @@ describe DryRunnable do [@agent.memory, counts] } - expect(results[:log]).to match(/\AI, .+ INFO -- : Logging\nE, .+ ERROR -- : Recording error\n/) + expect(results[:log]).to match(/\A\[\d\d:\d\d:\d\d\] INFO -- : Dry Run started\n\[\d\d:\d\d:\d\d\] INFO -- : Logging\n\[\d\d:\d\d:\d\d\] ERROR -- : Recording error\n/) expect(results[:events]).to eq([{ 'test' => 'superfoo' }, { 'test' => 'superbar' }]) expect(results[:memory]).to eq({ 'last_status' => 'ok', 'dry_run' => true }) end diff --git a/spec/controllers/agents_controller_spec.rb b/spec/controllers/agents_controller_spec.rb index f1485e77..cd4c65d8 100644 --- a/spec/controllers/agents_controller_spec.rb +++ b/spec/controllers/agents_controller_spec.rb @@ -406,7 +406,7 @@ describe AgentsController do [users(:bob).agents.count, users(:bob).events.count, users(:bob).logs.count, agent.name, agent.updated_at] } json = JSON.parse(response.body) - expect(json['log']).to match(/^I, .* : Fetching #{Regexp.quote(url_from_event)}$/) + expect(json['log']).to match(/^\[\d\d:\d\d:\d\d\] INFO -- : Fetching #{Regexp.quote(url_from_event)}$/) end end From 30e31045530bcbe5f470051c1837ba45617f7b82 Mon Sep 17 00:00:00 2001 From: Akinori MUSHA Date: Tue, 5 Apr 2016 17:11:31 +0900 Subject: [PATCH 3/3] Avoid potential name collision as suggested by @cantino --- app/concerns/dry_runnable.rb | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/concerns/dry_runnable.rb b/app/concerns/dry_runnable.rb index 815aa9e0..3e7cf448 100644 --- a/app/concerns/dry_runnable.rb +++ b/app/concerns/dry_runnable.rb @@ -5,10 +5,14 @@ module DryRunnable @dry_run = true log = StringIO.new - @started_at = Time.zone.now + @dry_run_started_at = Time.zone.now @dry_run_logger = Logger.new(log).tap { |logger| logger.formatter = proc { |severity, datetime, progname, message| - "[#{elapsed_time(datetime)}] #{severity} -- #{progname}: #{message}\n" + elapsed_time = '%02d:%02d:%02d' % 2.times.inject([datetime - @dry_run_started_at]) { |(x, *xs)| + [*x.divmod(60), *xs] + } + + "[#{elapsed_time}] #{severity} -- #{progname}: #{message}\n" } } @dry_run_results = { @@ -18,7 +22,7 @@ module DryRunnable begin raise "#{short_type} does not support dry-run" unless can_dry_run? readonly! - @started_at = Time.zone.now + @dry_run_started_at = Time.zone.now @dry_run_logger.info('Dry Run started') if event raise "This agent cannot receive an event!" unless can_receive_events? @@ -44,12 +48,6 @@ module DryRunnable !!@dry_run end - def elapsed_time(datetime) - '%02d:%02d:%02d' % 2.times.inject([datetime - @started_at]) { |(x, *xs)| - [*x.divmod(60), *xs] - } - end - included do prepend Wrapper end