request-log-analyzer 1.3.7 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/LICENSE +3 -3
  2. data/README.rdoc +1 -1
  3. data/bin/request-log-analyzer +17 -14
  4. data/lib/cli/command_line_arguments.rb +51 -51
  5. data/lib/cli/database_console.rb +3 -3
  6. data/lib/cli/database_console_init.rb +2 -2
  7. data/lib/cli/progressbar.rb +10 -10
  8. data/lib/cli/tools.rb +3 -3
  9. data/lib/request_log_analyzer.rb +4 -4
  10. data/lib/request_log_analyzer/aggregator.rb +10 -10
  11. data/lib/request_log_analyzer/aggregator/database_inserter.rb +9 -9
  12. data/lib/request_log_analyzer/aggregator/echo.rb +14 -9
  13. data/lib/request_log_analyzer/aggregator/summarizer.rb +26 -26
  14. data/lib/request_log_analyzer/controller.rb +153 -69
  15. data/lib/request_log_analyzer/database.rb +13 -13
  16. data/lib/request_log_analyzer/database/base.rb +17 -17
  17. data/lib/request_log_analyzer/database/connection.rb +3 -3
  18. data/lib/request_log_analyzer/database/request.rb +2 -2
  19. data/lib/request_log_analyzer/database/source.rb +1 -1
  20. data/lib/request_log_analyzer/file_format.rb +15 -15
  21. data/lib/request_log_analyzer/file_format/amazon_s3.rb +16 -16
  22. data/lib/request_log_analyzer/file_format/apache.rb +20 -19
  23. data/lib/request_log_analyzer/file_format/merb.rb +12 -12
  24. data/lib/request_log_analyzer/file_format/rack.rb +4 -4
  25. data/lib/request_log_analyzer/file_format/rails.rb +146 -70
  26. data/lib/request_log_analyzer/file_format/rails_development.rb +4 -49
  27. data/lib/request_log_analyzer/filter.rb +6 -6
  28. data/lib/request_log_analyzer/filter/anonymize.rb +6 -6
  29. data/lib/request_log_analyzer/filter/field.rb +9 -9
  30. data/lib/request_log_analyzer/filter/timespan.rb +12 -10
  31. data/lib/request_log_analyzer/line_definition.rb +15 -14
  32. data/lib/request_log_analyzer/log_processor.rb +22 -22
  33. data/lib/request_log_analyzer/mailer.rb +15 -9
  34. data/lib/request_log_analyzer/output.rb +53 -12
  35. data/lib/request_log_analyzer/output/fixed_width.rb +40 -41
  36. data/lib/request_log_analyzer/output/html.rb +20 -20
  37. data/lib/request_log_analyzer/request.rb +35 -36
  38. data/lib/request_log_analyzer/source.rb +7 -7
  39. data/lib/request_log_analyzer/source/database_loader.rb +7 -7
  40. data/lib/request_log_analyzer/source/log_parser.rb +48 -43
  41. data/lib/request_log_analyzer/tracker.rb +128 -14
  42. data/lib/request_log_analyzer/tracker/duration.rb +39 -132
  43. data/lib/request_log_analyzer/tracker/frequency.rb +31 -32
  44. data/lib/request_log_analyzer/tracker/hourly_spread.rb +20 -19
  45. data/lib/request_log_analyzer/tracker/timespan.rb +17 -17
  46. data/lib/request_log_analyzer/tracker/traffic.rb +36 -116
  47. data/request-log-analyzer.gemspec +19 -15
  48. data/spec/fixtures/rails_22.log +1 -1
  49. data/spec/integration/command_line_usage_spec.rb +1 -1
  50. data/spec/lib/helpers.rb +7 -7
  51. data/spec/lib/macros.rb +3 -3
  52. data/spec/lib/matchers.rb +41 -27
  53. data/spec/lib/mocks.rb +15 -14
  54. data/spec/lib/testing_format.rb +9 -9
  55. data/spec/spec_helper.rb +6 -6
  56. data/spec/unit/aggregator/database_inserter_spec.rb +13 -13
  57. data/spec/unit/aggregator/summarizer_spec.rb +4 -4
  58. data/spec/unit/controller/controller_spec.rb +2 -2
  59. data/spec/unit/controller/log_processor_spec.rb +1 -1
  60. data/spec/unit/database/base_class_spec.rb +19 -19
  61. data/spec/unit/database/connection_spec.rb +3 -3
  62. data/spec/unit/database/database_spec.rb +25 -25
  63. data/spec/unit/file_format/amazon_s3_format_spec.rb +5 -5
  64. data/spec/unit/file_format/apache_format_spec.rb +13 -13
  65. data/spec/unit/file_format/file_format_api_spec.rb +13 -13
  66. data/spec/unit/file_format/line_definition_spec.rb +24 -17
  67. data/spec/unit/file_format/merb_format_spec.rb +41 -45
  68. data/spec/unit/file_format/rails_format_spec.rb +157 -117
  69. data/spec/unit/filter/anonymize_filter_spec.rb +2 -2
  70. data/spec/unit/filter/field_filter_spec.rb +13 -13
  71. data/spec/unit/filter/filter_spec.rb +1 -1
  72. data/spec/unit/filter/timespan_filter_spec.rb +15 -15
  73. data/spec/unit/mailer_spec.rb +30 -0
  74. data/spec/unit/{source/request_spec.rb → request_spec.rb} +30 -30
  75. data/spec/unit/source/log_parser_spec.rb +27 -27
  76. data/spec/unit/tracker/duration_tracker_spec.rb +115 -78
  77. data/spec/unit/tracker/frequency_tracker_spec.rb +74 -63
  78. data/spec/unit/tracker/hourly_spread_spec.rb +28 -20
  79. data/spec/unit/tracker/timespan_tracker_spec.rb +25 -13
  80. data/spec/unit/tracker/tracker_api_spec.rb +13 -13
  81. data/spec/unit/tracker/traffic_tracker_spec.rb +81 -79
  82. data/tasks/github-gem.rake +125 -75
  83. data/tasks/request_log_analyzer.rake +2 -2
  84. metadata +8 -6
