request-log-analyzer 1.11.0 → 1.11.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +10 -0
- data/README.rdoc +6 -5
- data/bin/request-log-analyzer +2 -2
- data/lib/request_log_analyzer.rb +1 -1
- data/lib/request_log_analyzer/controller.rb +1 -1
- data/lib/request_log_analyzer/filter/timespan.rb +3 -3
- data/request-log-analyzer.gemspec +4 -4
- data/spec/integration/command_line_usage_spec.rb +3 -3
- data/spec/unit/database/database_spec.rb +1 -0
- data/spec/unit/file_format/postgresql_format_spec.rb +14 -14
- data/spec/unit/source/log_parser_spec.rb +98 -92
- data/tasks/github-gem.rake +6 -4
- metadata +72 -80
data/.travis.yml
ADDED
data/README.rdoc
CHANGED
@@ -28,11 +28,12 @@ For more details, other file formats, and available command line options, see th
|
|
28
28
|
|
29
29
|
$ time ./bin/request-log-analyzer 40MBRailsFile.log
|
30
30
|
|
31
|
-
ruby-1.9.2-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
ruby-1.9.2-p180 15.19s user 0.95s system 99% cpu 16.143 total
|
32
|
+
ree-1.8.7-2011.03 22.81s user 1.28s system 92% cpu 25.938 total
|
33
|
+
ruby-1.8.7-p334 25.21s user 1.02s system 99% cpu 26.238 total
|
34
|
+
jruby-1.5.3 32.64s user 4.84s system 99% cpu 37.629 total
|
35
|
+
rbx-2.0.0pre 39.62s user 2.24s system 104% cpu 40.098 total
|
36
|
+
macruby 75.00s user 20.10s system 110% cpu 1:26.13 total
|
36
37
|
|
37
38
|
== Additional information
|
38
39
|
|
data/bin/request-log-analyzer
CHANGED
@@ -21,7 +21,7 @@ begin
|
|
21
21
|
|
22
22
|
command_line.command(:strip) do |strip|
|
23
23
|
strip.minimum_parameters = 1
|
24
|
-
strip.option(:format, :alias => :f, :default => '
|
24
|
+
strip.option(:format, :alias => :f, :default => 'rails3')
|
25
25
|
strip.option(:output, :alias => :o)
|
26
26
|
strip.switch(:discard_teaser_lines, :t)
|
27
27
|
strip.switch(:keep_junk_lines, :j)
|
@@ -34,7 +34,7 @@ begin
|
|
34
34
|
command_line.option(:file, :alias => :e)
|
35
35
|
command_line.option(:mail, :alias => :m)
|
36
36
|
command_line.option(:mailhost, :default => 'localhost')
|
37
|
-
command_line.option(:mailsubject)
|
37
|
+
command_line.option(:mailsubject)
|
38
38
|
command_line.option(:parse_strategy, :default => 'assume-correct')
|
39
39
|
command_line.option(:yaml)
|
40
40
|
command_line.option(:dump) # To be deprecated
|
data/lib/request_log_analyzer.rb
CHANGED
@@ -13,7 +13,7 @@ module RequestLogAnalyzer
|
|
13
13
|
|
14
14
|
# The current version of request-log-analyzer.
|
15
15
|
# Do not change the value by hand; it will be updated automatically by the gem release script.
|
16
|
-
VERSION = "1.11.
|
16
|
+
VERSION = "1.11.1"
|
17
17
|
|
18
18
|
# Convert a string/symbol in camelcase ({RequestLogAnalyzer::Controller}) to underscores
|
19
19
|
# (<tt>request_log_analyzer/controller</tt>). This function can be used to load the file (using
|
@@ -77,7 +77,7 @@ module RequestLogAnalyzer
|
|
77
77
|
|
78
78
|
# Guess file format
|
79
79
|
if !options[:format] && options[:source_files]
|
80
|
-
options[:format] = :
|
80
|
+
options[:format] = :rails3 # Default
|
81
81
|
|
82
82
|
if options[:source_files] != $stdin
|
83
83
|
if options[:source_files].class == String
|
@@ -30,11 +30,11 @@ module RequestLogAnalyzer::Filter
|
|
30
30
|
# Returns nil otherwise
|
31
31
|
# <tt>request</tt> Request object.
|
32
32
|
def filter(request)
|
33
|
-
if @after && @before && request.timestamp <= @before && @after <= request.timestamp
|
33
|
+
if @after && @before && request.timestamp && request.timestamp <= @before && @after <= request.timestamp
|
34
34
|
return request
|
35
|
-
elsif @after && @before.nil? && @after <= request.timestamp
|
35
|
+
elsif @after && @before.nil? && request.timestamp && @after <= request.timestamp
|
36
36
|
return request
|
37
|
-
elsif @before && @after.nil? && request.timestamp <= @before
|
37
|
+
elsif @before && @after.nil? && request.timestamp && request.timestamp <= @before
|
38
38
|
return request
|
39
39
|
end
|
40
40
|
|
@@ -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.11.
|
6
|
-
s.date = "2011-
|
5
|
+
s.version = "1.11.1"
|
6
|
+
s.date = "2011-08-20"
|
7
7
|
|
8
8
|
s.rubyforge_project = 'r-l-a'
|
9
9
|
|
@@ -31,7 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.add_development_dependency('rspec', '~> 2.0')
|
32
32
|
|
33
33
|
s.add_development_dependency('activerecord')
|
34
|
-
s.add_development_dependency('sqlite3
|
34
|
+
s.add_development_dependency('sqlite3')
|
35
35
|
|
36
36
|
s.authors = ['Willem van Bergen', 'Bart ten Brinke']
|
37
37
|
s.email = ['willem@railsdoctors.com', 'bart@railsdoctors.com']
|
@@ -39,6 +39,6 @@ Gem::Specification.new do |s|
|
|
39
39
|
|
40
40
|
# The files and test_files directives are set automatically by the release script.
|
41
41
|
# Do not change them by hand, but make sure to add the files to the git repository.
|
42
|
-
s.files = %w(.gitignore .infinity_test DESIGN.rdoc Gemfile LICENSE README.rdoc Rakefile bin/request-log-analyzer lib/cli/command_line_arguments.rb lib/cli/database_console.rb lib/cli/database_console_init.rb lib/cli/progressbar.rb lib/cli/tools.rb lib/request_log_analyzer.rb lib/request_log_analyzer/aggregator.rb lib/request_log_analyzer/aggregator/database_inserter.rb lib/request_log_analyzer/aggregator/echo.rb lib/request_log_analyzer/aggregator/summarizer.rb lib/request_log_analyzer/controller.rb lib/request_log_analyzer/database.rb lib/request_log_analyzer/database/base.rb lib/request_log_analyzer/database/connection.rb lib/request_log_analyzer/database/request.rb lib/request_log_analyzer/database/source.rb lib/request_log_analyzer/database/warning.rb lib/request_log_analyzer/file_format.rb lib/request_log_analyzer/file_format/amazon_s3.rb lib/request_log_analyzer/file_format/apache.rb lib/request_log_analyzer/file_format/delayed_job.rb lib/request_log_analyzer/file_format/delayed_job2.rb lib/request_log_analyzer/file_format/delayed_job21.rb lib/request_log_analyzer/file_format/haproxy.rb lib/request_log_analyzer/file_format/merb.rb lib/request_log_analyzer/file_format/mysql.rb lib/request_log_analyzer/file_format/oink.rb lib/request_log_analyzer/file_format/postgresql.rb lib/request_log_analyzer/file_format/rack.rb lib/request_log_analyzer/file_format/rails.rb lib/request_log_analyzer/file_format/rails3.rb lib/request_log_analyzer/file_format/rails_development.rb lib/request_log_analyzer/file_format/w3c.rb lib/request_log_analyzer/filter.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/filter/timespan.rb lib/request_log_analyzer/line_definition.rb lib/request_log_analyzer/log_processor.rb lib/request_log_analyzer/mailer.rb lib/request_log_analyzer/output.rb lib/request_log_analyzer/output/fixed_width.rb lib/request_log_analyzer/output/html.rb lib/request_log_analyzer/request.rb lib/request_log_analyzer/source.rb lib/request_log_analyzer/source/log_parser.rb lib/request_log_analyzer/tracker.rb lib/request_log_analyzer/tracker/duration.rb lib/request_log_analyzer/tracker/frequency.rb lib/request_log_analyzer/tracker/hourly_spread.rb lib/request_log_analyzer/tracker/numeric_value.rb lib/request_log_analyzer/tracker/timespan.rb lib/request_log_analyzer/tracker/traffic.rb request-log-analyzer.gemspec spec/database.yml spec/fixtures/apache_combined.log spec/fixtures/apache_common.log spec/fixtures/decompression.log spec/fixtures/decompression.log.bz2 spec/fixtures/decompression.log.gz spec/fixtures/decompression.log.zip spec/fixtures/decompression.tar.gz spec/fixtures/decompression.tgz spec/fixtures/header_and_footer.log spec/fixtures/merb.log spec/fixtures/merb_prefixed.log spec/fixtures/multiple_files_1.log spec/fixtures/multiple_files_2.log spec/fixtures/mysql_slow_query.log spec/fixtures/oink_22.log spec/fixtures/oink_22_failure.log spec/fixtures/postgresql.log spec/fixtures/rails.db spec/fixtures/rails_1x.log spec/fixtures/rails_22.log spec/fixtures/rails_22_cached.log spec/fixtures/rails_unordered.log spec/fixtures/sinatra.log spec/fixtures/syslog_1x.log spec/fixtures/test_file_format.log spec/fixtures/test_language_combined.log spec/fixtures/test_order.log spec/integration/command_line_usage_spec.rb spec/integration/mailer_spec.rb spec/integration/munin_plugins_rails_spec.rb spec/integration/scout_spec.rb spec/lib/helpers.rb spec/lib/macros.rb spec/lib/matchers.rb spec/lib/mocks.rb spec/lib/testing_format.rb spec/spec_helper.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/controller/controller_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/database/base_class_spec.rb spec/unit/database/connection_spec.rb spec/unit/database/database_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/unit/file_format/apache_format_spec.rb spec/unit/file_format/common_regular_expressions_spec.rb spec/unit/file_format/delayed_job21_format_spec.rb spec/unit/file_format/delayed_job2_format_spec.rb spec/unit/file_format/delayed_job_format_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/unit/file_format/haproxy_format_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/mysql_format_spec.rb spec/unit/file_format/oink_format_spec.rb spec/unit/file_format/postgresql_format_spec.rb spec/unit/file_format/rack_format_spec.rb spec/unit/file_format/rails3_format_spec.rb spec/unit/file_format/rails_format_spec.rb spec/unit/file_format/w3c_format_spec.rb spec/unit/filter/anonymize_filter_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/filter/filter_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/mailer_spec.rb spec/unit/request_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/unit/tracker/numeric_value_tracker_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/tracker/traffic_tracker_spec.rb tasks/github-gem.rake tasks/request_log_analyzer.rake)
|
42
|
+
s.files = %w(.gitignore .infinity_test .travis.yml DESIGN.rdoc Gemfile LICENSE README.rdoc Rakefile bin/request-log-analyzer lib/cli/command_line_arguments.rb lib/cli/database_console.rb lib/cli/database_console_init.rb lib/cli/progressbar.rb lib/cli/tools.rb lib/request_log_analyzer.rb lib/request_log_analyzer/aggregator.rb lib/request_log_analyzer/aggregator/database_inserter.rb lib/request_log_analyzer/aggregator/echo.rb lib/request_log_analyzer/aggregator/summarizer.rb lib/request_log_analyzer/controller.rb lib/request_log_analyzer/database.rb lib/request_log_analyzer/database/base.rb lib/request_log_analyzer/database/connection.rb lib/request_log_analyzer/database/request.rb lib/request_log_analyzer/database/source.rb lib/request_log_analyzer/database/warning.rb lib/request_log_analyzer/file_format.rb lib/request_log_analyzer/file_format/amazon_s3.rb lib/request_log_analyzer/file_format/apache.rb lib/request_log_analyzer/file_format/delayed_job.rb lib/request_log_analyzer/file_format/delayed_job2.rb lib/request_log_analyzer/file_format/delayed_job21.rb lib/request_log_analyzer/file_format/haproxy.rb lib/request_log_analyzer/file_format/merb.rb lib/request_log_analyzer/file_format/mysql.rb lib/request_log_analyzer/file_format/oink.rb lib/request_log_analyzer/file_format/postgresql.rb lib/request_log_analyzer/file_format/rack.rb lib/request_log_analyzer/file_format/rails.rb lib/request_log_analyzer/file_format/rails3.rb lib/request_log_analyzer/file_format/rails_development.rb lib/request_log_analyzer/file_format/w3c.rb lib/request_log_analyzer/filter.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/filter/timespan.rb lib/request_log_analyzer/line_definition.rb lib/request_log_analyzer/log_processor.rb lib/request_log_analyzer/mailer.rb lib/request_log_analyzer/output.rb lib/request_log_analyzer/output/fixed_width.rb lib/request_log_analyzer/output/html.rb lib/request_log_analyzer/request.rb lib/request_log_analyzer/source.rb lib/request_log_analyzer/source/log_parser.rb lib/request_log_analyzer/tracker.rb lib/request_log_analyzer/tracker/duration.rb lib/request_log_analyzer/tracker/frequency.rb lib/request_log_analyzer/tracker/hourly_spread.rb lib/request_log_analyzer/tracker/numeric_value.rb lib/request_log_analyzer/tracker/timespan.rb lib/request_log_analyzer/tracker/traffic.rb request-log-analyzer.gemspec spec/database.yml spec/fixtures/apache_combined.log spec/fixtures/apache_common.log spec/fixtures/decompression.log spec/fixtures/decompression.log.bz2 spec/fixtures/decompression.log.gz spec/fixtures/decompression.log.zip spec/fixtures/decompression.tar.gz spec/fixtures/decompression.tgz spec/fixtures/header_and_footer.log spec/fixtures/merb.log spec/fixtures/merb_prefixed.log spec/fixtures/multiple_files_1.log spec/fixtures/multiple_files_2.log spec/fixtures/mysql_slow_query.log spec/fixtures/oink_22.log spec/fixtures/oink_22_failure.log spec/fixtures/postgresql.log spec/fixtures/rails.db spec/fixtures/rails_1x.log spec/fixtures/rails_22.log spec/fixtures/rails_22_cached.log spec/fixtures/rails_unordered.log spec/fixtures/sinatra.log spec/fixtures/syslog_1x.log spec/fixtures/test_file_format.log spec/fixtures/test_language_combined.log spec/fixtures/test_order.log spec/integration/command_line_usage_spec.rb spec/integration/mailer_spec.rb spec/integration/munin_plugins_rails_spec.rb spec/integration/scout_spec.rb spec/lib/helpers.rb spec/lib/macros.rb spec/lib/matchers.rb spec/lib/mocks.rb spec/lib/testing_format.rb spec/spec_helper.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/controller/controller_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/database/base_class_spec.rb spec/unit/database/connection_spec.rb spec/unit/database/database_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/unit/file_format/apache_format_spec.rb spec/unit/file_format/common_regular_expressions_spec.rb spec/unit/file_format/delayed_job21_format_spec.rb spec/unit/file_format/delayed_job2_format_spec.rb spec/unit/file_format/delayed_job_format_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/unit/file_format/haproxy_format_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/mysql_format_spec.rb spec/unit/file_format/oink_format_spec.rb spec/unit/file_format/postgresql_format_spec.rb spec/unit/file_format/rack_format_spec.rb spec/unit/file_format/rails3_format_spec.rb spec/unit/file_format/rails_format_spec.rb spec/unit/file_format/w3c_format_spec.rb spec/unit/filter/anonymize_filter_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/filter/filter_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/mailer_spec.rb spec/unit/request_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/unit/tracker/numeric_value_tracker_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/tracker/traffic_tracker_spec.rb tasks/github-gem.rake tasks/request_log_analyzer.rake)
|
43
43
|
s.test_files = %w(spec/integration/command_line_usage_spec.rb spec/integration/mailer_spec.rb spec/integration/munin_plugins_rails_spec.rb spec/integration/scout_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/controller/controller_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/database/base_class_spec.rb spec/unit/database/connection_spec.rb spec/unit/database/database_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/unit/file_format/apache_format_spec.rb spec/unit/file_format/common_regular_expressions_spec.rb spec/unit/file_format/delayed_job21_format_spec.rb spec/unit/file_format/delayed_job2_format_spec.rb spec/unit/file_format/delayed_job_format_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/unit/file_format/haproxy_format_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/mysql_format_spec.rb spec/unit/file_format/oink_format_spec.rb spec/unit/file_format/postgresql_format_spec.rb spec/unit/file_format/rack_format_spec.rb spec/unit/file_format/rails3_format_spec.rb spec/unit/file_format/rails_format_spec.rb spec/unit/file_format/w3c_format_spec.rb spec/unit/filter/anonymize_filter_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/filter/filter_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/mailer_spec.rb spec/unit/request_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/unit/tracker/numeric_value_tracker_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/tracker/traffic_tracker_spec.rb)
|
44
44
|
end
|
@@ -14,7 +14,7 @@ describe RequestLogAnalyzer, 'running from command line' do
|
|
14
14
|
output = run("#{log_fixture(:rails_1x)}")
|
15
15
|
output.any? { |line| /^Parsed requests\:\s*4\s/ =~ line }.should be_true
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
it "should find 2 requests when parsing a compressed file" do
|
19
19
|
output = run("#{log_fixture(:decompression, :tgz)}")
|
20
20
|
output.any? { |line| /^Parsed requests\:\s*2\s/ =~ line }.should be_true
|
@@ -58,7 +58,7 @@ describe RequestLogAnalyzer, 'running from command line' do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should use no colors in the report with the --boring option" do
|
61
|
-
output = run("#{log_fixture(:rails_1x)} --boring")
|
61
|
+
output = run("#{log_fixture(:rails_1x)} --boring --format rails")
|
62
62
|
output.any? { |line| /\e/ =~ line }.should be_false
|
63
63
|
end
|
64
64
|
|
@@ -84,7 +84,7 @@ describe RequestLogAnalyzer, 'running from command line' do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "should parse 4 requests from the standard input" do
|
87
|
-
output = run("- < #{log_fixture(:rails_1x)}")
|
87
|
+
output = run("--format rails - < #{log_fixture(:rails_1x)}")
|
88
88
|
output.any? { |line| /^Parsed requests\:\s*4\s/ =~ line }.should be_true
|
89
89
|
end
|
90
90
|
end
|
@@ -24,18 +24,18 @@ describe RequestLogAnalyzer::FileFormat::Postgresql do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
describe '#parse_io' do
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
27
|
+
# describe '#parse_io' do
|
28
|
+
# it "should parse a multiline query entry correctly" do
|
29
|
+
# fixture = <<-EOS
|
30
|
+
# 2010-10-10 15:00:02 GMT [38747]: [1669-1] LOG: 00000: duration: 0.195 ms statement: INSERT INTO "delayed_jobs" ("failed_at", "locked_by", "created_at", "handler", "updated_at", "priority", "run_at", "attempts", "locked_at", "last_error") VALUES(NULL, NULL, '2010-10-10 15:00:02.159884', E'--- !ruby/object:RuntheChooChootrain {}
|
31
|
+
# ', '2010-10-10 15:00:02.159884', 0, '2010-10-10 16:00:00.000000', 0, NULL, NULL) RETURNING "id"
|
32
|
+
# 2010-10-10 15:00:02 GMT [38747]: [1670-1] LOCATION: exec_simple_query, postgres.c:1081
|
33
|
+
# EOS
|
34
|
+
#
|
35
|
+
# log_parser.should_not_receive(:warn)
|
36
|
+
# log_parser.parse_string(fixture) do |request|
|
37
|
+
# request[:query].should == 'INSERT INTO delayed_jobs (failed_at, locked_by, created_at, handler, updated_at, priority, run_at, attempts, locked_at, last_error) VALUES(NULL, NULL, :string, E:string, :string, :int, :string, :int, NULL, NULL) RETURNING id'
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
# end
|
41
41
|
end
|
@@ -1,119 +1,125 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe RequestLogAnalyzer::Source::LogParser
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should have multiple line definitions" do
|
10
|
-
@log_parser.file_format.line_definitions.length.should >= 2
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should have a valid language" do
|
14
|
-
@log_parser.file_format.should be_well_formed
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should set the :source for every parsed line" do
|
18
|
-
@log_parser.parse_file(log_fixture(:rails_22)) do |request|
|
19
|
-
request.lines.all? { |line| line[:source] == log_fixture(:rails_22) }.should be_true
|
3
|
+
describe RequestLogAnalyzer::Source::LogParser do
|
4
|
+
describe 'parsing request' do
|
5
|
+
before(:each) do
|
6
|
+
@log_parser = RequestLogAnalyzer::Source::LogParser.new(testing_format)
|
20
7
|
end
|
21
|
-
end
|
22
8
|
|
23
|
-
|
24
|
-
|
25
|
-
request.lines.all? { |line| line.has_key?(:lineno) }.should be_true
|
9
|
+
it "should have multiple line definitions" do
|
10
|
+
@log_parser.file_format.line_definitions.length.should >= 2
|
26
11
|
end
|
27
|
-
end
|
28
12
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
@log_parser.parsed_lines.should > 2
|
33
|
-
end
|
13
|
+
it "should have a valid language" do
|
14
|
+
@log_parser.file_format.should be_well_formed
|
15
|
+
end
|
34
16
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
17
|
+
it "should set the :source for every parsed line" do
|
18
|
+
@log_parser.parse_file(log_fixture(:rails_22)) do |request|
|
19
|
+
request.lines.all? { |line| line[:source] == log_fixture(:rails_22) }.should be_true
|
20
|
+
end
|
21
|
+
end
|
39
22
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
request[:test_capture].should == "Testing is amazing" # Note the custom converter
|
23
|
+
it "should set the :lineno for every parsed line" do
|
24
|
+
@log_parser.parse_file(log_fixture(:rails_22)) do |request|
|
25
|
+
request.lines.all? { |line| line.has_key?(:lineno) }.should be_true
|
26
|
+
end
|
45
27
|
end
|
46
|
-
end
|
47
28
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
request.should =~ :test
|
53
|
-
request[:test_capture].should_not be_nil
|
29
|
+
it "should parse more lines than requests" do
|
30
|
+
@log_parser.should_receive(:handle_request).with(an_instance_of(TestingFormat::Request)).twice
|
31
|
+
@log_parser.parse_file(log_fixture(:test_language_combined))
|
32
|
+
@log_parser.parsed_lines.should > 2
|
54
33
|
end
|
55
|
-
io.close
|
56
|
-
end
|
57
34
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
end
|
35
|
+
it "should parse requests spanned over multiple files" do
|
36
|
+
@log_parser.should_receive(:handle_request).with(an_instance_of(TestingFormat::Request)).once
|
37
|
+
@log_parser.parse_files([log_fixture(:multiple_files_1), log_fixture(:multiple_files_2)])
|
38
|
+
end
|
63
39
|
|
64
|
-
|
40
|
+
it "should parse all request values when spanned over multiple files" do
|
41
|
+
@log_parser.parse_files([log_fixture(:multiple_files_1), log_fixture(:multiple_files_2)]) do |request|
|
42
|
+
request.lines.should have(4).items
|
43
|
+
request[:request_no].should == 1
|
44
|
+
request[:test_capture].should == "Testing is amazing" # Note the custom converter
|
45
|
+
end
|
46
|
+
end
|
65
47
|
|
66
|
-
|
67
|
-
|
68
|
-
|
48
|
+
it "should parse a stream and find valid requests" do
|
49
|
+
io = File.new(log_fixture(:test_file_format), 'rb')
|
50
|
+
@log_parser.parse_io(io) do |request|
|
51
|
+
request.should be_kind_of(RequestLogAnalyzer::Request)
|
52
|
+
request.should =~ :test
|
53
|
+
request[:test_capture].should_not be_nil
|
54
|
+
end
|
55
|
+
io.close
|
56
|
+
end
|
69
57
|
|
70
|
-
|
71
|
-
|
72
|
-
|
58
|
+
it "should parse a request that only consists of one line" do
|
59
|
+
@log_parser.parse_file(log_fixture(:header_and_footer))
|
60
|
+
@log_parser.parsed_requests.should == 2
|
61
|
+
end
|
73
62
|
end
|
74
63
|
|
75
|
-
|
76
|
-
@log_parser.should_receive(:warn).with(:unclosed_request, anything).at_least(1).times
|
77
|
-
@log_parser.should_receive(:warn).with(:no_current_request, anything).at_least(1).times
|
78
|
-
@log_parser.should_not_receive(:handle_request)
|
79
|
-
@log_parser.parse_file(log_fixture(:test_order))
|
80
|
-
end
|
81
|
-
end
|
64
|
+
describe 'parse warnings' do
|
82
65
|
|
83
|
-
|
66
|
+
before(:each) do
|
67
|
+
@log_parser = RequestLogAnalyzer::Source::LogParser.new(testing_format, :parse_strategy => 'cautious')
|
68
|
+
end
|
84
69
|
|
85
|
-
|
86
|
-
|
87
|
-
|
70
|
+
it "should warn about teaser matching problems" do
|
71
|
+
@log_parser.should_receive(:warn).with(:teaser_check_failed, anything).exactly(5).times
|
72
|
+
@log_parser.parse_file(log_fixture(:test_file_format))
|
73
|
+
end
|
88
74
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
75
|
+
it "should warn about unmatching request headers and footers" do
|
76
|
+
@log_parser.should_receive(:warn).with(:unclosed_request, anything).at_least(1).times
|
77
|
+
@log_parser.should_receive(:warn).with(:no_current_request, anything).at_least(1).times
|
78
|
+
@log_parser.should_not_receive(:handle_request)
|
79
|
+
@log_parser.parse_file(log_fixture(:test_order))
|
80
|
+
end
|
93
81
|
end
|
94
82
|
|
95
|
-
|
96
|
-
@log_parser.should_receive(:handle_request).twice
|
97
|
-
@log_parser.parse_file(log_fixture(:decompression, "tar.gz"))
|
98
|
-
@log_parser.parsed_lines.should > 1
|
99
|
-
end
|
83
|
+
describe 'log file decompression' do
|
100
84
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
@log_parser.parsed_lines.should > 1
|
105
|
-
end
|
85
|
+
before(:each) do
|
86
|
+
@log_parser = RequestLogAnalyzer::Source::LogParser.new(RequestLogAnalyzer::FileFormat::Rails.create)
|
87
|
+
end
|
106
88
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
89
|
+
if `which gunzip` != ""
|
90
|
+
it "should parse a rails gzipped log file" do
|
91
|
+
@log_parser.should_receive(:handle_request).once
|
92
|
+
@log_parser.parse_file(log_fixture(:decompression, "log.gz"))
|
93
|
+
@log_parser.parsed_lines.should > 0
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should parse a rails tar gzipped log folder" do
|
97
|
+
@log_parser.should_receive(:handle_request).twice
|
98
|
+
@log_parser.parse_file(log_fixture(:decompression, "tar.gz"))
|
99
|
+
@log_parser.parsed_lines.should > 1
|
100
|
+
end
|
101
|
+
end
|
112
102
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
103
|
+
if `which bunzip2` != ""
|
104
|
+
it "should parse a rails tar gzipped log folder" do
|
105
|
+
@log_parser.should_receive(:handle_request).twice
|
106
|
+
@log_parser.parse_file(log_fixture(:decompression, "tgz"))
|
107
|
+
@log_parser.parsed_lines.should > 1
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should parse a rails bz2 zipped log file" do
|
111
|
+
@log_parser.should_receive(:handle_request).once
|
112
|
+
@log_parser.parse_file(log_fixture(:decompression, "log.bz2"))
|
113
|
+
@log_parser.parsed_lines.should > 0
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
if `which unzip` != ""
|
118
|
+
it "should parse a rails zipped log file" do
|
119
|
+
@log_parser.should_receive(:handle_request).once
|
120
|
+
@log_parser.parse_file(log_fixture(:decompression, "log.zip"))
|
121
|
+
@log_parser.parsed_lines.should > 0
|
122
|
+
end
|
123
|
+
end
|
117
124
|
end
|
118
|
-
|
119
125
|
end
|
data/tasks/github-gem.rake
CHANGED
@@ -13,8 +13,8 @@ module GithubGem
|
|
13
13
|
|
14
14
|
# Detects the main include file of this project using heuristics
|
15
15
|
def self.detect_main_include
|
16
|
-
if
|
17
|
-
"lib/#{
|
16
|
+
if File.exist?(File.expand_path("../lib/#{File.basename(detect_gemspec_file, '.gemspec').gsub(/-/, '/')}.rb", detect_gemspec_file))
|
17
|
+
"lib/#{File.basename(detect_gemspec_file, '.gemspec').gsub(/-/, '/')}.rb"
|
18
18
|
elsif FileList['lib/*.rb'].length == 1
|
19
19
|
FileList['lib/*.rb'].first
|
20
20
|
else
|
@@ -24,6 +24,8 @@ module GithubGem
|
|
24
24
|
|
25
25
|
class RakeTasks
|
26
26
|
|
27
|
+
include Rake::DSL if Rake.const_defined?('DSL')
|
28
|
+
|
27
29
|
attr_reader :gemspec, :modified_files
|
28
30
|
attr_accessor :gemspec_file, :task_namespace, :main_include, :root_dir, :spec_pattern, :test_pattern, :remote, :remote_branch, :local_branch
|
29
31
|
|
@@ -342,7 +344,7 @@ module GithubGem
|
|
342
344
|
require 'net/https'
|
343
345
|
require 'uri'
|
344
346
|
|
345
|
-
uri = URI.parse('https://github.com/wvanbergen/github-gem/
|
347
|
+
uri = URI.parse('https://raw.github.com/wvanbergen/github-gem/master/tasks/github-gem.rake')
|
346
348
|
http = Net::HTTP.new(uri.host, uri.port)
|
347
349
|
http.use_ssl = true
|
348
350
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
@@ -362,4 +364,4 @@ module GithubGem
|
|
362
364
|
end
|
363
365
|
end
|
364
366
|
end
|
365
|
-
end
|
367
|
+
end
|
metadata
CHANGED
@@ -1,89 +1,84 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: request-log-analyzer
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 11
|
8
|
-
- 0
|
9
|
-
version: 1.11.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.11.1
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Willem van Bergen
|
13
9
|
- Bart ten Brinke
|
14
10
|
autorequire:
|
15
11
|
bindir: bin
|
16
12
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2011-04-27 00:00:00 -04:00
|
13
|
+
date: 2011-08-20 00:00:00.000000000 -04:00
|
19
14
|
default_executable: request-log-analyzer
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
22
17
|
name: rake
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
requirement: &2153310460 !ruby/object:Gem::Requirement
|
25
19
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
- 0
|
31
|
-
version: "0"
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '0'
|
32
24
|
type: :development
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: rspec
|
36
25
|
prerelease: false
|
37
|
-
|
26
|
+
version_requirements: *2153310460
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: &2153309700 !ruby/object:Gem::Requirement
|
38
30
|
none: false
|
39
|
-
requirements:
|
31
|
+
requirements:
|
40
32
|
- - ~>
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
- 2
|
44
|
-
- 0
|
45
|
-
version: "2.0"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '2.0'
|
46
35
|
type: :development
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: activerecord
|
50
36
|
prerelease: false
|
51
|
-
|
37
|
+
version_requirements: *2153309700
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: activerecord
|
40
|
+
requirement: &2153309000 !ruby/object:Gem::Requirement
|
52
41
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
- 0
|
58
|
-
version: "0"
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
59
46
|
type: :development
|
60
|
-
version_requirements: *id003
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: sqlite3-ruby
|
63
47
|
prerelease: false
|
64
|
-
|
48
|
+
version_requirements: *2153309000
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: sqlite3
|
51
|
+
requirement: &2153308320 !ruby/object:Gem::Requirement
|
65
52
|
none: false
|
66
|
-
requirements:
|
67
|
-
- -
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
|
70
|
-
- 0
|
71
|
-
version: "0"
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
72
57
|
type: :development
|
73
|
-
|
74
|
-
|
75
|
-
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: *2153308320
|
60
|
+
description: ! " Request log analyzer's purpose is to find out how your web application
|
61
|
+
is being used, how it performs and to\n focus your optimization efforts. This
|
62
|
+
tool will parse all requests in the application's log file and aggregate the \n
|
63
|
+
\ information. Once it is finished parsing the log file(s), it will show the requests
|
64
|
+
that take op most server time \n using various metrics. It can also insert all
|
65
|
+
parsed request information into a database so you can roll your own\n analysis.
|
66
|
+
It supports Rails-, Merb- and Rack-based applications logs, Apache and Amazon S3
|
67
|
+
access logs and MySQL \n slow query logs out of the box, but file formats of
|
68
|
+
other applications can easily be supported by supplying an \n easy to write log
|
69
|
+
file format definition.\n"
|
70
|
+
email:
|
76
71
|
- willem@railsdoctors.com
|
77
72
|
- bart@railsdoctors.com
|
78
|
-
executables:
|
73
|
+
executables:
|
79
74
|
- request-log-analyzer
|
80
75
|
extensions: []
|
81
|
-
|
82
|
-
extra_rdoc_files:
|
76
|
+
extra_rdoc_files:
|
83
77
|
- README.rdoc
|
84
|
-
files:
|
78
|
+
files:
|
85
79
|
- .gitignore
|
86
80
|
- .infinity_test
|
81
|
+
- .travis.yml
|
87
82
|
- DESIGN.rdoc
|
88
83
|
- Gemfile
|
89
84
|
- LICENSE
|
@@ -226,41 +221,38 @@ files:
|
|
226
221
|
has_rdoc: true
|
227
222
|
homepage: http://railsdoctors.com
|
228
223
|
licenses: []
|
229
|
-
|
230
224
|
post_install_message:
|
231
|
-
rdoc_options:
|
225
|
+
rdoc_options:
|
232
226
|
- --title
|
233
227
|
- request-log-analyzer
|
234
228
|
- --main
|
235
229
|
- README.rdoc
|
236
230
|
- --line-numbers
|
237
231
|
- --inline-source
|
238
|
-
require_paths:
|
232
|
+
require_paths:
|
239
233
|
- lib
|
240
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
234
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
241
235
|
none: false
|
242
|
-
requirements:
|
243
|
-
- -
|
244
|
-
- !ruby/object:Gem::Version
|
245
|
-
|
246
|
-
|
247
|
-
version: "0"
|
248
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
|
+
requirements:
|
237
|
+
- - ! '>='
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '0'
|
240
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
249
241
|
none: false
|
250
|
-
requirements:
|
251
|
-
- -
|
252
|
-
- !ruby/object:Gem::Version
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
- To use the database inserter, ActiveRecord and an appropriate database adapter are required.
|
242
|
+
requirements:
|
243
|
+
- - ! '>='
|
244
|
+
- !ruby/object:Gem::Version
|
245
|
+
version: '0'
|
246
|
+
requirements:
|
247
|
+
- To use the database inserter, ActiveRecord and an appropriate database adapter are
|
248
|
+
required.
|
258
249
|
rubyforge_project: r-l-a
|
259
|
-
rubygems_version: 1.
|
250
|
+
rubygems_version: 1.6.2
|
260
251
|
signing_key:
|
261
252
|
specification_version: 3
|
262
|
-
summary: A command line tool to analyze request logs for Apache, Rails, Merb, MySQL
|
263
|
-
|
253
|
+
summary: A command line tool to analyze request logs for Apache, Rails, Merb, MySQL
|
254
|
+
and other web application servers
|
255
|
+
test_files:
|
264
256
|
- spec/integration/command_line_usage_spec.rb
|
265
257
|
- spec/integration/mailer_spec.rb
|
266
258
|
- spec/integration/munin_plugins_rails_spec.rb
|