request-log-analyzer 1.13.1 → 1.13.3
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/bin/console +17 -0
- data/lib/cli/command_line_arguments.rb +29 -36
- data/lib/cli/database_console.rb +1 -3
- data/lib/cli/database_console_init.rb +11 -11
- data/lib/cli/progressbar.rb +30 -32
- data/lib/cli/tools.rb +20 -23
- data/lib/request_log_analyzer.rb +8 -8
- data/lib/request_log_analyzer/aggregator.rb +4 -7
- data/lib/request_log_analyzer/aggregator/database_inserter.rb +10 -13
- data/lib/request_log_analyzer/aggregator/echo.rb +5 -7
- data/lib/request_log_analyzer/aggregator/summarizer.rb +15 -18
- data/lib/request_log_analyzer/class_level_inheritable_attributes.rb +23 -0
- data/lib/request_log_analyzer/controller.rb +36 -42
- data/lib/request_log_analyzer/database.rb +4 -6
- data/lib/request_log_analyzer/database/base.rb +39 -41
- data/lib/request_log_analyzer/database/connection.rb +8 -10
- data/lib/request_log_analyzer/database/request.rb +1 -3
- data/lib/request_log_analyzer/database/source.rb +0 -2
- data/lib/request_log_analyzer/database/warning.rb +4 -6
- data/lib/request_log_analyzer/file_format.rb +46 -49
- data/lib/request_log_analyzer/file_format/amazon_s3.rb +15 -19
- data/lib/request_log_analyzer/file_format/apache.rb +42 -45
- data/lib/request_log_analyzer/file_format/delayed_job.rb +13 -15
- data/lib/request_log_analyzer/file_format/delayed_job2.rb +9 -11
- data/lib/request_log_analyzer/file_format/delayed_job21.rb +9 -11
- data/lib/request_log_analyzer/file_format/delayed_job3.rb +5 -8
- data/lib/request_log_analyzer/file_format/delayed_job4.rb +5 -8
- data/lib/request_log_analyzer/file_format/haproxy.rb +44 -48
- data/lib/request_log_analyzer/file_format/merb.rb +13 -17
- data/lib/request_log_analyzer/file_format/mysql.rb +21 -25
- data/lib/request_log_analyzer/file_format/nginx.rb +0 -2
- data/lib/request_log_analyzer/file_format/oink.rb +30 -31
- data/lib/request_log_analyzer/file_format/postgresql.rb +11 -15
- data/lib/request_log_analyzer/file_format/rack.rb +0 -2
- data/lib/request_log_analyzer/file_format/rails.rb +100 -104
- data/lib/request_log_analyzer/file_format/rails3.rb +19 -23
- data/lib/request_log_analyzer/file_format/rails_development.rb +0 -1
- data/lib/request_log_analyzer/file_format/w3c.rb +16 -18
- data/lib/request_log_analyzer/filter.rb +0 -2
- data/lib/request_log_analyzer/filter/anonymize.rb +4 -7
- data/lib/request_log_analyzer/filter/field.rb +3 -6
- data/lib/request_log_analyzer/filter/timespan.rb +2 -6
- data/lib/request_log_analyzer/line_definition.rb +16 -19
- data/lib/request_log_analyzer/log_processor.rb +10 -14
- data/lib/request_log_analyzer/mailer.rb +9 -12
- data/lib/request_log_analyzer/output.rb +12 -14
- data/lib/request_log_analyzer/output/fixed_width.rb +21 -28
- data/lib/request_log_analyzer/output/html.rb +11 -14
- data/lib/request_log_analyzer/request.rb +53 -33
- data/lib/request_log_analyzer/source.rb +2 -5
- data/lib/request_log_analyzer/source/log_parser.rb +9 -16
- data/lib/request_log_analyzer/tracker.rb +10 -12
- data/lib/request_log_analyzer/tracker/duration.rb +4 -6
- data/lib/request_log_analyzer/tracker/frequency.rb +9 -11
- data/lib/request_log_analyzer/tracker/hourly_spread.rb +8 -11
- data/lib/request_log_analyzer/tracker/numeric_value.rb +40 -44
- data/lib/request_log_analyzer/tracker/timespan.rb +5 -8
- data/lib/request_log_analyzer/tracker/traffic.rb +8 -10
- data/lib/request_log_analyzer/version.rb +1 -1
- data/request-log-analyzer.gemspec +6 -6
- data/spec/integration/command_line_usage_spec.rb +33 -33
- data/spec/integration/mailer_spec.rb +181 -185
- data/spec/integration/munin_plugins_rails_spec.rb +20 -20
- data/spec/integration/scout_spec.rb +40 -41
- data/spec/lib/helpers.rb +8 -9
- data/spec/lib/macros.rb +2 -4
- data/spec/lib/matchers.rb +20 -25
- data/spec/lib/mocks.rb +10 -11
- data/spec/lib/testing_format.rb +8 -10
- data/spec/spec_helper.rb +5 -1
- data/spec/unit/aggregator/database_inserter_spec.rb +23 -23
- data/spec/unit/aggregator/summarizer_spec.rb +7 -7
- data/spec/unit/controller/controller_spec.rb +14 -14
- data/spec/unit/controller/log_processor_spec.rb +3 -3
- data/spec/unit/database/base_class_spec.rb +36 -37
- data/spec/unit/database/connection_spec.rb +10 -10
- data/spec/unit/database/database_spec.rb +11 -11
- data/spec/unit/file_format/amazon_s3_format_spec.rb +66 -62
- data/spec/unit/file_format/apache_format_spec.rb +57 -52
- data/spec/unit/file_format/common_regular_expressions_spec.rb +18 -21
- data/spec/unit/file_format/delayed_job21_format_spec.rb +22 -16
- data/spec/unit/file_format/delayed_job2_format_spec.rb +22 -16
- data/spec/unit/file_format/delayed_job3_format_spec.rb +14 -10
- data/spec/unit/file_format/delayed_job4_format_spec.rb +14 -10
- data/spec/unit/file_format/delayed_job_format_spec.rb +12 -12
- data/spec/unit/file_format/file_format_api_spec.rb +19 -19
- data/spec/unit/file_format/format_autodetection_spec.rb +7 -7
- data/spec/unit/file_format/haproxy_format_spec.rb +53 -49
- data/spec/unit/file_format/inheritance_spec.rb +13 -0
- data/spec/unit/file_format/line_definition_spec.rb +35 -33
- data/spec/unit/file_format/merb_format_spec.rb +13 -11
- data/spec/unit/file_format/mysql_format_spec.rb +24 -24
- data/spec/unit/file_format/oink_format_spec.rb +29 -29
- data/spec/unit/file_format/postgresql_format_spec.rb +9 -9
- data/spec/unit/file_format/rack_format_spec.rb +36 -31
- data/spec/unit/file_format/rails3_format_spec.rb +46 -46
- data/spec/unit/file_format/rails_format_spec.rb +52 -53
- data/spec/unit/file_format/w3c_format_spec.rb +27 -24
- data/spec/unit/filter/anonymize_filter_spec.rb +7 -7
- data/spec/unit/filter/field_filter_spec.rb +26 -26
- data/spec/unit/filter/filter_spec.rb +4 -4
- data/spec/unit/filter/timespan_filter_spec.rb +22 -22
- data/spec/unit/mailer_spec.rb +21 -21
- data/spec/unit/request_spec.rb +29 -29
- data/spec/unit/source/log_parser_spec.rb +5 -5
- data/spec/unit/tracker/duration_tracker_spec.rb +23 -23
- data/spec/unit/tracker/frequency_tracker_spec.rb +29 -30
- data/spec/unit/tracker/hourly_spread_spec.rb +35 -35
- data/spec/unit/tracker/numeric_value_tracker_spec.rb +71 -72
- data/spec/unit/tracker/timespan_tracker_spec.rb +31 -31
- data/spec/unit/tracker/tracker_api_spec.rb +43 -44
- data/spec/unit/tracker/traffic_tracker_spec.rb +7 -7
- metadata +38 -35
|
@@ -7,36 +7,36 @@ describe RequestLogAnalyzer::Tracker::Timespan do
|
|
|
7
7
|
@tracker.prepare
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
it
|
|
11
|
-
@tracker.update(request(:
|
|
12
|
-
@tracker.update(request(:
|
|
13
|
-
@tracker.update(request(:
|
|
10
|
+
it 'should set the first request timestamp correctly' do
|
|
11
|
+
@tracker.update(request(timestamp: 20_090_102_000_000))
|
|
12
|
+
@tracker.update(request(timestamp: 20_090_101_000_000))
|
|
13
|
+
@tracker.update(request(timestamp: 20_090_103_000_000))
|
|
14
14
|
|
|
15
15
|
@tracker.first_timestamp.should == DateTime.parse('Januari 1, 2009 00:00:00')
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
it
|
|
19
|
-
@tracker.update(request(:
|
|
20
|
-
@tracker.update(request(:
|
|
21
|
-
@tracker.update(request(:
|
|
18
|
+
it 'should set the last request timestamp correctly' do
|
|
19
|
+
@tracker.update(request(timestamp: 20_090_102_000_000))
|
|
20
|
+
@tracker.update(request(timestamp: 20_090_101_000_000))
|
|
21
|
+
@tracker.update(request(timestamp: 20_090_103_000_000))
|
|
22
22
|
|
|
23
23
|
@tracker.last_timestamp.should == DateTime.parse('Januari 3, 2009 00:00:00')
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
it
|
|
27
|
-
@tracker.update(request(:
|
|
28
|
-
@tracker.update(request(:
|
|
29
|
-
@tracker.update(request(:
|
|
26
|
+
it 'should return the correct timespan in days when multiple requests are given' do
|
|
27
|
+
@tracker.update(request(timestamp: 20_090_102_000_000))
|
|
28
|
+
@tracker.update(request(timestamp: 20_090_101_000_000))
|
|
29
|
+
@tracker.update(request(timestamp: 20_090_103_000_000))
|
|
30
30
|
|
|
31
31
|
@tracker.timespan.should == 2
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
it
|
|
35
|
-
@tracker.update(request(:
|
|
34
|
+
it 'should return a timespan of 0 days when only one timestamp is set' do
|
|
35
|
+
@tracker.update(request(timestamp: 20_090_103_000_000))
|
|
36
36
|
@tracker.timespan.should == 0
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
it
|
|
39
|
+
it 'should raise an error when no timestamp is set' do
|
|
40
40
|
lambda { @tracker.timespan }.should raise_error
|
|
41
41
|
end
|
|
42
42
|
end
|
|
@@ -47,27 +47,27 @@ describe RequestLogAnalyzer::Tracker::Timespan, 'reporting' do
|
|
|
47
47
|
@tracker = RequestLogAnalyzer::Tracker::Timespan.new
|
|
48
48
|
@tracker.prepare
|
|
49
49
|
end
|
|
50
|
-
|
|
51
|
-
it
|
|
52
|
-
@tracker.title.should_not eql(
|
|
50
|
+
|
|
51
|
+
it 'should have a title' do
|
|
52
|
+
@tracker.title.should_not eql('')
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
-
it
|
|
55
|
+
it 'should generate a report without errors when no request was tracked' do
|
|
56
56
|
lambda { @tracker.report(mock_output) }.should_not raise_error
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
it
|
|
60
|
-
@tracker.update(request(:
|
|
61
|
-
@tracker.update(request(:
|
|
62
|
-
@tracker.update(request(:
|
|
59
|
+
it 'should generate a report without errors when multiple requests were tracked' do
|
|
60
|
+
@tracker.update(request(category: 'a', timestamp: 20_090_102_000_000))
|
|
61
|
+
@tracker.update(request(category: 'a', timestamp: 20_090_101_000_000))
|
|
62
|
+
@tracker.update(request(category: 'a', timestamp: 20_090_103_000_000))
|
|
63
63
|
lambda { @tracker.report(mock_output) }.should_not raise_error
|
|
64
64
|
end
|
|
65
|
-
|
|
66
|
-
it
|
|
67
|
-
@tracker.update(request(:
|
|
68
|
-
@tracker.update(request(:
|
|
69
|
-
@tracker.update(request(:
|
|
70
|
-
@tracker.to_yaml_object.should == { :
|
|
65
|
+
|
|
66
|
+
it 'should generate a YAML output' do
|
|
67
|
+
@tracker.update(request(category: 'a', timestamp: 20_090_102_000_000))
|
|
68
|
+
@tracker.update(request(category: 'a', timestamp: 20_090_101_000_000))
|
|
69
|
+
@tracker.update(request(category: 'a', timestamp: 20_090_103_000_000))
|
|
70
|
+
@tracker.to_yaml_object.should == { first: DateTime.parse('20090101000000'), last: DateTime.parse('20090103000000') }
|
|
71
71
|
end
|
|
72
|
-
|
|
73
|
-
end
|
|
72
|
+
|
|
73
|
+
end
|
|
@@ -11,34 +11,34 @@ describe RequestLogAnalyzer::Tracker::Base do
|
|
|
11
11
|
@summarizer.trackers << @tracker
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
it
|
|
14
|
+
it 'should receive :prepare when the summarizer is preparing' do
|
|
15
15
|
@tracker.should_receive(:prepare).once
|
|
16
16
|
@summarizer.prepare
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
it
|
|
19
|
+
it 'should receive :update for every request for which should_update? returns true' do
|
|
20
20
|
@tracker.should_receive(:should_update?).twice.and_return(true)
|
|
21
21
|
@tracker.should_receive(:update).twice
|
|
22
22
|
|
|
23
|
-
@summarizer.aggregate(testing_format.request(:
|
|
24
|
-
@summarizer.aggregate(testing_format.request(:
|
|
23
|
+
@summarizer.aggregate(testing_format.request(field: 'value1'))
|
|
24
|
+
@summarizer.aggregate(testing_format.request(field: 'value2'))
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
it
|
|
27
|
+
it 'should not :update for every request for which should_update? returns false' do
|
|
28
28
|
@tracker.should_receive(:should_update?).twice.and_return(false)
|
|
29
29
|
@tracker.should_not_receive(:update)
|
|
30
30
|
|
|
31
|
-
@summarizer.aggregate(testing_format.request(:
|
|
32
|
-
@summarizer.aggregate(testing_format.request(:
|
|
31
|
+
@summarizer.aggregate(testing_format.request(field: 'value1'))
|
|
32
|
+
@summarizer.aggregate(testing_format.request(field: 'value2'))
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
it
|
|
35
|
+
it 'should receive :report when the summary report is being built' do
|
|
36
36
|
m = mock_output
|
|
37
37
|
m.should_receive(:report_tracker).with(@tracker)
|
|
38
38
|
@summarizer.report(m)
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
it
|
|
41
|
+
it 'should receieve :finalize when the summarizer is finalizing' do
|
|
42
42
|
@tracker.should_receive(:finalize).once
|
|
43
43
|
@summarizer.finalize
|
|
44
44
|
end
|
|
@@ -49,62 +49,61 @@ describe RequestLogAnalyzer::Tracker::Base do
|
|
|
49
49
|
@tracker_class = Class.new(RequestLogAnalyzer::Tracker::Base)
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
it
|
|
52
|
+
it 'should return true by default, when no checks are installed' do
|
|
53
53
|
tracker = @tracker_class.new
|
|
54
|
-
tracker.should_update?(testing_format.request).should
|
|
54
|
+
tracker.should_update?(testing_format.request).should == true
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
it
|
|
58
|
-
tracker = @tracker_class.new(:
|
|
59
|
-
tracker.should_update?(request(:
|
|
57
|
+
it 'should return false if the line type is not in the request' do
|
|
58
|
+
tracker = @tracker_class.new(line_type: :not_there)
|
|
59
|
+
tracker.should_update?(request(line_type: :different)).should == false
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
it
|
|
63
|
-
tracker = @tracker_class.new(:
|
|
64
|
-
tracker.should_update?(request(:
|
|
62
|
+
it 'should return true if the line type is in the request' do
|
|
63
|
+
tracker = @tracker_class.new(line_type: :there)
|
|
64
|
+
tracker.should_update?(request(line_type: :there)).should == true
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
it
|
|
68
|
-
tracker = @tracker_class.new(:
|
|
69
|
-
tracker.should_update?(request(:
|
|
67
|
+
it 'should return true if a field name is given to :if and it is in the request' do
|
|
68
|
+
tracker = @tracker_class.new(if: :field)
|
|
69
|
+
tracker.should_update?(request(field: 'anything')).should == true
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
it
|
|
73
|
-
tracker = @tracker_class.new(:
|
|
74
|
-
tracker.should_update?(request(:
|
|
72
|
+
it 'should return false if a field name is given to :if and it is not the request' do
|
|
73
|
+
tracker = @tracker_class.new(if: :field)
|
|
74
|
+
tracker.should_update?(request(other_field: 'anything')).should == false
|
|
75
75
|
end
|
|
76
76
|
|
|
77
|
-
it
|
|
78
|
-
tracker = @tracker_class.new(:
|
|
79
|
-
tracker.should_update?(request(:
|
|
77
|
+
it 'should return false if a field name is given to :unless and it is in the request' do
|
|
78
|
+
tracker = @tracker_class.new(unless: :field)
|
|
79
|
+
tracker.should_update?(request(field: 'anything')).should == false
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
it
|
|
83
|
-
tracker = @tracker_class.new(:
|
|
84
|
-
tracker.should_update?(request(:
|
|
82
|
+
it 'should return true if a field name is given to :unless and it is not the request' do
|
|
83
|
+
tracker = @tracker_class.new(unless: :field)
|
|
84
|
+
tracker.should_update?(request(other_field: 'anything')).should == true
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
it
|
|
88
|
-
tracker = @tracker_class.new(:
|
|
89
|
-
tracker.should_update?(request(:
|
|
87
|
+
it 'should return the value of the block if one is given to the :if option' do
|
|
88
|
+
tracker = @tracker_class.new(if: lambda { |_r| false })
|
|
89
|
+
tracker.should_update?(request(field: 'anything')).should == false
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
it
|
|
93
|
-
tracker = @tracker_class.new(:
|
|
94
|
-
tracker.should_update?(request(:
|
|
92
|
+
it 'should return the inverse value of the block if one is given to the :if option' do
|
|
93
|
+
tracker = @tracker_class.new(unless: lambda { |_r| false })
|
|
94
|
+
tracker.should_update?(request(field: 'anything')).should == true
|
|
95
95
|
end
|
|
96
96
|
|
|
97
|
-
it
|
|
98
|
-
tracker = @tracker_class.new(:
|
|
99
|
-
tracker.should_update?(request(:
|
|
97
|
+
it 'should return false if any of the checks fail' do
|
|
98
|
+
tracker = @tracker_class.new(if: :field, unless: lambda { |_r| false }, line_type: :not_present)
|
|
99
|
+
tracker.should_update?(request(line_type: :present, field: 'anything')).should == false
|
|
100
100
|
end
|
|
101
101
|
|
|
102
|
-
it
|
|
103
|
-
tracker = @tracker_class.new(:
|
|
104
|
-
tracker.should_update?(request(:
|
|
102
|
+
it 'should return true if all of the checks succeed' do
|
|
103
|
+
tracker = @tracker_class.new(if: :field, unless: lambda { |_r| false }, line_type: :present)
|
|
104
|
+
tracker.should_update?(request(line_type: :present, field: 'anything')).should == true
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
-
|
|
108
107
|
end
|
|
109
108
|
|
|
110
109
|
describe '#to_yaml_object' do
|
|
@@ -116,10 +115,10 @@ describe RequestLogAnalyzer::Tracker::Base do
|
|
|
116
115
|
@summarizer.trackers << @tracker
|
|
117
116
|
end
|
|
118
117
|
|
|
119
|
-
it
|
|
118
|
+
it 'should receive :to_yaml object when finalizing' do
|
|
120
119
|
@summarizer.options[:yaml] = temp_output_file(:yaml)
|
|
121
120
|
@tracker.should_receive(:to_yaml_object).once
|
|
122
121
|
@summarizer.to_yaml
|
|
123
122
|
end
|
|
124
123
|
end
|
|
125
|
-
end
|
|
124
|
+
end
|
|
@@ -4,23 +4,23 @@ describe RequestLogAnalyzer::Tracker::Traffic do
|
|
|
4
4
|
|
|
5
5
|
describe '#report' do
|
|
6
6
|
before(:each) do
|
|
7
|
-
@tracker = RequestLogAnalyzer::Tracker::Traffic.new(:
|
|
7
|
+
@tracker = RequestLogAnalyzer::Tracker::Traffic.new(category: :category, traffic: :traffic)
|
|
8
8
|
@tracker.prepare
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
it
|
|
12
|
-
@tracker.update(request(:
|
|
11
|
+
it 'should generate a report without errors when one category is present' do
|
|
12
|
+
@tracker.update(request(category: 'a', traffic: 2))
|
|
13
13
|
@tracker.report(mock_output)
|
|
14
14
|
lambda { @tracker.report(mock_output) }.should_not raise_error
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
it
|
|
17
|
+
it 'should generate a report without errors when no category is present' do
|
|
18
18
|
lambda { @tracker.report(mock_output) }.should_not raise_error
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
it
|
|
22
|
-
@tracker.update(request(:
|
|
23
|
-
@tracker.update(request(:
|
|
21
|
+
it 'should generate a report without errors when multiple categories are present' do
|
|
22
|
+
@tracker.update(request(category: 'a', traffic: 2))
|
|
23
|
+
@tracker.update(request(category: 'b', traffic: 2))
|
|
24
24
|
lambda { @tracker.report(mock_output) }.should_not raise_error
|
|
25
25
|
end
|
|
26
26
|
|
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.13.
|
|
4
|
+
version: 1.13.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Willem van Bergen
|
|
@@ -9,113 +9,112 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-10-
|
|
12
|
+
date: 2014-10-27 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
requirements:
|
|
18
|
-
- -
|
|
18
|
+
- - ">="
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
20
|
version: '0'
|
|
21
21
|
type: :development
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
|
-
- -
|
|
25
|
+
- - ">="
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
27
|
version: '0'
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: rspec
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
|
-
- - ~>
|
|
32
|
+
- - "~>"
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: '
|
|
34
|
+
version: '3'
|
|
35
35
|
type: :development
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
|
-
- - ~>
|
|
39
|
+
- - "~>"
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '
|
|
41
|
+
version: '3'
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
43
|
name: activerecord
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
45
45
|
requirements:
|
|
46
|
-
- -
|
|
46
|
+
- - ">="
|
|
47
47
|
- !ruby/object:Gem::Version
|
|
48
48
|
version: '0'
|
|
49
49
|
type: :development
|
|
50
50
|
prerelease: false
|
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
52
|
requirements:
|
|
53
|
-
- -
|
|
53
|
+
- - ">="
|
|
54
54
|
- !ruby/object:Gem::Version
|
|
55
55
|
version: '0'
|
|
56
56
|
- !ruby/object:Gem::Dependency
|
|
57
57
|
name: sqlite3
|
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
|
59
59
|
requirements:
|
|
60
|
-
- -
|
|
60
|
+
- - ">="
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
62
|
version: '0'
|
|
63
63
|
type: :development
|
|
64
64
|
prerelease: false
|
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
66
|
requirements:
|
|
67
|
-
- -
|
|
67
|
+
- - ">="
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
69
|
version: '0'
|
|
70
70
|
- !ruby/object:Gem::Dependency
|
|
71
71
|
name: mysql2
|
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
|
73
73
|
requirements:
|
|
74
|
-
- -
|
|
74
|
+
- - ">="
|
|
75
75
|
- !ruby/object:Gem::Version
|
|
76
76
|
version: '0'
|
|
77
77
|
type: :development
|
|
78
78
|
prerelease: false
|
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements:
|
|
81
|
-
- -
|
|
81
|
+
- - ">="
|
|
82
82
|
- !ruby/object:Gem::Version
|
|
83
83
|
version: '0'
|
|
84
84
|
- !ruby/object:Gem::Dependency
|
|
85
85
|
name: pg
|
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
|
87
87
|
requirements:
|
|
88
|
-
- -
|
|
88
|
+
- - ">="
|
|
89
89
|
- !ruby/object:Gem::Version
|
|
90
90
|
version: '0'
|
|
91
91
|
type: :development
|
|
92
92
|
prerelease: false
|
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
|
94
94
|
requirements:
|
|
95
|
-
- -
|
|
95
|
+
- - ">="
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
97
|
version: '0'
|
|
98
|
-
description:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
other applications can easily be supported by supplying an \n easy to write log
|
|
107
|
-
file format definition.\n"
|
|
98
|
+
description: |2
|
|
99
|
+
Request log analyzer's purpose is to find out how your web application is being used, how it performs and to
|
|
100
|
+
focus your optimization efforts. This tool will parse all requests in the application's log file and aggregate the
|
|
101
|
+
information. Once it is finished parsing the log file(s), it will show the requests that take op most server time
|
|
102
|
+
using various metrics. It can also insert all parsed request information into a database so you can roll your own
|
|
103
|
+
analysis. It supports Rails-, Merb- and Rack-based applications logs, Apache and Amazon S3 access logs and MySQL
|
|
104
|
+
slow query logs out of the box, but file formats of other applications can easily be supported by supplying an
|
|
105
|
+
easy to write log file format definition.
|
|
108
106
|
email:
|
|
109
107
|
- willem@railsdoctors.com
|
|
110
108
|
- bart@railsdoctors.com
|
|
111
109
|
executables:
|
|
110
|
+
- console
|
|
112
111
|
- request-log-analyzer
|
|
113
112
|
extensions: []
|
|
114
113
|
extra_rdoc_files:
|
|
115
114
|
- README.rdoc
|
|
116
115
|
files:
|
|
117
|
-
- .gitignore
|
|
118
|
-
- .travis.yml
|
|
116
|
+
- ".gitignore"
|
|
117
|
+
- ".travis.yml"
|
|
119
118
|
- DESIGN.rdoc
|
|
120
119
|
- Gemfile
|
|
121
120
|
- Gemfile.activerecord3
|
|
@@ -123,6 +122,7 @@ files:
|
|
|
123
122
|
- LICENSE
|
|
124
123
|
- README.rdoc
|
|
125
124
|
- Rakefile
|
|
125
|
+
- bin/console
|
|
126
126
|
- bin/request-log-analyzer
|
|
127
127
|
- lib/cli/command_line_arguments.rb
|
|
128
128
|
- lib/cli/database_console.rb
|
|
@@ -134,6 +134,7 @@ files:
|
|
|
134
134
|
- lib/request_log_analyzer/aggregator/database_inserter.rb
|
|
135
135
|
- lib/request_log_analyzer/aggregator/echo.rb
|
|
136
136
|
- lib/request_log_analyzer/aggregator/summarizer.rb
|
|
137
|
+
- lib/request_log_analyzer/class_level_inheritable_attributes.rb
|
|
137
138
|
- lib/request_log_analyzer/controller.rb
|
|
138
139
|
- lib/request_log_analyzer/database.rb
|
|
139
140
|
- lib/request_log_analyzer/database/base.rb
|
|
@@ -241,6 +242,7 @@ files:
|
|
|
241
242
|
- spec/unit/file_format/file_format_api_spec.rb
|
|
242
243
|
- spec/unit/file_format/format_autodetection_spec.rb
|
|
243
244
|
- spec/unit/file_format/haproxy_format_spec.rb
|
|
245
|
+
- spec/unit/file_format/inheritance_spec.rb
|
|
244
246
|
- spec/unit/file_format/line_definition_spec.rb
|
|
245
247
|
- spec/unit/file_format/merb_format_spec.rb
|
|
246
248
|
- spec/unit/file_format/mysql_format_spec.rb
|
|
@@ -271,29 +273,29 @@ licenses:
|
|
|
271
273
|
metadata: {}
|
|
272
274
|
post_install_message:
|
|
273
275
|
rdoc_options:
|
|
274
|
-
- --title
|
|
276
|
+
- "--title"
|
|
275
277
|
- request-log-analyzer
|
|
276
|
-
- --main
|
|
278
|
+
- "--main"
|
|
277
279
|
- README.rdoc
|
|
278
|
-
- --line-numbers
|
|
279
|
-
- --inline-source
|
|
280
|
+
- "--line-numbers"
|
|
281
|
+
- "--inline-source"
|
|
280
282
|
require_paths:
|
|
281
283
|
- lib
|
|
282
284
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
283
285
|
requirements:
|
|
284
|
-
- -
|
|
286
|
+
- - ">="
|
|
285
287
|
- !ruby/object:Gem::Version
|
|
286
288
|
version: 1.9.3
|
|
287
289
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
288
290
|
requirements:
|
|
289
|
-
- -
|
|
291
|
+
- - ">="
|
|
290
292
|
- !ruby/object:Gem::Version
|
|
291
293
|
version: '0'
|
|
292
294
|
requirements:
|
|
293
295
|
- To use the database inserter, ActiveRecord and an appropriate database adapter are
|
|
294
296
|
required.
|
|
295
297
|
rubyforge_project: r-l-a
|
|
296
|
-
rubygems_version: 2.
|
|
298
|
+
rubygems_version: 2.2.2
|
|
297
299
|
signing_key:
|
|
298
300
|
specification_version: 4
|
|
299
301
|
summary: A command line tool to analyze request logs for Apache, Rails, Merb, MySQL
|
|
@@ -358,6 +360,7 @@ test_files:
|
|
|
358
360
|
- spec/unit/file_format/file_format_api_spec.rb
|
|
359
361
|
- spec/unit/file_format/format_autodetection_spec.rb
|
|
360
362
|
- spec/unit/file_format/haproxy_format_spec.rb
|
|
363
|
+
- spec/unit/file_format/inheritance_spec.rb
|
|
361
364
|
- spec/unit/file_format/line_definition_spec.rb
|
|
362
365
|
- spec/unit/file_format/merb_format_spec.rb
|
|
363
366
|
- spec/unit/file_format/mysql_format_spec.rb
|