@@ -1,93 +1,130 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
2
 
3
- describe RequestLogAnalyzer::Tracker::Duration, 'static category' do
4
-
5
- before(:each) do
6
- @tracker = RequestLogAnalyzer::Tracker::Duration.new(:duration => :duration, :category => :category)
7
- @tracker.prepare
8
- end
3
+ describe RequestLogAnalyzer::Tracker::Duration do
9
4
 
10
- it "should register a request in the right category" do
11
- @tracker.update(request(:category => 'a', :duration => 0.2))
12
- @tracker.categories.keys.should include('a')
13
- end
14
-
15
- it "should register a hit in the right category" do
16
- @tracker.update(request(:category => 'a', :duration => 0.2))
17
- @tracker.update(request(:category => 'b', :duration => 0.3))
18
- @tracker.update(request(:category => 'b', :duration => 0.4))
19
-
20
- @tracker.hits('a').should == 1
21
- @tracker.hits('b').should == 2
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
22
25
  end
23
-
24
- it "should sum the durations of the same category as cumulative duration" do
25
- @tracker.update(request(:category => 'a', :duration => 0.2))
26
- @tracker.update(request(:category => 'b', :duration => 0.3))
27
- @tracker.update(request(:category => 'b', :duration => 0.4))
28
-
29
- @tracker.cumulative_duration('a').should == 0.2
30
- @tracker.cumulative_duration('b').should == 0.7
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
31
42
  end
32
-
33
- it "should calculate the average duration correctly" do
34
- @tracker.update(request(:category => 'a', :duration => 0.2))
35
- @tracker.update(request(:category => 'b', :duration => 0.3))
36
- @tracker.update(request(:category => 'b', :duration => 0.4))
37
-
38
- @tracker.average_duration('a').should == 0.2
39
- @tracker.average_duration('b').should == 0.35
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
40
83
  end
