request-log-analyzer 1.5.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. data/bin/request-log-analyzer +9 -5
  2. data/lib/request_log_analyzer.rb +1 -1
  3. data/lib/request_log_analyzer/aggregator/echo.rb +2 -1
  4. data/lib/request_log_analyzer/aggregator/summarizer.rb +5 -37
  5. data/lib/request_log_analyzer/controller.rb +4 -3
  6. data/lib/request_log_analyzer/file_format.rb +68 -1
  7. data/lib/request_log_analyzer/file_format/amazon_s3.rb +3 -1
  8. data/lib/request_log_analyzer/file_format/apache.rb +7 -2
  9. data/lib/request_log_analyzer/file_format/merb.rb +3 -1
  10. data/lib/request_log_analyzer/file_format/mysql.rb +10 -5
  11. data/lib/request_log_analyzer/file_format/rack.rb +1 -3
  12. data/lib/request_log_analyzer/file_format/rails.rb +5 -5
  13. data/lib/request_log_analyzer/output.rb +4 -0
  14. data/lib/request_log_analyzer/output/fancy_html.rb +31 -0
  15. data/lib/request_log_analyzer/tracker.rb +0 -105
  16. data/lib/request_log_analyzer/tracker/duration.rb +3 -62
  17. data/lib/request_log_analyzer/tracker/frequency.rb +18 -5
  18. data/lib/request_log_analyzer/tracker/numeric_value.rb +223 -0
  19. data/lib/request_log_analyzer/tracker/traffic.rb +6 -72
  20. data/request-log-analyzer.gemspec +4 -4
  21. data/spec/lib/mocks.rb +1 -0
  22. data/spec/unit/file_format/common_regular_expressions_spec.rb +53 -0
  23. data/spec/unit/file_format/mysql_format_spec.rb +1 -2
  24. data/spec/unit/file_format/rails_format_spec.rb +9 -4
  25. data/spec/unit/tracker/duration_tracker_spec.rb +2 -83
  26. data/spec/unit/tracker/{count_tracker_spec.rb → numeric_value_tracker_spec.rb} +50 -7
  27. data/spec/unit/tracker/tracker_api_spec.rb +3 -2
  28. data/spec/unit/tracker/traffic_tracker_spec.rb +0 -79
  29. metadata +8 -5
  30. data/lib/request_log_analyzer/tracker/count.rb +0 -93
@@ -2,8 +2,8 @@ Gem::Specification.new do |s|
2
2
  s.name = "request-log-analyzer"
3
3
 
4
4
  # Do not set the version and date field manually, this is done by the release script
5
- s.version = "1.5.2"
6
- s.date = "2009-12-02"
5
+ s.version = "1.5.3"
6
+ s.date = "2009-12-14"
7
7
 
8
8
  s.rubyforge_project = 'r-l-a'
9
9
 
@@ -36,6 +36,6 @@ Gem::Specification.new do |s|
36
36
 
37
37
  # The files and test_files directives are set automatically by the release script.
38
38
  # Do not change them by hand, but make sure to add the files to the git repository.
