request-log-analyzer 1.3.5 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/cli/database_console_init.rb +2 -1
- data/lib/request_log_analyzer.rb +1 -1
- data/lib/request_log_analyzer/aggregator.rb +1 -5
- data/lib/request_log_analyzer/aggregator/database_inserter.rb +4 -5
- data/lib/request_log_analyzer/controller.rb +10 -21
- data/lib/request_log_analyzer/database.rb +16 -91
- data/lib/request_log_analyzer/database/base.rb +4 -4
- data/lib/request_log_analyzer/database/request.rb +22 -0
- data/lib/request_log_analyzer/database/source.rb +13 -0
- data/lib/request_log_analyzer/database/warning.rb +14 -0
- data/lib/request_log_analyzer/file_format.rb +1 -13
- data/lib/request_log_analyzer/file_format/amazon_s3.rb +1 -2
- data/lib/request_log_analyzer/file_format/apache.rb +8 -10
- data/lib/request_log_analyzer/file_format/merb.rb +21 -5
- data/lib/request_log_analyzer/file_format/rails.rb +8 -14
- data/lib/request_log_analyzer/filter.rb +6 -10
- data/lib/request_log_analyzer/filter/anonymize.rb +2 -1
- data/lib/request_log_analyzer/log_processor.rb +6 -8
- data/lib/request_log_analyzer/request.rb +47 -35
- data/lib/request_log_analyzer/source.rb +4 -6
- data/lib/request_log_analyzer/source/database_loader.rb +3 -7
- data/lib/request_log_analyzer/source/log_parser.rb +3 -6
- data/lib/request_log_analyzer/tracker.rb +12 -19
- data/lib/request_log_analyzer/tracker/hourly_spread.rb +1 -2
- data/request-log-analyzer.gemspec +3 -3
- data/spec/database.yml +6 -0
- data/spec/unit/aggregator/database_inserter_spec.rb +3 -3
- data/spec/unit/database/base_class_spec.rb +9 -16
- data/spec/unit/database/database_spec.rb +9 -14
- data/spec/unit/tracker/tracker_api_spec.rb +111 -36
- metadata +7 -4
data/spec/database.yml
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# This file determines what databases are used to test the database
|
2
|
+
# functionality of request-log-analyzer. By default, only an SQLite3
|
3
|
+
# memory database is enabled.
|
4
|
+
#
|
5
|
+
# The syntax of this file is exactly the same as Rails's database.yml.
|
6
|
+
|
1
7
|
sqlite3:
|
2
8
|
adapter: "sqlite3"
|
3
9
|
database: ":memory:"
|
@@ -66,7 +66,7 @@ describe RequestLogAnalyzer::Aggregator::DatabaseInserter do
|
|
66
66
|
it "should insert a record in the request table" do
|
67
67
|
lambda {
|
68
68
|
@database_inserter.aggregate(@incomplete_request)
|
69
|
-
}.should change(
|
69
|
+
}.should change(RequestLogAnalyzer::Database::Request, :count).from(0).to(1)
|
70
70
|
end
|
71
71
|
|
72
72
|
it "should insert a record in the first_lines table" do
|
@@ -77,7 +77,7 @@ describe RequestLogAnalyzer::Aggregator::DatabaseInserter do
|
|
77
77
|
|
78
78
|
it "should insert records in all relevant line tables" do
|
79
79
|
@database_inserter.aggregate(@completed_request)
|
80
|
-
request =
|
80
|
+
request = RequestLogAnalyzer::Database::Request.first
|
81
81
|
request.should have(2).test_lines
|
82
82
|
request.should have(1).first_lines
|
83
83
|
request.should have(1).eval_lines
|
@@ -85,7 +85,7 @@ describe RequestLogAnalyzer::Aggregator::DatabaseInserter do
|
|
85
85
|
end
|
86
86
|
|
87
87
|
it "should log a warning in the warnings table" do
|
88
|
-
|
88
|
+
RequestLogAnalyzer::Database::Warning.should_receive(:create!).with(hash_including(:warning_type => 'test_warning'))
|
89
89
|
@database_inserter.warning(:test_warning, "Testing the warning system", 12)
|
90
90
|
end
|
91
91
|
end
|
@@ -15,16 +15,13 @@ describe RequestLogAnalyzer::Database::Base do
|
|
15
15
|
@orm_class.stub!(:belongs_to)
|
16
16
|
@orm_class.stub!(:serialize)
|
17
17
|
@orm_class.stub!(:line_definition=)
|
18
|
+
|
18
19
|
Class.stub!(:new).with(RequestLogAnalyzer::Database::Base).and_return(@orm_class)
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
@source_class = mock('Source ActiveRecord::Base class')
|
23
|
-
@source_class.stub!(:has_many)
|
21
|
+
RequestLogAnalyzer::Database::Request.stub!(:has_many)
|
22
|
+
RequestLogAnalyzer::Database::Source.stub!(:has_many)
|
24
23
|
|
25
24
|
@database = mock_database
|
26
|
-
@database.stub!(:request_class).and_return(@request_class)
|
27
|
-
@database.stub!(:source_class).and_return(@source_class)
|
28
25
|
RequestLogAnalyzer::Database::Base.stub!(:database).and_return(@database)
|
29
26
|
end
|
30
27
|
|
@@ -49,12 +46,12 @@ describe RequestLogAnalyzer::Database::Base do
|
|
49
46
|
end
|
50
47
|
|
51
48
|
it "should set a :has_many relationship in the request class" do
|
52
|
-
|
49
|
+
RequestLogAnalyzer::Database::Request.should_receive(:has_many).with(:test_lines)
|
53
50
|
RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition)
|
54
51
|
end
|
55
52
|
|
56
53
|
it "should set a :has_many relationship in the source class" do
|
57
|
-
|
54
|
+
RequestLogAnalyzer::Database::Source.should_receive(:has_many).with(:test_lines)
|
58
55
|
RequestLogAnalyzer::Database::Base.subclass_from_line_definition(@line_definition)
|
59
56
|
end
|
60
57
|
|
@@ -73,14 +70,10 @@ describe RequestLogAnalyzer::Database::Base do
|
|
73
70
|
describe '.subclass_from_table' do
|
74
71
|
before(:each) do
|
75
72
|
|
76
|
-
|
77
|
-
|
78
|
-
@source_class = mock('Source ActiveRecord::Base class')
|
79
|
-
@source_class.stub!(:has_many)
|
73
|
+
RequestLogAnalyzer::Database::Request.stub!(:has_many)
|
74
|
+
RequestLogAnalyzer::Database::Source.stub!(:has_many)
|
80
75
|
|
81
76
|
@database = mock_database
|
82
|
-
@database.stub!(:request_class).and_return(@request_class)
|
83
|
-
@database.stub!(:source_class).and_return(@source_class)
|
84
77
|
@database.connection.stub!(:table_exists?).and_return(true)
|
85
78
|
RequestLogAnalyzer::Database::Base.stub!(:database).and_return(@database)
|
86
79
|
|
@@ -107,7 +100,7 @@ describe RequestLogAnalyzer::Database::Base do
|
|
107
100
|
end
|
108
101
|
|
109
102
|
it "should create the :has_many relation in the request class" do
|
110
|
-
|
103
|
+
RequestLogAnalyzer::Database::Request.should_receive(:has_many).with(:completed_lines)
|
111
104
|
RequestLogAnalyzer::Database::Base.subclass_from_table('completed_lines')
|
112
105
|
end
|
113
106
|
|
@@ -117,7 +110,7 @@ describe RequestLogAnalyzer::Database::Base do
|
|
117
110
|
end
|
118
111
|
|
119
112
|
it "should create the :has_many relation in the request class" do
|
120
|
-
|
113
|
+
RequestLogAnalyzer::Database::Source.should_receive(:has_many).with(:completed_lines)
|
121
114
|
RequestLogAnalyzer::Database::Base.subclass_from_table('completed_lines')
|
122
115
|
end
|
123
116
|
|
@@ -15,11 +15,11 @@ describe RequestLogAnalyzer::Database do
|
|
15
15
|
# FileFormat-agnostic classes
|
16
16
|
default_orm_class_names.each do |const|
|
17
17
|
it "should create the default #{const} constant" do
|
18
|
-
|
18
|
+
RequestLogAnalyzer::Database.const_defined?(const).should be_true
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should create the default #{const} class inheriting from ActiveRecord::Base and RequestLogAnalyzer::Database::Base" do
|
22
|
-
|
22
|
+
RequestLogAnalyzer::Database.const_get(const).ancestors.should include(ActiveRecord::Base, RequestLogAnalyzer::Database::Base)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -38,8 +38,8 @@ describe RequestLogAnalyzer::Database do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should create a :has_many relation from the Request and Source class to the #{const} class" do
|
41
|
-
|
42
|
-
|
41
|
+
RequestLogAnalyzer::Database::Request.send(:reflections).should include(const.underscore.pluralize.to_sym)
|
42
|
+
RequestLogAnalyzer::Database::Source.send(:reflections).should include(const.underscore.pluralize.to_sym)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -60,6 +60,7 @@ describe RequestLogAnalyzer::Database do
|
|
60
60
|
after(:each) { @database.remove_orm_classes! }
|
61
61
|
|
62
62
|
default_orm_class_names.each do |klass|
|
63
|
+
|
63
64
|
it "should create a table for the default #{klass} class" do
|
64
65
|
@database.connection.should_receive(:create_table).with(klass.underscore.pluralize.to_sym)
|
65
66
|
@database.send :create_database_schema!
|
@@ -67,7 +68,7 @@ describe RequestLogAnalyzer::Database do
|
|
67
68
|
|
68
69
|
it "should create a #{klass} class inheriting from ActiveRecord and the base class of the ORM module" do
|
69
70
|
@database.send :create_database_schema!
|
70
|
-
|
71
|
+
RequestLogAnalyzer::Database.const_get(klass).ancestors.should include(ActiveRecord::Base, RequestLogAnalyzer::Database::Base)
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
@@ -92,15 +93,9 @@ describe RequestLogAnalyzer::Database do
|
|
92
93
|
@connection = mock_connection
|
93
94
|
@database.stub!(:connection).and_return(@connection)
|
94
95
|
|
95
|
-
# Mock the
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
@source_class = mock('Source ActiveRecord::Base class')
|
100
|
-
@source_class.stub!(:has_many)
|
101
|
-
|
102
|
-
@database.stub!(:request_class).and_return(@request_class)
|
103
|
-
@database.stub!(:source_class).and_return(@source_class)
|
96
|
+
# Mock the has_many method of the defaukt ORM classes
|
97
|
+
RequestLogAnalyzer::Database::Request.stub!(:has_many)
|
98
|
+
RequestLogAnalyzer::Database::Source.stub!(:has_many)
|
104
99
|
|
105
100
|
@mock_class = Class.new(RequestLogAnalyzer::Database::Base)
|
106
101
|
|
@@ -1,49 +1,124 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
2
|
|
3
|
-
describe RequestLogAnalyzer::Tracker::Base
|
3
|
+
describe RequestLogAnalyzer::Tracker::Base do
|
4
4
|
|
5
|
-
|
6
|
-
@tracker = Class.new(RequestLogAnalyzer::Tracker::Base).new
|
5
|
+
describe 'API' do
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
7
|
+
before(:each) do
|
8
|
+
@tracker = Class.new(RequestLogAnalyzer::Tracker::Base).new
|
9
|
+
|
10
|
+
@summarizer = RequestLogAnalyzer::Aggregator::Summarizer.new(mock_source)
|
11
|
+
@summarizer.trackers << @tracker
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should receive :prepare when the summarizer is preparing" do
|
15
|
+
@tracker.should_receive(:prepare).once
|
16
|
+
@summarizer.prepare
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should receive :update for every request for which should_update? returns true" do
|
20
|
+
@tracker.should_receive(:should_update?).twice.and_return(true)
|
21
|
+
@tracker.should_receive(:update).twice
|
22
|
+
|
23
|
+
@summarizer.aggregate(testing_format.request(:field => 'value1'))
|
24
|
+
@summarizer.aggregate(testing_format.request(:field => 'value2'))
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should not :update for every request for which should_update? returns false" do
|
28
|
+
@tracker.should_receive(:should_update?).twice.and_return(false)
|
29
|
+
@tracker.should_not_receive(:update)
|
30
|
+
|
31
|
+
@summarizer.aggregate(testing_format.request(:field => 'value1'))
|
32
|
+
@summarizer.aggregate(testing_format.request(:field => 'value2'))
|
33
|
+
end
|
34
|
+
|
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)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should receieve :finalize when the summarizer is finalizing" do
|
41
|
+
@tracker.should_receive(:finalize).once
|
42
|
+
@summarizer.finalize
|
43
|
+
end
|
20
44
|
end
|
21
45
|
|
22
|
-
|
23
|
-
|
24
|
-
|
46
|
+
describe '#should_update?' do
|
47
|
+
before(:each) do
|
48
|
+
@tracker_class = Class.new(RequestLogAnalyzer::Tracker::Base)
|
49
|
+
end
|
25
50
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
it "should not :update for every request for which should_update? returns false" do
|
31
|
-
@tracker.should_receive(:should_update?).twice.and_return(false)
|
32
|
-
@tracker.should_not_receive(:update)
|
51
|
+
it "should return true by default, when no checks are installed" do
|
52
|
+
tracker = @tracker_class.new
|
53
|
+
tracker.should_update?(testing_format.request).should be_true
|
54
|
+
end
|
33
55
|
|
34
|
-
|
35
|
-
|
36
|
-
|
56
|
+
it "should return false if the line type is not in the request" do
|
57
|
+
tracker = @tracker_class.new(:line_type => :not_there)
|
58
|
+
tracker.should_update?(request(:line_type => :different)).should be_false
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should return true if the line type is in the request" do
|
62
|
+
tracker = @tracker_class.new(:line_type => :there)
|
63
|
+
tracker.should_update?(request(:line_type => :there)).should be_true
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should return true if a field name is given to :if and it is in the request" do
|
67
|
+
tracker = @tracker_class.new(:if => :field)
|
68
|
+
tracker.should_update?(request(:field => 'anything')).should be_true
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should return false if a field name is given to :if and it is not the request" do
|
72
|
+
tracker = @tracker_class.new(:if => :field)
|
73
|
+
tracker.should_update?(request(:other_field => 'anything')).should be_false
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should return false if a field name is given to :unless and it is in the request" do
|
77
|
+
tracker = @tracker_class.new(:unless => :field)
|
78
|
+
tracker.should_update?(request(:field => 'anything')).should be_false
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return true if a field name is given to :unless and it is not the request" do
|
82
|
+
tracker = @tracker_class.new(:unless => :field)
|
83
|
+
tracker.should_update?(request(:other_field => 'anything')).should be_true
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should return the value of the block if one is given to the :if option" do
|
87
|
+
tracker = @tracker_class.new(:if => lambda { false } )
|
88
|
+
tracker.should_update?(request(:field => 'anything')).should be_false
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should return the inverse value of the block if one is given to the :if option" do
|
92
|
+
tracker = @tracker_class.new(:unless => lambda { false } )
|
93
|
+
tracker.should_update?(request(:field => 'anything')).should be_true
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should return false if any of the checks fail" do
|
97
|
+
tracker = @tracker_class.new(:if => :field, :unless => lambda { false }, :line_type => :not_present )
|
98
|
+
tracker.should_update?(request(:line_type => :present, :field => 'anything')).should be_false
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should return true if all of the checks succeed" do
|
102
|
+
tracker = @tracker_class.new(:if => :field, :unless => lambda { false }, :line_type => :present )
|
103
|
+
tracker.should_update?(request(:line_type => :present, :field => 'anything')).should be_true
|
104
|
+
end
|
105
|
+
|
37
106
|
|
38
|
-
it "should receive :report when the summary report is being built" do
|
39
|
-
@tracker.should_receive(:report).with(anything).once
|
40
|
-
@summarizer.report(mock_output)
|
41
107
|
end
|
42
108
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
109
|
+
describe '#to_yaml_object' do
|
110
|
+
|
111
|
+
before(:each) do
|
112
|
+
@tracker = Class.new(RequestLogAnalyzer::Tracker::Base).new
|
113
|
+
|
114
|
+
@summarizer = RequestLogAnalyzer::Aggregator::Summarizer.new(mock_source)
|
115
|
+
@summarizer.trackers << @tracker
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should receive :to_yaml object when finalizing" do
|
119
|
+
@summarizer.options[:dump] = temp_output_file(:dump)
|
120
|
+
@tracker.should_receive(:to_yaml_object).once
|
121
|
+
@summarizer.to_yaml
|
122
|
+
end
|
47
123
|
end
|
48
|
-
|
49
124
|
end
|
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.3.
|
4
|
+
version: 1.3.6
|
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-09-
|
13
|
+
date: 2009-09-20 00:00:00 +02:00
|
14
14
|
default_executable: request-log-analyzer
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -45,10 +45,10 @@ extra_rdoc_files:
|
|
45
45
|
- README.rdoc
|
46
46
|
files:
|
47
47
|
- spec/unit/filter/anonymize_filter_spec.rb
|
48
|
+
- spec/fixtures/rails_22_cached.log
|
48
49
|
- lib/request_log_analyzer/line_definition.rb
|
49
50
|
- lib/request_log_analyzer/output/html.rb
|
50
51
|
- lib/request_log_analyzer/controller.rb
|
51
|
-
- spec/fixtures/rails_22_cached.log
|
52
52
|
- spec/lib/macros.rb
|
53
53
|
- lib/request_log_analyzer/file_format/rails_development.rb
|
54
54
|
- spec/fixtures/apache_combined.log
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/cli/progressbar.rb
|
87
87
|
- lib/request_log_analyzer/mailer.rb
|
88
88
|
- README.rdoc
|
89
|
+
- lib/request_log_analyzer/database/warning.rb
|
89
90
|
- spec/fixtures/merb.log
|
90
91
|
- lib/request_log_analyzer/tracker/hourly_spread.rb
|
91
92
|
- .gitignore
|
@@ -104,6 +105,7 @@ files:
|
|
104
105
|
- lib/request_log_analyzer/aggregator/database_inserter.rb
|
105
106
|
- lib/request_log_analyzer/aggregator/summarizer.rb
|
106
107
|
- lib/request_log_analyzer/file_format/rack.rb
|
108
|
+
- lib/request_log_analyzer/database/source.rb
|
107
109
|
- lib/request_log_analyzer/file_format/rails.rb
|
108
110
|
- spec/fixtures/decompression.tar.gz
|
109
111
|
- spec/unit/tracker/traffic_tracker_spec.rb
|
@@ -127,10 +129,10 @@ files:
|
|
127
129
|
- spec/unit/controller/controller_spec.rb
|
128
130
|
- spec/lib/mocks.rb
|
129
131
|
- spec/lib/helpers.rb
|
132
|
+
- spec/fixtures/rails_1x.log
|
130
133
|
- lib/cli/database_console_init.rb
|
131
134
|
- lib/request_log_analyzer/output.rb
|
132
135
|
- lib/request_log_analyzer/file_format/apache.rb
|
133
|
-
- spec/fixtures/rails_1x.log
|
134
136
|
- spec/fixtures/decompression.log.zip
|
135
137
|
- spec/unit/source/request_spec.rb
|
136
138
|
- spec/unit/source/log_parser_spec.rb
|
@@ -143,6 +145,7 @@ files:
|
|
143
145
|
- spec/unit/aggregator/summarizer_spec.rb
|
144
146
|
- spec/fixtures/syslog_1x.log
|
145
147
|
- spec/fixtures/rails_22.log
|
148
|
+
- lib/request_log_analyzer/database/request.rb
|
146
149
|
- spec/fixtures/multiple_files_2.log
|
147
150
|
- LICENSE
|
148
151
|
- lib/request_log_analyzer/source/database_loader.rb
|