41
-
42
- it "should set min and max duration correctly" do
43
- @tracker.update(request(:category => 'a', :duration => 0.2))
44
- @tracker.update(request(:category => 'b', :duration => 0.3))
45
- @tracker.update(request(:category => 'b', :duration => 0.4))
46
-
47
- @tracker.min_duration('b').should == 0.3
48
- @tracker.max_duration('b').should == 0.4
49
- end
50
-
51
- end
52
84
 
53
- describe RequestLogAnalyzer::Tracker::Duration, 'dynamic category' do
54
-
55
- before(:each) do
56
- @categorizer = Proc.new { |request| request[:duration] > 0.2 ? 'slow' : 'fast' }
57
- @tracker = RequestLogAnalyzer::Tracker::Duration.new(:duration => :duration, :category => @categorizer)
58
- @tracker.prepare
85
+ describe '#report' do
86
+
87
+ before(:each) do
88
+ @tracker = RequestLogAnalyzer::Tracker::Duration.new(:category => :category, :duration => :duration)
89
+ @tracker.prepare
90
+ end
91
+
92
+ it "should generate a report without errors when one category is present" do
93
+ @tracker.update(request(:category => 'a', :duration => 0.2))
94
+ lambda { @tracker.report(mock_output) }.should_not raise_error
95
+ end
96
+
97
+ it "should generate a report without errors when no category is present" do
98
+ lambda { @tracker.report(mock_output) }.should_not raise_error
99
+ end
100
+
101
+ it "should generate a report without errors when multiple categories are present" do
102
+ @tracker.update(request(:category => 'a', :duration => 0.2))
103
+ @tracker.update(request(:category => 'b', :duration => 0.2))
104
+ lambda { @tracker.report(mock_output) }.should_not raise_error
105
+ end
106
+
107
+ it "should generate a YAML output" do
108
+ @tracker.update(request(:category => 'a', :duration => 0.2))
109
+ @tracker.update(request(:category => 'b', :duration => 0.2))
110
+ @tracker.to_yaml_object.should == {"a"=>{:hits=>1, :min=>0.2, :mean=>0.2, :max=>0.2, :sum_of_squares=>0.0, :sum=>0.2}, "b"=>{:hits=>1, :min=>0.2, :mean=>0.2, :max=>0.2, :sum_of_squares=>0.0, :sum=>0.2}}
111
+ end
59
112
  end
60
113
 
61
- it "should use the categorizer to determine the right category" do
62
- @tracker.update(request(:category => 'a', :duration => 0.2))
63
- @tracker.update(request(:category => 'b', :duration => 0.3))
64
- @tracker.update(request(:category => 'b', :duration => 0.4))
114
+ describe '#display_value' do
115
+ before(:each) { @tracker = RequestLogAnalyzer::Tracker::Duration.new(:category => :category, :duration => :duration) }
65
116
 
66
- @tracker.cumulative_duration('fast').should == 0.2
67
- @tracker.cumulative_duration('slow').should == 0.7
68
- end
69
-
70
- end
117
+ it "should only display seconds when time < 60" do
118
+ @tracker.display_value(33.12).should == '33.12s'
119
+ end
71
120
 
72
- describe RequestLogAnalyzer::Tracker::Duration, 'reporting' do
73
-
74
- before(:each) do
75
- @tracker = RequestLogAnalyzer::Tracker::Duration.new(:category => :category, :duration => :duration)
76
- @tracker.prepare
77
- end
78
-
79
- it "should generate a report without errors when one category is present" do
80
- @tracker.update(request(:category => 'a', :duration => 0.2))
81
- lambda { @tracker.report(mock_output) }.should_not raise_error
82
- end
121
+ it "should display minutes and wholeseconds when time > 60" do
122
+ @tracker.display_value(63.12).should == '1m03s'
123
+ end
83
124
 
84
- it "should generate a report without errors when no category is present" do
85
- lambda { @tracker.report(mock_output) }.should_not raise_error
86
- end
125
+ it "should display minutes and wholeseconds when time > 60" do
126
+ @tracker.display_value(3601.12).should == '1h00m01s'
127
+ end
87
128
 