39
- s.files = %w(spec/unit/tracker/hourly_spread_spec.rb lib/request_log_analyzer/output/html.rb DESIGN.rdoc spec/fixtures/rails_unordered.log spec/fixtures/multiple_files_1.log lib/request_log_analyzer/database/source.rb README.rdoc spec/unit/file_format/amazon_s3_format_spec.rb lib/request_log_analyzer/file_format/rails_development.rb spec/fixtures/rails_22.log spec/fixtures/test_order.log spec/unit/database/base_class_spec.rb lib/request_log_analyzer/database/connection.rb lib/request_log_analyzer/aggregator.rb spec/fixtures/decompression.log lib/request_log_analyzer/file_format/apache.rb spec/unit/file_format/rack_format_spec.rb spec/fixtures/decompression.log.gz lib/request_log_analyzer/tracker/frequency.rb lib/request_log_analyzer/tracker/duration.rb tasks/github-gem.rake .gitignore spec/unit/filter/filter_spec.rb spec/lib/macros.rb spec/spec_helper.rb spec/unit/tracker/count_tracker_spec.rb spec/fixtures/decompression.log.bz2 spec/unit/database/connection_spec.rb lib/request_log_analyzer/filter.rb spec/integration/scout_spec.rb spec/fixtures/test_file_format.log lib/request_log_analyzer/tracker/traffic.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/file_format/file_format_api_spec.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/file_format/merb.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/file_format/amazon_s3.rb lib/cli/database_console.rb spec/integration/mailer_spec.rb lib/request_log_analyzer/line_definition.rb spec/unit/tracker/frequency_tracker_spec.rb spec/fixtures/multiple_files_2.log spec/lib/mocks.rb spec/unit/file_format/apache_format_spec.rb spec/fixtures/syslog_1x.log spec/integration/munin_plugins_rails_spec.rb spec/lib/helpers.rb spec/fixtures/rails.db spec/unit/source/log_parser_spec.rb lib/request_log_analyzer/aggregator/database_inserter.rb spec/fixtures/header_and_footer.log spec/lib/testing_format.rb lib/request_log_analyzer/database.rb spec/unit/file_format/rails_format_spec.rb lib/request_log_analyzer/request.rb lib/request_log_analyzer/output/fixed_width.rb spec/integration/command_line_usage_spec.rb lib/request_log_analyzer/file_format/rack.rb spec/fixtures/test_language_combined.log lib/cli/command_line_arguments.rb lib/request_log_analyzer.rb spec/database.yml spec/unit/request_spec.rb lib/request_log_analyzer/database/base.rb spec/unit/aggregator/database_inserter_spec.rb lib/request_log_analyzer/database/request.rb lib/cli/database_console_init.rb lib/cli/progressbar.rb lib/request_log_analyzer/database/warning.rb spec/unit/filter/anonymize_filter_spec.rb spec/fixtures/apache_combined.log spec/fixtures/rails_22_cached.log lib/request_log_analyzer/aggregator/summarizer.rb spec/unit/tracker/duration_tracker_spec.rb spec/fixtures/rails_1x.log lib/request_log_analyzer/tracker/count.rb lib/request_log_analyzer/output.rb spec/unit/file_format/line_definition_spec.rb lib/request_log_analyzer/file_format/mysql.rb spec/unit/file_format/mysql_format_spec.rb request-log-analyzer.gemspec spec/fixtures/apache_common.log lib/request_log_analyzer/file_format/rails.rb Rakefile spec/unit/mailer_spec.rb lib/request_log_analyzer/tracker/hourly_spread.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/tracker/traffic_tracker_spec.rb lib/request_log_analyzer/tracker/timespan.rb spec/unit/controller/log_processor_spec.rb spec/fixtures/sinatra.log spec/unit/filter/field_filter_spec.rb spec/fixtures/merb_prefixed.log lib/request_log_analyzer/log_processor.rb lib/request_log_analyzer/filter/timespan.rb spec/unit/controller/controller_spec.rb lib/request_log_analyzer/mailer.rb lib/cli/tools.rb spec/fixtures/decompression.tar.gz spec/unit/tracker/timespan_tracker_spec.rb spec/lib/matchers.rb lib/request_log_analyzer/controller.rb spec/unit/tracker/tracker_api_spec.rb lib/request_log_analyzer/source/database_loader.rb spec/fixtures/merb.log LICENSE lib/request_log_analyzer/file_format.rb tasks/request_log_analyzer.rake spec/unit/database/database_spec.rb spec/fixtures/decompression.log.zip spec/fixtures/decompression.tgz bin/request-log-analyzer lib/request_log_analyzer/tracker.rb lib/request_log_analyzer/source.rb spec/fixtures/mysql_slow_query.log lib/request_log_analyzer/source/log_parser.rb lib/request_log_analyzer/aggregator/echo.rb)
40
- s.test_files = %w(spec/unit/tracker/hourly_spread_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/unit/database/base_class_spec.rb spec/unit/file_format/rack_format_spec.rb spec/unit/filter/filter_spec.rb spec/unit/tracker/count_tracker_spec.rb spec/unit/database/connection_spec.rb spec/integration/scout_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/integration/mailer_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/file_format/apache_format_spec.rb spec/integration/munin_plugins_rails_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/file_format/rails_format_spec.rb spec/integration/command_line_usage_spec.rb spec/unit/request_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/filter/anonymize_filter_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/file_format/mysql_format_spec.rb spec/unit/mailer_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/tracker/traffic_tracker_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/controller/controller_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/database/database_spec.rb)
39
+ s.files = %w(spec/unit/tracker/hourly_spread_spec.rb lib/request_log_analyzer/output/html.rb DESIGN.rdoc spec/fixtures/rails_unordered.log spec/fixtures/multiple_files_1.log lib/request_log_analyzer/database/source.rb README.rdoc spec/unit/file_format/amazon_s3_format_spec.rb lib/request_log_analyzer/file_format/rails_development.rb spec/fixtures/rails_22.log spec/fixtures/test_order.log spec/unit/database/base_class_spec.rb lib/request_log_analyzer/database/connection.rb lib/request_log_analyzer/aggregator.rb spec/fixtures/decompression.log lib/request_log_analyzer/file_format/apache.rb spec/unit/file_format/rack_format_spec.rb spec/fixtures/decompression.log.gz lib/request_log_analyzer/tracker/frequency.rb lib/request_log_analyzer/tracker/duration.rb tasks/github-gem.rake .gitignore spec/unit/filter/filter_spec.rb spec/lib/macros.rb spec/spec_helper.rb spec/fixtures/decompression.log.bz2 spec/unit/database/connection_spec.rb lib/request_log_analyzer/filter.rb spec/integration/scout_spec.rb spec/fixtures/test_file_format.log lib/request_log_analyzer/tracker/traffic.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/file_format/file_format_api_spec.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/file_format/merb.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/file_format/amazon_s3.rb lib/cli/database_console.rb spec/integration/mailer_spec.rb lib/request_log_analyzer/line_definition.rb spec/unit/tracker/frequency_tracker_spec.rb spec/fixtures/multiple_files_2.log spec/lib/mocks.rb spec/unit/file_format/apache_format_spec.rb spec/fixtures/syslog_1x.log spec/integration/munin_plugins_rails_spec.rb spec/lib/helpers.rb spec/fixtures/rails.db spec/unit/source/log_parser_spec.rb lib/request_log_analyzer/aggregator/database_inserter.rb spec/fixtures/header_and_footer.log spec/lib/testing_format.rb lib/request_log_analyzer/database.rb spec/unit/file_format/rails_format_spec.rb lib/request_log_analyzer/request.rb lib/request_log_analyzer/output/fixed_width.rb spec/integration/command_line_usage_spec.rb lib/request_log_analyzer/file_format/rack.rb lib/request_log_analyzer/tracker/numeric_value.rb spec/fixtures/test_language_combined.log lib/cli/command_line_arguments.rb lib/request_log_analyzer.rb spec/database.yml spec/unit/request_spec.rb lib/request_log_analyzer/database/base.rb spec/unit/aggregator/database_inserter_spec.rb lib/request_log_analyzer/database/request.rb lib/request_log_analyzer/output/fancy_html.rb lib/cli/database_console_init.rb lib/cli/progressbar.rb lib/request_log_analyzer/database/warning.rb spec/unit/filter/anonymize_filter_spec.rb spec/fixtures/apache_combined.log spec/fixtures/rails_22_cached.log lib/request_log_analyzer/aggregator/summarizer.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/file_format/common_regular_expressions_spec.rb spec/fixtures/rails_1x.log lib/request_log_analyzer/output.rb spec/unit/file_format/line_definition_spec.rb lib/request_log_analyzer/file_format/mysql.rb spec/unit/file_format/mysql_format_spec.rb request-log-analyzer.gemspec spec/fixtures/apache_common.log lib/request_log_analyzer/file_format/rails.rb Rakefile spec/unit/mailer_spec.rb lib/request_log_analyzer/tracker/hourly_spread.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/tracker/traffic_tracker_spec.rb spec/unit/tracker/numeric_value_tracker_spec.rb lib/request_log_analyzer/tracker/timespan.rb spec/unit/controller/log_processor_spec.rb spec/fixtures/sinatra.log spec/unit/filter/field_filter_spec.rb spec/fixtures/merb_prefixed.log lib/request_log_analyzer/log_processor.rb lib/request_log_analyzer/filter/timespan.rb spec/unit/controller/controller_spec.rb lib/request_log_analyzer/mailer.rb lib/cli/tools.rb spec/fixtures/decompression.tar.gz spec/unit/tracker/timespan_tracker_spec.rb spec/lib/matchers.rb lib/request_log_analyzer/controller.rb spec/unit/tracker/tracker_api_spec.rb lib/request_log_analyzer/source/database_loader.rb spec/fixtures/merb.log LICENSE lib/request_log_analyzer/file_format.rb tasks/request_log_analyzer.rake spec/unit/database/database_spec.rb spec/fixtures/decompression.log.zip spec/fixtures/decompression.tgz bin/request-log-analyzer lib/request_log_analyzer/tracker.rb lib/request_log_analyzer/source.rb spec/fixtures/mysql_slow_query.log lib/request_log_analyzer/source/log_parser.rb lib/request_log_analyzer/aggregator/echo.rb)
40
+ s.test_files = %w(spec/unit/tracker/hourly_spread_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/unit/database/base_class_spec.rb spec/unit/file_format/rack_format_spec.rb spec/unit/filter/filter_spec.rb spec/unit/database/connection_spec.rb spec/integration/scout_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/integration/mailer_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/file_format/apache_format_spec.rb spec/integration/munin_plugins_rails_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/file_format/rails_format_spec.rb spec/integration/command_line_usage_spec.rb spec/unit/request_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/filter/anonymize_filter_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/file_format/common_regular_expressions_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/file_format/mysql_format_spec.rb spec/unit/mailer_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/tracker/traffic_tracker_spec.rb spec/unit/tracker/numeric_value_tracker_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/controller/controller_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/database/database_spec.rb)
41
41
  end