88
- it "should generate a report without errors when multiple categories are present" do
89
- @tracker.update(request(:category => 'a', :duration => 0.2))
90
- @tracker.update(request(:category => 'b', :duration => 0.2))
91
- lambda { @tracker.report(mock_output) }.should_not raise_error
92
129
  end
93
130
  end
@@ -1,77 +1,88 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
2
 
3
- describe RequestLogAnalyzer::Tracker::Frequency, 'static category' do
4
-
5
- before(:each) do
6
- @tracker = RequestLogAnalyzer::Tracker::Frequency.new(:category => :category)
7
- @tracker.prepare
8
- end
9
-
10
-
11
- it "should register a request in the right category" do
12
- @tracker.update(request(:category => 'a', :blah => 0.2))
13
- @tracker.frequencies.keys.should include('a')
14
- end
15
-
16
- it "should register a request in the right category" do
17
- @tracker.update(request(:category => 'a', :blah => 0.2))
18
- @tracker.update(request(:category => 'b', :blah => 0.2))
19
- @tracker.update(request(:category => 'b', :blah => 0.2))
20
-
21
- @tracker.frequency('a').should == 1
22
- @tracker.frequency('b').should == 2
23
- @tracker.overall_frequency.should == 3
24
- end
3
+ describe RequestLogAnalyzer::Tracker::Frequency do
25
4
 
26
- it "should sort correctly by frequency" do
27
- @tracker.update(request(:category => 'a', :blah => 0.2))
28
- @tracker.update(request(:category => 'b', :blah => 0.2))
29
- @tracker.update(request(:category => 'b', :blah => 0.2))
5
+ context 'static category' do
6
+ before(:each) do
7
+ @tracker = RequestLogAnalyzer::Tracker::Frequency.new(:category => :category)
8
+ @tracker.prepare
9
+ end
30
10
 
31
- @tracker.sorted_by_frequency.should == [['b', 2], ['a', 1]]
32
- end
33
- end
11
+ it "should register a request in the right category" do
12
+ @tracker.update(request(:category => 'a', :blah => 0.2))
13
+ @tracker.categories.should include('a')
14
+ end
34
15
 
35
- describe RequestLogAnalyzer::Tracker::Frequency, 'dynamic category' do
36
-
37
- before(:each) do
38
- @categorizer = Proc.new { |request| request[:duration] > 0.2 ? 'slow' : 'fast' }
39
- @tracker = RequestLogAnalyzer::Tracker::Frequency.new(:category => @categorizer)
40
- @tracker.prepare
41
- end
42
-
43
- it "should use the categorizer to determine the right category" do
44
- @tracker.update(request(:category => 'a', :duration => 0.2))
45
- @tracker.update(request(:category => 'b', :duration => 0.3))
46
- @tracker.update(request(:category => 'b', :duration => 0.4))
47
-
48
- @tracker.frequency('fast').should == 1
49
- @tracker.frequency('slow').should == 2
50
- @tracker.frequency('moderate').should == 0
51
- end
52
-
53
- end
16
+ it "should register a request in the right category" do
17
+ @tracker.update(request(:category => 'a', :blah => 0.2))
18
+ @tracker.update(request(:category => 'b', :blah => 0.2))
19
+ @tracker.update(request(:category => 'b', :blah => 0.2))
54
20
 
21
+ @tracker.frequency('a').should == 1
22
+ @tracker.frequency('b').should == 2
23
+ @tracker.overall_frequency.should == 3
24
+ end
55
25
 
56
- describe RequestLogAnalyzer::Tracker::Frequency, 'reporting' do
57
-
58
- before(:each) do
59
- @tracker = RequestLogAnalyzer::Tracker::Frequency.new(:category => :category)
60
- @tracker.prepare
26
+ it "should sort correctly by frequency" do
27
+ @tracker.update(request(:category => 'a', :blah => 0.2))
28
+ @tracker.update(request(:category => 'b', :blah => 0.2))
29
+ @tracker.update(request(:category => 'b', :blah => 0.2))
30
+
31
+ @tracker.sorted_by_frequency.should == [['b', 2], ['a', 1]]
32
+ end
61
33
  end