data/spec/lib/mocks.rb CHANGED
@@ -32,6 +32,7 @@ module RequestLogAnalyzer::Spec::Mocks
32
32
 
33
33
  def mock_output
34
34
  output = mock('RequestLogAnalyzer::Output::Base')
35
+ output.stub!(:report_tracker)
35
36
  output.stub!(:header)
36
37
  output.stub!(:footer)
37
38
  output.stub!(:puts)
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe RequestLogAnalyzer::FileFormat::CommonRegularExpressions do
4
+
5
+ include RequestLogAnalyzer::FileFormat::CommonRegularExpressions
6
+
7
+ describe '.timestamp' do
8
+
9
+ it "should parse timestamps with a given format" do
10
+ timestamp('%Y-%m-%dT%H:%M:%S%z').should =~ '2009-12-03T00:12:37+0100'
11
+ timestamp('%Y-%m-%dT%H:%M:%S%z').should_not =~ '2009-12-03 00:12:37+0100'
12
+ timestamp('%Y-%m-%dT%H:%M:%S%z').should_not =~ '2009-12-03T00:12:37'
13
+ end
14
+ end
15
+
16
+ describe '.ip_address' do
17
+
18
+ it "should parse IPv4 addresses" do
19
+ ip_address.should =~ '127.0.0.1'
20
+ ip_address.should =~ '255.255.255.255'
21
+
22
+ ip_address.should_not =~ '2552.2552.2552.2552'
23
+ ip_address.should_not =~ '127001'
24
+ ip_address.should_not =~ ''
25
+ ip_address.should_not =~ '-'
26
+ ip_address.should_not =~ 'sub-host.domain.tld'
27
+ end
28
+
29
+ it "should pase IPv6 addresses" do
30
+ ip_address.should =~ '::1'
31
+ ip_address.should =~ '3ffe:1900:4545:3:200:f8ff:fe21:67cf'
32
+ ip_address.should =~ '3ffe:1900:4545:3:200:f8ff:127.0.0.1'
33
+ ip_address.should =~ '::3:200:f8ff:127.0.0.1'
34
+
35
+ ip_address.should_not =~ 'qqqq:wwww:eeee:3q:200:wf8ff:fe21:67cf'
36
+ ip_address.should_not =~ '3ffe44:1900f:454545:3:200:f8ff:ffff:5432'
37
+ end
38
+
39
+ it "should allow blank if true is given as parameter" do
40
+ /^#{ip_address(true)}$/.should =~ ''
41
+ /^#{ip_address(true)}$/.should_not =~ ' '
42
+ end
43
+
44
+ it "should allow a nil substitute if a string is given as parameter" do
45
+ /^#{ip_address('-')}$/.should =~ '-'
46
+ /^#{ip_address('-')}$/.should_not =~ ' -'
47
+ /^#{ip_address('-')}$/.should_not =~ '--'
48
+ /^#{ip_address('-')}$/.should_not =~ ''
49
+ end
50
+
51
+ end
52
+ end
53
+
@@ -12,8 +12,7 @@ describe RequestLogAnalyzer::FileFormat::Mysql do
12
12
  end