62
34
 
63
- it "should generate a report without errors when one category is present" do
64
- @tracker.update(request(:category => 'a', :blah => 0.2))
65
- lambda { @tracker.report(mock_output) }.should_not raise_error
35
+
36
+ context 'dynamic category' do
37
+ before(:each) do
38
+ @categorizer = Proc.new { |request| request[:duration] > 0.2 ? 'slow' : 'fast' }
39
+ @tracker = RequestLogAnalyzer::Tracker::Frequency.new(:category => @categorizer)
40
+ @tracker.prepare
41
+ end
42
+
43
+ it "should use the categorizer to determine the right category" do
44
+ @tracker.update(request(:category => 'a', :duration => 0.2))
45
+ @tracker.update(request(:category => 'b', :duration => 0.3))
46
+ @tracker.update(request(:category => 'b', :duration => 0.4))
47
+
48
+ @tracker.frequency('fast').should == 1
49
+ @tracker.frequency('slow').should == 2
50
+ @tracker.frequency('moderate').should == 0
51
+ end
66
52
  end
67
53
 
68
- it "should generate a report without errors when no category is present" do
69
- lambda { @tracker.report(mock_output) }.should_not raise_error
54
+ describe '#report' do
55
+ before(:each) do
56
+ @tracker = RequestLogAnalyzer::Tracker::Frequency.new(:category => :category)
57
+ @tracker.prepare
58
+ end
59
+
60
+ it "should generate a report without errors when one category is present" do
61
+ @tracker.update(request(:category => 'a', :blah => 0.2))
62
+ lambda { @tracker.report(mock_output) }.should_not raise_error
63
+ end
64
+
65
+ it "should generate a report without errors when no category is present" do
66
+ lambda { @tracker.report(mock_output) }.should_not raise_error
67
+ end
68
+
69
+ it "should generate a report without errors when multiple categories are present" do
70
+ @tracker.update(request(:category => 'a', :blah => 0.2))
71
+ @tracker.update(request(:category => 'b', :blah => 0.2))
72
+ lambda { @tracker.report(mock_output) }.should_not raise_error
73
+ end
70
74
  end
71
75
 
72
- it "should generate a report without errors when multiple categories are present" do
73
- @tracker.update(request(:category => 'a', :blah => 0.2))
74
- @tracker.update(request(:category => 'b', :blah => 0.2))
75
- lambda { @tracker.report(mock_output) }.should_not raise_error
76
+ describe '#to_yaml_object' do
77
+ before(:each) do
78
+ @tracker = RequestLogAnalyzer::Tracker::Frequency.new(:category => :category)
79
+ @tracker.prepare
80
+ end
81
+
82
+ it "should generate a YAML output" do
83
+ @tracker.update(request(:category => 'a', :blah => 0.2))
84
+ @tracker.update(request(:category => 'b', :blah => 0.2))
85
+ @tracker.to_yaml_object.should == { "a" => 1, "b" => 1 }
86
+ end
76
87
  end
77
- end
88
+ end
@@ -9,49 +9,49 @@ describe RequestLogAnalyzer::Tracker::HourlySpread do
9
9
 
10
10
  it "should store timestamps correctly" do
11
11
  @tracker.update(request(:timestamp => 20090102000000))
12
- @tracker.update(request(:timestamp => 20090101000000))
13
- @tracker.update(request(:timestamp => 20090103000000))
14
-
15
- @tracker.request_time_graph[0].should eql(3)
12
+ @tracker.update(request(:timestamp => 20090101000000))
13
+ @tracker.update(request(:timestamp => 20090103000000))
14
+
15
+ @tracker.hour_frequencies[0].should eql(3)
16
16
  end
17
17
 
18
18
  it "should count the number of timestamps correctly" do
19
19
  @tracker.update(request(:timestamp => 20090102000000))
20
- @tracker.update(request(:timestamp => 20090101000000))
21
- @tracker.update(request(:timestamp => 20090103000000))
22
- @tracker.update(request(:timestamp => 20090103010000))
23
-
20
+ @tracker.update(request(:timestamp => 20090101000000))
21
+ @tracker.update(request(:timestamp => 20090103000000))
22
+ @tracker.update(request(:timestamp => 20090103010000))
23
+
24
24
  @tracker.total_requests.should eql(4)