13
13
 
14
14
  it "should parse a :time line correctly" do
15
- line = '# Time: 091112 8:13:56'
16
- line = '# Time: 091112 8:13:56'
15
+ line = '# Time: 091112 8:13:56'
17
16
  @file_format.should parse_line(line).as(:time).and_capture(:timestamp => 20091112081356)
18
17
  end
19
18
 
@@ -23,7 +23,7 @@ describe RequestLogAnalyzer::FileFormat::Rails do
23
23
  it "should return a valid language" do
24
24
  @rails.should be_valid
25
25
  end
26
-
26
+
27
27
  it "should at least parse :processing and :completed lines" do
28
28
  @rails.line_definitions.should include(:processing, :completed, :failure)
29
29
  end
@@ -52,12 +52,17 @@ describe RequestLogAnalyzer::FileFormat::Rails do
52
52
  context context do
53
53
  it "should parse a :processing line correctly" do
54
54
  line = prefix + 'Processing PeopleController#index (for 1.1.1.1 at 2008-08-14 21:16:30) [GET]'
55
- @rails.should parse_line(line).as(:processing).and_capture(:controller => 'PeopleController', :action => 'index', :timestamp => 20080814211630, :method => 'GET')
55
+ @rails.should parse_line(line).as(:processing).and_capture(:controller => 'PeopleController', :action => 'index', :timestamp => 20080814211630, :method => 'GET', :ip => '1.1.1.1')
56
56
  end
57
57
 
58
- it "should parse a :processing line correctly when it contains ipv6 address" do
58
+ it "should parse a :processing line correctly when it contains ipv6 localhost address" do
59
59
  line = prefix + 'Processing PeopleController#index (for ::1 at 2008-08-14 21:16:30) [GET]'
60
- @rails.should parse_line(line).as(:processing).and_capture(:controller => 'PeopleController', :action => 'index', :timestamp => 20080814211630, :method => 'GET')
60
+ @rails.should parse_line(line).as(:processing).and_capture(:controller => 'PeopleController', :action => 'index', :timestamp => 20080814211630, :method => 'GET', :ip => '::1')
61
+ end
62
+
63
+ it "should parse a :processing line correctly when it contains ipv6 address" do
64
+ line = prefix + 'Processing PeopleController#index (for 3ffe:1900:4545:3:200:f8ff:fe21:67cf at 2008-08-14 21:16:30) [GET]'
65
+ @rails.should parse_line(line).as(:processing).and_capture(:controller => 'PeopleController', :action => 'index', :timestamp => 20080814211630, :method => 'GET', :ip => '3ffe:1900:4545:3:200:f8ff:fe21:67cf')
61
66
  end
62
67
 
63
68
  it "should parse a Rails 2.1 style :completed line correctly" do
@@ -2,90 +2,10 @@ require File.dirname(__FILE__) + '/../../spec_helper'
2
2
 
3
3
  describe RequestLogAnalyzer::Tracker::Duration do
4
4
 
5
- context 'using a static category' do
6
-
7
- before(:each) do
8
- @tracker = RequestLogAnalyzer::Tracker::Duration.new(:duration => :duration, :category => :category)
9
- @tracker.prepare
10
- end
11
-
12
- it "should create a category for every request using the category field" do
13
- @tracker.update(request(:category => 'a', :duration => 0.2))
14
- @tracker.categories.keys.should include('a')
15
- end
16
-
17
- it "should register a request as hit in the right category" do
18
- @tracker.update(request(:category => 'a', :duration => 0.2))
19
- @tracker.update(request(:category => 'b', :duration => 0.3))
20
- @tracker.update(request(:category => 'b', :duration => 0.4))
21
-
22
- @tracker.hits('a').should == 1
23
- @tracker.hits('b').should == 2
24
- end
25
- end
26
-
27
- context 'using a dynamic category' do
28
- before(:each) do
29
- @categorizer = Proc.new { |request| request[:duration] > 0.2 ? 'slow' : 'fast' }
30
- @tracker = RequestLogAnalyzer::Tracker::Duration.new(:duration => :duration, :category => @categorizer)
31
- @tracker.prepare
32
- end
33
-
34
- it "should use the categorizer to determine the right category" do
35
- @tracker.update(request(:category => 'a', :duration => 0.2))
36
- @tracker.update(request(:category => 'b', :duration => 0.3))
37
- @tracker.update(request(:category => 'b', :duration => 0.4))
38
-
39
- @tracker.hits('fast').should == 1
40
- @tracker.hits('slow').should == 2
41
- end
42
- end
43
-
44
- describe '#update' do
45
-
46
- before(:each) do
47
- @tracker = RequestLogAnalyzer::Tracker::Duration.new(:duration => :duration, :category => :category)
48
- @tracker.prepare
49
-
50
- @tracker.update(request(:category => 'a', :duration => 0.4))
51
- @tracker.update(request(:category => 'a', :duration => 0.2))
52
- @tracker.update(request(:category => 'a', :duration => 0.3))
53
- end
54
-
55
- it "should sum of the durations for a category correctly" do
56
- @tracker.sum('a').should be_close(0.9, 0.000001)
57
- end
58
-
59
- it "should overall sum of the durations correctly" do
60
- @tracker.sum_overall.should be_close(0.9, 0.000001)
61
- end
62
-
63
- it "should keep track of the minimum and maximum duration" do
64
- @tracker.min('a').should == 0.2
65
- @tracker.max('a').should == 0.4
66
- end
67
-
68
- it "should calculate the mean duration correctly" do
69
- @tracker.mean('a').should be_close(0.3, 0.000001)
70
- end
71
-
72
- it "should calculate the overall mean duration correctly" do
73
- @tracker.mean_overall.should be_close(0.3, 0.000001)
74
- end
75
-
76
- it "should calculate the duration variance correctly" do
77
- @tracker.variance('a').should be_close(0.01, 0.000001)
78
- end
79
-
80
- it "should calculate the duration standard deviation correctly" do
81
- @tracker.stddev('a').should be_close(0.1, 0.000001)
82
- end
83
- end
84
-
85
5
  describe '#report' do
86
6
 
87
7
  before(:each) do
88
- @tracker = RequestLogAnalyzer::Tracker::Duration.new(:category => :category, :duration => :duration)
8
+ @tracker = RequestLogAnalyzer::Tracker::Duration.new(:category => :category, :value => :duration)
89
9
  @tracker.prepare