25
25
  end
26
26
 
27
27
  it "should set the first request timestamp correctly" do
28
28
  @tracker.update(request(:timestamp => 20090102000000))
29
- @tracker.update(request(:timestamp => 20090101000000))
30
- @tracker.update(request(:timestamp => 20090103000000))
31
-
29
+ @tracker.update(request(:timestamp => 20090101000000))
30
+ @tracker.update(request(:timestamp => 20090103000000))
31
+
32
32
  @tracker.first_timestamp.should == DateTime.parse('Januari 1, 2009 00:00:00')
33
33
  end
34
34
 
35
35
  it "should set the last request timestamp correctly" do
36
36
  @tracker.update(request(:timestamp => 20090102000000))
37
- @tracker.update(request(:timestamp => 20090101000000))
38
- @tracker.update(request(:timestamp => 20090103000000))
37
+ @tracker.update(request(:timestamp => 20090101000000))
38
+ @tracker.update(request(:timestamp => 20090103000000))
39
39
 
40
40
  @tracker.last_timestamp.should == DateTime.parse('Januari 3, 2009 00:00:00')
41
41
  end
42
42
 
43
43
  it "should return the correct timespan in days when multiple requests are given" do
44
44
  @tracker.update(request(:timestamp => 20090102000000))
45
- @tracker.update(request(:timestamp => 20090101000000))
46
- @tracker.update(request(:timestamp => 20090103000000))
47
-
48
- @tracker.timespan.should == 2
45
+ @tracker.update(request(:timestamp => 20090101000000))
46
+ @tracker.update(request(:timestamp => 20090103000000))
47
+
48
+ @tracker.timespan.should == 2
49
49
  end
50
50
 
51
51
  end
52
52
 
53
53
  describe RequestLogAnalyzer::Tracker::HourlySpread, 'reporting' do
54
-
54
+
55
55
  before(:each) do
56
56
  @tracker = RequestLogAnalyzer::Tracker::HourlySpread.new
57
57
  @tracker.prepare
@@ -63,9 +63,17 @@ describe RequestLogAnalyzer::Tracker::HourlySpread, 'reporting' do
63
63
 
64
64
  it "should generate a report without errors when multiple requests were tracked" do
65
65
  @tracker.update(request(:timestamp => 20090102000000))
66
- @tracker.update(request(:timestamp => 20090101000000))
67
- @tracker.update(request(:timestamp => 20090103000000))
66
+ @tracker.update(request(:timestamp => 20090101000000))
67
+ @tracker.update(request(:timestamp => 20090103000000))
68
68
  @tracker.update(request(:timestamp => 20090103010000))
69
69
  lambda { @tracker.report(mock_output) }.should_not raise_error
70
70
  end
71
+
72
+ it "should generate a YAML output" do
73
+ @tracker.update(request(:timestamp => 20090102000000))
74
+ @tracker.update(request(:timestamp => 20090101000000))
75
+ @tracker.update(request(:timestamp => 20090103000000))
76
+ @tracker.update(request(:timestamp => 20090103010000))
77
+ @tracker.to_yaml_object.should == {"22:00 - 23:00"=>0, "9:00 - 10:00"=>0, "7:00 - 8:00"=>0, "2:00 - 3:00"=>0, "12:00 - 13:00"=>0, "11:00 - 12:00"=>0, "16:00 - 17:00"=>0, "15:00 - 16:00"=>0, "19:00 - 20:00"=>0, "3:00 - 4:00"=>0, "21:00 - 22:00"=>0, "20:00 - 21:00"=>0, "14:00 - 15:00"=>0, "13:00 - 14:00"=>0, "4:00 - 5:00"=>0, "10:00 - 11:00"=>0, "18:00 - 19:00"=>0, "17:00 - 18:00"=>0, "8:00 - 9:00"=>0, "6:00 - 7:00"=>0, "5:00 - 6:00"=>0, "1:00 - 2:00"=>1, "0:00 - 1:00"=>3, "23:00 - 24:00"=>0}
78
+ end
71
79
  end