90
10
  end
91
11
 
@@ -112,7 +32,7 @@ describe RequestLogAnalyzer::Tracker::Duration do
112
32
  end
113
33
 
114
34
  describe '#display_value' do
115
- before(:each) { @tracker = RequestLogAnalyzer::Tracker::Duration.new(:category => :category, :duration => :duration) }
35
+ before(:each) { @tracker = RequestLogAnalyzer::Tracker::Duration.new(:category => :category, :value => :duration) }
116
36
 
117
37
  it "should only display seconds when time < 60" do
118
38
  @tracker.display_value(33.12).should == '33.12s'
@@ -125,6 +45,5 @@ describe RequestLogAnalyzer::Tracker::Duration do
125
45
  it "should display minutes and wholeseconds when time > 60" do
126
46
  @tracker.display_value(3601.12).should == '1h00m01s'
127
47
  end
128
-
129
48
  end
130
49
  end
@@ -1,10 +1,10 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
2
 
3
- describe RequestLogAnalyzer::Tracker::Count do
3
+ describe RequestLogAnalyzer::Tracker::NumericValue do
4
4
 
5
5
  context 'static category' do
6
6
  before(:each) do
7
- @tracker = RequestLogAnalyzer::Tracker::Count.new(:category => :category, :field => :blah)
7
+ @tracker = RequestLogAnalyzer::Tracker::NumericValue.new(:category => :category, :value => :blah)
8
8
  @tracker.prepare
9
9
  end
10
10
 
@@ -27,7 +27,7 @@ describe RequestLogAnalyzer::Tracker::Count do
27
27
  context 'dynamic category' do
28
28
  before(:each) do
29
29
  @categorizer = Proc.new { |request| request[:duration] > 0.2 ? 'slow' : 'fast' }
30
- @tracker = RequestLogAnalyzer::Tracker::Count.new(:category => @categorizer, :field => :blah)
30
+ @tracker = RequestLogAnalyzer::Tracker::NumericValue.new(:category => @categorizer, :value => :blah)
31
31
  @tracker.prepare
32
32
  end
33
33
 
@@ -40,10 +40,51 @@ describe RequestLogAnalyzer::Tracker::Count do
40
40
  @tracker.categories['slow'][:sum].should == 4
41
41
  end
42
42
  end
43
+
44
+ describe '#update' do
45
+
46
+ before(:each) do
47
+ @tracker = RequestLogAnalyzer::Tracker::NumericValue.new(:value => :duration, :category => :category)
48
+ @tracker.prepare
49
+
50
+ @tracker.update(request(:category => 'a', :duration => 0.4))
51
+ @tracker.update(request(:category => 'a', :duration => 0.2))
52
+ @tracker.update(request(:category => 'a', :duration => 0.3))
53
+ end
54
+
55
+ it "should sum of the durations for a category correctly" do
56
+ @tracker.sum('a').should be_close(0.9, 0.000001)
57
+ end
58
+
59
+ it "should overall sum of the durations correctly" do
60
+ @tracker.sum_overall.should be_close(0.9, 0.000001)
61
+ end
62
+
63
+ it "should keep track of the minimum and maximum duration" do
64
+ @tracker.min('a').should == 0.2
65
+ @tracker.max('a').should == 0.4
66
+ end
67
+
68
+ it "should calculate the mean duration correctly" do
69
+ @tracker.mean('a').should be_close(0.3, 0.000001)
70
+ end
71
+
72
+ it "should calculate the overall mean duration correctly" do
73
+ @tracker.mean_overall.should be_close(0.3, 0.000001)
74
+ end
75
+
76
+ it "should calculate the duration variance correctly" do
77
+ @tracker.variance('a').should be_close(0.01, 0.000001)
78
+ end
79
+
80
+ it "should calculate the duration standard deviation correctly" do
81
+ @tracker.stddev('a').should be_close(0.1, 0.000001)
82
+ end
83
+ end
43
84
 
44
85
  describe '#report' do
45
86
  before(:each) do
46
- @tracker = RequestLogAnalyzer::Tracker::Count.new(:category => :category, :field => :blah)
87
+ @tracker = RequestLogAnalyzer::Tracker::NumericValue.new(:category => :category, :value => :blah)
47
88
  @tracker.prepare
48
89
  end
49
90
 
@@ -65,20 +106,22 @@ describe RequestLogAnalyzer::Tracker::Count do
65
106
 
66
107
  describe '#to_yaml_object' do
67
108
  before(:each) do
68
- @tracker = RequestLogAnalyzer::Tracker::Count.new(:category => :category, :field => :blah)
109
+ @tracker = RequestLogAnalyzer::Tracker::NumericValue.new(:category => :category, :value => :blah)
69
110
  @tracker.prepare
70
111
  end
71
112
 
72
113
  it "should generate a YAML output" do
73
114
  @tracker.update(request(:category => 'a', :blah => 2))
74
115
  @tracker.update(request(:category => 'b', :blah => 3))
75
- @tracker.to_yaml_object.should == {"a"=>{:min=>2, :hits=>1, :max=>2, :mean=>2.0, :sum=>2, :sum_of_squares=>0.0}, "b"=>{:min=>3, :hits=>1, :max=>3, :mean=>3.0, :sum=>3, :sum_of_squares=>0.0}}
116
+ @tracker.to_yaml_object.should == {
117
+ "a" => { :min => 2, :hits => 1, :max => 2, :mean => 2.0, :sum => 2, :sum_of_squares => 0.0 },
118
+ "b" => { :min => 3, :hits => 1, :max => 3, :mean => 3.0, :sum => 3, :sum_of_squares => 0.0 }}
76
119
  end
77
120
  end
78
121
 
79
122
  describe '#display_value' do
80
123
  before(:each) do
81
- @tracker = RequestLogAnalyzer::Tracker::Count.new(:category => :category, :field => :blah)
124
+ @tracker = RequestLogAnalyzer::Tracker::NumericValue.new(:category => :category, :value => :blah)
82
125
  @tracker.prepare
83
126
  end
84
127
 
@@ -33,8 +33,9 @@ describe RequestLogAnalyzer::Tracker::Base do
33
33
  end
34
34
 
35
35
  it "should receive :report when the summary report is being built" do
36
- @tracker.should_receive(:report).with(anything).once
37
- @summarizer.report(mock_output)
36
+ m = mock_output
37
+ m.should_receive(:report_tracker).with(@tracker)
38
+ @summarizer.report(m)
38
39
  end
39
40
 
40
41
  it "should receieve :finalize when the summarizer is finalizing" do
@@ -2,85 +2,6 @@ require File.dirname(__FILE__) + '/../../spec_helper'
2
2
 
3
3
  describe RequestLogAnalyzer::Tracker::Traffic do
4
4
 
5
- context 'using a field-based category' do
6
- before(:each) do
7
- @tracker = RequestLogAnalyzer::Tracker::Traffic.new(:traffic => :traffic, :category => :category)
8
- @tracker.prepare
9
-
10
- @tracker.update(request(:category => 'a', :traffic => 1))
11
- @tracker.update(request(:category => 'b', :traffic => 2))
12
- @tracker.update(request(:category => 'b', :traffic => 3))
13
- end
14
-
15
- it "should register a request in the right category using the category field" do
16
- @tracker.categories.should include('a', 'b')
17
- end
18
-
19
- it "should register requests under the correct category" do
20
- @tracker.hits('a').should == 1
21
- @tracker.hits('b').should == 2
22
- end
23
- end
24
-
25
- context 'using a dynamic category' do
26
-
27
- before(:each) do
28
- @categorizer = lambda { |request| request[:traffic] < 2 ? 'few' : 'lots' }
29
- @tracker = RequestLogAnalyzer::Tracker::Traffic.new(:traffic => :traffic, :category => @categorizer)
30
- @tracker.prepare
31
-
32
- @tracker.update(request(:category => 'a', :traffic => 1))
33
- @tracker.update(request(:category => 'b', :traffic => 2))
34
- @tracker.update(request(:category => 'b', :traffic => 3))
35
- end
36
-
37
- it "should use the categorizer to determine the category" do
38
- @tracker.categories.should include('few', 'lots')
39
- end
40
-
41
- it "should register requests under the correct category using the categorizer" do
42
- @tracker.hits('few').should == 1
43
- @tracker.hits('lots').should == 2
44
- end
45
- end
46
-
47
- describe '#update' do
48
-
49
- before(:each) do
50
- @tracker = RequestLogAnalyzer::Tracker::Traffic.new(:traffic => :traffic, :category => :category)
51
- @tracker.prepare
52
-
53
- @tracker.update(request(:category => 'a', :traffic => 2))
54
- @tracker.update(request(:category => 'a', :traffic => 1))
55
- @tracker.update(request(:category => 'a', :traffic => 3))
56
- end
57
-
58
- it "should calculate the total traffic correctly" do
59
- @tracker.sum('a').should == 6
60
- end
61
-
62
- it "should calculate the traffic variance correctly" do
63
- @tracker.variance('a').should == 1.0
64
- end
65
-
66
- it "should calculate the traffic standard deviation correctly" do
67
- @tracker.stddev('a').should == 1.0
68
- end
69
-
70
- it "should calculate the average traffic correctly" do
71
- @tracker.mean('a').should == 2.0
72
- end
73
-
74
- it "should calculate the overall mean traffic correctly" do
75
- @tracker.mean_overall.should == 2.0
76
- end
77
-
78
- it "should set min and max traffic correctly" do
79
- @tracker.min('a').should == 1
80
- @tracker.max('a').should == 3
81
- end
82
- end
83
-
84
5
  describe '#report' do