@@ -9,30 +9,30 @@ describe RequestLogAnalyzer::Tracker::Timespan do
9
9
 
10
10
  it "should set the first request timestamp correctly" do
11
11
  @tracker.update(request(:timestamp => 20090102000000))
12
- @tracker.update(request(:timestamp => 20090101000000))
13
- @tracker.update(request(:timestamp => 20090103000000))
14
-
12
+ @tracker.update(request(:timestamp => 20090101000000))
13
+ @tracker.update(request(:timestamp => 20090103000000))
14
+
15
15
  @tracker.first_timestamp.should == DateTime.parse('Januari 1, 2009 00:00:00')
16
16
  end
17
17
 
18
18
  it "should set the last request timestamp correctly" do
19
19
  @tracker.update(request(:timestamp => 20090102000000))
20
- @tracker.update(request(:timestamp => 20090101000000))
21
- @tracker.update(request(:timestamp => 20090103000000))
20
+ @tracker.update(request(:timestamp => 20090101000000))
21
+ @tracker.update(request(:timestamp => 20090103000000))
22
22
 
23
23
  @tracker.last_timestamp.should == DateTime.parse('Januari 3, 2009 00:00:00')
24
24
  end
25
-
25
+
26
26
  it "should return the correct timespan in days when multiple requests are given" do
27
27
  @tracker.update(request(:timestamp => 20090102000000))
28
- @tracker.update(request(:timestamp => 20090101000000))
29
- @tracker.update(request(:timestamp => 20090103000000))
30
-
31
- @tracker.timespan.should == 2
28
+ @tracker.update(request(:timestamp => 20090101000000))
29
+ @tracker.update(request(:timestamp => 20090103000000))
30
+
31
+ @tracker.timespan.should == 2
32
32
  end
33
33
 
34
34
  it "should return a timespan of 0 days when only one timestamp is set" do
35
- @tracker.update(request(:timestamp => 20090103000000))
35
+ @tracker.update(request(:timestamp => 20090103000000))
36
36
  @tracker.timespan.should == 0
37
37
  end
38
38
 
@@ -42,11 +42,15 @@ describe RequestLogAnalyzer::Tracker::Timespan do
42
42
  end
43
43
 
44
44
  describe RequestLogAnalyzer::Tracker::Timespan, 'reporting' do
45
-
45
+
46
46
  before(:each) do
47
47
  @tracker = RequestLogAnalyzer::Tracker::Timespan.new
48
48
  @tracker.prepare
49
49
  end
50
+
51
+ it "should have a title" do
52
+ @tracker.title.should_not eql("")
53
+ end
50
54
 
51
55
  it "should generate a report without errors when no request was tracked" do
52
56
  lambda { @tracker.report(mock_output) }.should_not raise_error
@@ -55,7 +59,15 @@ describe RequestLogAnalyzer::Tracker::Timespan, 'reporting' do
55
59
  it "should generate a report without errors when multiple requests were tracked" do
56
60
  @tracker.update(request(:category => 'a', :timestamp => 20090102000000))
57
61
  @tracker.update(request(:category => 'a', :timestamp => 20090101000000))
58
- @tracker.update(request(:category => 'a', :timestamp => 20090103000000))
62
+ @tracker.update(request(:category => 'a', :timestamp => 20090103000000))
59
63
  lambda { @tracker.report(mock_output) }.should_not raise_error
60
64
  end
65
+
66
+ it "should generate a YAML output" do
67
+ @tracker.update(request(:category => 'a', :timestamp => 20090102000000))
68
+ @tracker.update(request(:category => 'a', :timestamp => 20090101000000))
69
+ @tracker.update(request(:category => 'a', :timestamp => 20090103000000))
70
+ @tracker.to_yaml_object.should == { :first => DateTime.parse('20090101000000'), :last => DateTime.parse('20090103000000')}
71
+ end
72
+
61
73
  end