85
6
  before(:each) do
86
7
  @tracker = RequestLogAnalyzer::Tracker::Traffic.new(:category => :category, :traffic => :traffic)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: request-log-analyzer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-12-02 00:00:00 +01:00
13
+ date: 2009-12-14 00:00:00 +01:00
14
14
  default_executable: request-log-analyzer
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -69,7 +69,6 @@ files:
69
69
  - spec/unit/filter/filter_spec.rb
70
70
  - spec/lib/macros.rb
71
71
  - spec/spec_helper.rb
72
- - spec/unit/tracker/count_tracker_spec.rb
73
72
  - spec/fixtures/decompression.log.bz2
74
73
  - spec/unit/database/connection_spec.rb
75
74
  - lib/request_log_analyzer/filter.rb
@@ -105,6 +104,7 @@ files:
105
104
  - lib/request_log_analyzer/output/fixed_width.rb
106
105
  - spec/integration/command_line_usage_spec.rb
107
106
  - lib/request_log_analyzer/file_format/rack.rb
107
+ - lib/request_log_analyzer/tracker/numeric_value.rb
108
108
  - spec/fixtures/test_language_combined.log
109
109
  - lib/cli/command_line_arguments.rb
110
110
  - lib/request_log_analyzer.rb
@@ -113,6 +113,7 @@ files:
113
113
  - lib/request_log_analyzer/database/base.rb
114
114
  - spec/unit/aggregator/database_inserter_spec.rb
115
115
  - lib/request_log_analyzer/database/request.rb
116
+ - lib/request_log_analyzer/output/fancy_html.rb
116
117
  - lib/cli/database_console_init.rb
117
118
  - lib/cli/progressbar.rb
118
119
  - lib/request_log_analyzer/database/warning.rb
@@ -121,8 +122,8 @@ files:
121
122
  - spec/fixtures/rails_22_cached.log
122
123
  - lib/request_log_analyzer/aggregator/summarizer.rb
123
124
  - spec/unit/tracker/duration_tracker_spec.rb
125
+ - spec/unit/file_format/common_regular_expressions_spec.rb
124
126
  - spec/fixtures/rails_1x.log
125
- - lib/request_log_analyzer/tracker/count.rb
126
127
  - lib/request_log_analyzer/output.rb
127
128
  - spec/unit/file_format/line_definition_spec.rb
128
129
  - lib/request_log_analyzer/file_format/mysql.rb
@@ -135,6 +136,7 @@ files:
135
136
  - lib/request_log_analyzer/tracker/hourly_spread.rb
136
137
  - spec/unit/aggregator/summarizer_spec.rb
137
138
  - spec/unit/tracker/traffic_tracker_spec.rb
139
+ - spec/unit/tracker/numeric_value_tracker_spec.rb
138
140
  - lib/request_log_analyzer/tracker/timespan.rb
139
141
  - spec/unit/controller/log_processor_spec.rb
140
142
  - spec/fixtures/sinatra.log
@@ -203,7 +205,6 @@ test_files:
203
205
  - spec/unit/database/base_class_spec.rb
204
206
  - spec/unit/file_format/rack_format_spec.rb
205
207
  - spec/unit/filter/filter_spec.rb
206
- - spec/unit/tracker/count_tracker_spec.rb
207
208
  - spec/unit/database/connection_spec.rb
208
209
  - spec/integration/scout_spec.rb
209
210
  - spec/unit/file_format/merb_format_spec.rb
@@ -221,11 +222,13 @@ test_files:
221
222
  - spec/unit/aggregator/database_inserter_spec.rb
222
223
  - spec/unit/filter/anonymize_filter_spec.rb
223
224
  - spec/unit/tracker/duration_tracker_spec.rb
225
+ - spec/unit/file_format/common_regular_expressions_spec.rb
224
226
  - spec/unit/file_format/line_definition_spec.rb
225
227
  - spec/unit/file_format/mysql_format_spec.rb
226
228
  - spec/unit/mailer_spec.rb
227
229
  - spec/unit/aggregator/summarizer_spec.rb
228
230
  - spec/unit/tracker/traffic_tracker_spec.rb
231
+ - spec/unit/tracker/numeric_value_tracker_spec.rb
229
232
  - spec/unit/controller/log_processor_spec.rb
230
233
  - spec/unit/filter/field_filter_spec.rb
231
234
  - spec/unit/controller/controller_spec.rb