request-log-analyzer 1.12.5 → 1.12.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/bin/request-log-analyzer +2 -1
- data/lib/{ordered_hash.rb → other/ordered_hash.rb} +0 -0
- data/lib/request_log_analyzer.rb +2 -2
- data/lib/request_log_analyzer/file_format.rb +1 -0
- data/lib/request_log_analyzer/file_format/apache.rb +1 -0
- data/lib/request_log_analyzer/file_format/nginx.rb +9 -0
- data/lib/request_log_analyzer/file_format/rails3.rb +12 -3
- data/lib/request_log_analyzer/line_definition.rb +2 -1
- data/lib/request_log_analyzer/request.rb +14 -1
- data/lib/request_log_analyzer/source/log_parser.rb +5 -0
- data/lib/request_log_analyzer/tracker/numeric_value.rb +3 -2
- data/request-log-analyzer.gemspec +3 -3
- data/spec/fixtures/rails_3_partials.log +13 -0
- data/spec/fixtures/s3_logs/2012-10-05-16-18-11-F9AAC5D1A55AEBAD +5 -0
- data/spec/fixtures/s3_logs/2012-10-05-16-26-06-15314AF7F0651839 +3 -0
- data/spec/integration/command_line_usage_spec.rb +5 -1
- data/spec/lib/helpers.rb +8 -3
- data/spec/unit/file_format/rails3_format_spec.rb +22 -5
- data/spec/unit/tracker/duration_tracker_spec.rb +7 -0
- metadata +102 -83
data/bin/request-log-analyzer
CHANGED
@@ -76,7 +76,8 @@ rescue CommandLine::Error => e
|
|
76
76
|
puts "Input options:"
|
77
77
|
puts " --after <date> Only consider requests from <date> or later."
|
78
78
|
puts " --before <date> Only consider requests before <date>."
|
79
|
-
puts " --format <format>, -f: Log file format
|
79
|
+
puts " --format <format>, -f: Log file format: amazon_s3, apache, delayed_job, haproxy, merb, mysql,"
|
80
|
+
puts " postgresql, rack, rails, rails3, w3c."
|
80
81
|
puts " --reject <field> <value> Only consider requests where <field> does not match <value>."
|
81
82
|
puts " --select <field> <value> Only consider requests where <field> matches <value>."
|
82
83
|
puts
|
File without changes
|
data/lib/request_log_analyzer.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'date'
|
2
|
-
require 'ordered_hash'
|
2
|
+
require 'other/ordered_hash'
|
3
3
|
|
4
4
|
# RequestLogAnalyzer is the base namespace in which all functionality of RequestLogAnalyzer is implemented.
|
5
5
|
# This module itselfs contains some functions to help with class and source file loading. The actual
|
@@ -11,7 +11,7 @@ module RequestLogAnalyzer
|
|
11
11
|
|
12
12
|
# The current version of request-log-analyzer.
|
13
13
|
# Do not change the value by hand; it will be updated automatically by the gem release script.
|
14
|
-
VERSION = "1.12.
|
14
|
+
VERSION = "1.12.6"
|
15
15
|
|
16
16
|
# Convert a string/symbol in camelcase ({RequestLogAnalyzer::Controller}) to underscores
|
17
17
|
# (<tt>request_log_analyzer/controller</tt>). This function can be used to load the file (using
|
@@ -7,6 +7,7 @@ module RequestLogAnalyzer::FileFormat
|
|
7
7
|
autoload :Rack, 'request_log_analyzer/file_format/rack'
|
8
8
|
autoload :Merb, 'request_log_analyzer/file_format/merb'
|
9
9
|
autoload :Mysql, 'request_log_analyzer/file_format/mysql'
|
10
|
+
autoload :Nginx, 'request_log_analyzer/file_format/nginx'
|
10
11
|
autoload :Postgresql, 'request_log_analyzer/file_format/postgresql'
|
11
12
|
autoload :DelayedJob, 'request_log_analyzer/file_format/delayed_job'
|
12
13
|
autoload :DelayedJob2, 'request_log_analyzer/file_format/delayed_job2'
|
@@ -20,6 +20,7 @@ module RequestLogAnalyzer::FileFormat
|
|
20
20
|
LOG_FORMAT_DEFAULTS = {
|
21
21
|
:common => '%h %l %u %t "%r" %>s %b',
|
22
22
|
:combined => '%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i"',
|
23
|
+
:nginx => '%a %t %h %u "%r" %>s %b',
|
23
24
|
:rack => '%h %l %u %t "%r" %>s %b %T',
|
24
25
|
:referer => '%{Referer}i -> %U',
|
25
26
|
:agent => '%{User-agent}i'
|
@@ -61,13 +61,21 @@ module RequestLogAnalyzer::FileFormat
|
|
61
61
|
line.capture(:line).as(:integer)
|
62
62
|
line.capture(:file)
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
|
+
# Rendered queries/index.html.erb (0.6ms)
|
66
|
+
line_definition :rendered do |line|
|
67
|
+
line.compound = [:partial_duration]
|
68
|
+
line.teaser = / Rendered /
|
69
|
+
line.regexp = / Rendered ([a-zA-Z0-9_\-\/.]+(?:\/[a-zA-Z0-9_\-.]+)+)(?:\ within\ .*?)? \((\d+(?:\.\d+)?)ms\)/
|
70
|
+
line.capture(:rendered_file)
|
71
|
+
line.capture(:partial_duration).as(:duration, :unit => :msec)
|
72
|
+
end
|
73
|
+
|
65
74
|
# # Not parsed at the moment:
|
66
75
|
# SQL (0.2ms) SET SQL_AUTO_IS_NULL=0
|
67
76
|
# Query Load (0.4ms) SELECT `queries`.* FROM `queries`
|
68
77
|
# Rendered collection (0.0ms)
|
69
|
-
|
70
|
-
|
78
|
+
|
71
79
|
REQUEST_CATEGORIZER = lambda { |request| "#{request[:controller]}##{request[:action]}.#{request[:format]}" }
|
72
80
|
|
73
81
|
report do |analyze|
|
@@ -80,6 +88,7 @@ module RequestLogAnalyzer::FileFormat
|
|
80
88
|
analyze.frequency :status, :title => 'HTTP statuses returned'
|
81
89
|
|
82
90
|
analyze.duration :duration, :category => REQUEST_CATEGORIZER, :title => "Request duration", :line_type => :completed
|
91
|
+
analyze.duration :partial_duration, :category => :rendered_file, :title => 'Partials rendering time', :line_type => :rendered
|
83
92
|
analyze.duration :view, :category => REQUEST_CATEGORIZER, :title => "View rendering time", :line_type => :completed
|
84
93
|
analyze.duration :db, :category => REQUEST_CATEGORIZER, :title => "Database time", :line_type => :completed
|
85
94
|
|
@@ -44,7 +44,7 @@ module RequestLogAnalyzer
|
|
44
44
|
end
|
45
45
|
|
46
46
|
attr_reader :name
|
47
|
-
attr_accessor :teaser, :regexp, :captures
|
47
|
+
attr_accessor :teaser, :regexp, :captures, :compound
|
48
48
|
attr_accessor :header, :footer
|
49
49
|
|
50
50
|
alias_method :header?, :header
|
@@ -56,6 +56,7 @@ module RequestLogAnalyzer
|
|
56
56
|
@name = name
|
57
57
|
@captures = []
|
58
58
|
@teaser = nil
|
59
|
+
@compound = []
|
59
60
|
definition.each { |key, value| self.send("#{key.to_s}=".to_sym, value) }
|
60
61
|
end
|
61
62
|
|
@@ -116,6 +116,7 @@ module RequestLogAnalyzer
|
|
116
116
|
value_hash[:line_type] = parsed_line[:line_definition].name
|
117
117
|
value_hash[:lineno] = parsed_line[:lineno]
|
118
118
|
value_hash[:source] = parsed_line[:source]
|
119
|
+
value_hash[:compound] = parsed_line[:line_definition].compound
|
119
120
|
add_line_hash(value_hash)
|
120
121
|
end
|
121
122
|
|
@@ -124,7 +125,19 @@ module RequestLogAnalyzer
|
|
124
125
|
# The line should be provides as a hash of the fields parsed from the line.
|
125
126
|
def add_line_hash(value_hash)
|
126
127
|
@lines << value_hash
|
127
|
-
|
128
|
+
if value_hash[:compound]
|
129
|
+
value_hash.each do |key, value|
|
130
|
+
if value_hash[:compound].include?(key)
|
131
|
+
@attributes[key] = [] if @attributes[key].nil?
|
132
|
+
@attributes[key] = [@attributes[key]] unless @attributes[key].is_a?(Array)
|
133
|
+
@attributes[key] << value
|
134
|
+
else
|
135
|
+
@attributes[key] = value unless key == :compound || @attributes[key]
|
136
|
+
end
|
137
|
+
end
|
138
|
+
else
|
139
|
+
@attributes = value_hash.merge(@attributes)
|
140
|
+
end
|
128
141
|
end
|
129
142
|
|
130
143
|
# Adds another line to the request. This method switches automatically between
|
@@ -118,6 +118,11 @@ module RequestLogAnalyzer::Source
|
|
118
118
|
# <tt>options</tt>:: A Hash of options that will be pased to parse_io.
|
119
119
|
def parse_file(file, options = {}, &block)
|
120
120
|
|
121
|
+
if File.directory?(file)
|
122
|
+
parse_files(Dir["#{ file }/*"], options, &block)
|
123
|
+
return
|
124
|
+
end
|
125
|
+
|
121
126
|
@current_source = File.expand_path(file)
|
122
127
|
@source_changes_handler.call(:started, @current_source) if @source_changes_handler
|
123
128
|
|
@@ -49,11 +49,10 @@ module RequestLogAnalyzer::Tracker
|
|
49
49
|
found_categories.each_with_index do |cat, index|
|
50
50
|
update_statistics(cat, found_values[index]) if cat && found_values[index].kind_of?(Numeric)
|
51
51
|
end
|
52
|
-
|
53
52
|
else
|
54
53
|
category = @categorizer.call(request)
|
55
54
|
value = @valueizer.call(request)
|
56
|
-
update_statistics(category, value) if value.kind_of?(Numeric) && category
|
55
|
+
update_statistics(category, value) if (value.kind_of?(Numeric) || value.kind_of?(Array)) && category
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
@@ -227,6 +226,8 @@ module RequestLogAnalyzer::Tracker
|
|
227
226
|
# <tt>category</tt>:: The category for which to update the running statistics calculations
|
228
227
|
# <tt>number</tt>:: The numeric value to update the calculations with.
|
229
228
|
def update_statistics(category, number)
|
229
|
+
return number.map {|n| update_statistics(category, n)} if number.is_a?(Array)
|
230
|
+
|
230
231
|
@categories[category] ||= { :hits => 0, :sum => 0, :mean => 0.0, :sum_of_squares => 0.0, :min => number, :max => number,
|
231
232
|
:buckets => Array.new(@number_of_buckets, 0) }
|
232
233
|
|
@@ -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.12.
|
6
|
-
s.date = "2012-
|
5
|
+
s.version = "1.12.6"
|
6
|
+
s.date = "2012-12-10"
|
7
7
|
|
8
8
|
s.rubyforge_project = 'r-l-a'
|
9
9
|
|
@@ -45,6 +45,6 @@ Gem::Specification.new do |s|
|
|
45
45
|
|
46
46
|
# The files and test_files directives are set automatically by the release script.
|
47
47
|
# Do not change them by hand, but make sure to add the files to the git repository.
|
48
|
-
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/ordered_hash.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)
|
48
|
+
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/other/ordered_hash.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/nginx.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_3_partials.log spec/fixtures/rails_unordered.log spec/fixtures/s3_logs/2012-10-05-16-18-11-F9AAC5D1A55AEBAD spec/fixtures/s3_logs/2012-10-05-16-26-06-15314AF7F0651839 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)
|
49
49
|
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)
|
50
50
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Started GET "/foobartest" for 127.0.0.1 at 2012-11-21 15:21:13 +0100
|
2
|
+
Processing by HomeController#foobartest as */*
|
3
|
+
Rendered home/foobartest_partial.html.slim (10.0ms)
|
4
|
+
Rendered home/foobartest_partial.html.slim (10.0ms)
|
5
|
+
Rendered home/foobartest_partial.html.slim (10.0ms)
|
6
|
+
Completed 200 OK in 58ms (Views: 44.6ms | ActiveRecord: 0.0ms)
|
7
|
+
|
8
|
+
|
9
|
+
Started GET "/foobartest" for 127.0.0.1 at 2012-11-21 15:21:31 +0100
|
10
|
+
Processing by HomeController#foobartest as */*
|
11
|
+
Rendered home/foobartest_partial.html.slim (100.0ms)
|
12
|
+
Rendered home/foobartest_partial.html.slim (0.0ms)
|
13
|
+
Completed 200 OK in 2ms (Views: 0.6ms | ActiveRecord: 0.0ms)
|
@@ -0,0 +1,5 @@
|
|
1
|
+
300a66dd319290e36b67767f862a7f39072caa70ba33b8d01c4b79ddd8e6d7ef lamestuff.com [05/Oct/2012:15:24:46 +0000] 174.44.160.70 - CE74FF983317B326 REST.GET.OBJECT public/portfolio/22/thumbnail.jpg "GET /lamestuff.com/public/portfolio/22/thumbnail.jpg HTTP/1.1" 200 - 9515 9515 42 41 "http://spike.grobste.in/portfolio" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" -
|
2
|
+
300a66dd319290e36b67767f862a7f39072caa70ba33b8d01c4b79ddd8e6d7ef lamestuff.com [05/Oct/2012:15:25:20 +0000] 174.44.160.70 - D484E1F8E6DE0AAB REST.GET.OBJECT public/projects/46/resume.png "GET /lamestuff.com/public/projects/46/resume.png HTTP/1.1" 200 - 510856 510856 85 74 "http://spike.grobste.in/portfolio/show?name=lamestuff.com-%282007%29" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" -
|
3
|
+
300a66dd319290e36b67767f862a7f39072caa70ba33b8d01c4b79ddd8e6d7ef lamestuff.com [05/Oct/2012:15:25:25 +0000] 174.44.160.70 - E5C48446A01539FC REST.GET.OBJECT public/projects/3/gameboy.jpg "GET /lamestuff.com/public/projects/3/gameboy.jpg HTTP/1.1" 200 - 37458 37458 57 55 "http://spike.grobste.in/project/classic-console-art" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" -
|
4
|
+
300a66dd319290e36b67767f862a7f39072caa70ba33b8d01c4b79ddd8e6d7ef lamestuff.com [05/Oct/2012:15:25:27 +0000] 174.44.160.70 - CD6CC6713DE2254A REST.GET.OBJECT public/projects/115/xmas-card-2006-d.jpg "GET /lamestuff.com/public/projects/115/xmas-card-2006-d.jpg HTTP/1.1" 200 - 89892 89892 58 55 "http://spike.grobste.in/portfolio/show?name=xmas-2006" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" -
|
5
|
+
300a66dd319290e36b67767f862a7f39072caa70ba33b8d01c4b79ddd8e6d7ef lamestuff.com [05/Oct/2012:15:25:31 +0000] 174.44.160.70 - B8B9CBDE2EFE51F3 REST.GET.OBJECT public/projects/34/Tim_Horton-Window-Coffee-ba.jpg "GET /lamestuff.com/public/projects/34/Tim_Horton-Window-Coffee-ba.jpg HTTP/1.1" 200 - 27376 27376 41 40 "http://spike.grobste.in/project/tim-horton's-at-the-nyse" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" -
|
@@ -0,0 +1,3 @@
|
|
1
|
+
300a66dd319290e36b67767f862a7f39072caa70ba33b8d01c4b79ddd8e6d7ef lamestuff.com [05/Oct/2012:15:24:46 +0000] 174.44.160.70 - FC6B8CCFF3510D92 REST.GET.OBJECT public/portfolio/29/thumbnail.jpg "GET /lamestuff.com/public/portfolio/29/thumbnail.jpg HTTP/1.1" 200 - 6240 6240 40 39 "http://spike.grobste.in/portfolio" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" -
|
2
|
+
300a66dd319290e36b67767f862a7f39072caa70ba33b8d01c4b79ddd8e6d7ef lamestuff.com [05/Oct/2012:15:25:27 +0000] 174.44.160.70 - 6908D7E8249F8AB0 REST.GET.OBJECT public/projects/114/xmas-card-2006-c.jpg "GET /lamestuff.com/public/projects/114/xmas-card-2006-c.jpg HTTP/1.1" 200 - 99874 99874 51 47 "http://spike.grobste.in/portfolio/show?name=xmas-2006" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" -
|
3
|
+
300a66dd319290e36b67767f862a7f39072caa70ba33b8d01c4b79ddd8e6d7ef lamestuff.com [05/Oct/2012:15:25:30 +0000] 174.44.160.70 - 41804BB9A626C674 REST.GET.OBJECT public/projects/28/Tim_Horton_Counter__3x12_.jpg "GET /lamestuff.com/public/projects/28/Tim_Horton_Counter__3x12_.jpg HTTP/1.1" 200 - 22256 22256 93 91 "http://spike.grobste.in/project/tim-horton's-at-the-nyse" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" -
|
@@ -20,7 +20,6 @@ describe RequestLogAnalyzer, 'running from command line' do
|
|
20
20
|
output.any? { |line| /^Parsed requests\:\s*2\s/ =~ line }.should be_true
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
23
|
it "should skip 1 requests with a --select option" do
|
25
24
|
output = run("#{log_fixture(:rails_1x)} --select controller PeopleController")
|
26
25
|
output.any? { |line| /^Skipped requests\:\s*1\s/ =~ line }.should be_true
|
@@ -87,4 +86,9 @@ describe RequestLogAnalyzer, 'running from command line' do
|
|
87
86
|
output = run("--format rails - < #{log_fixture(:rails_1x)}")
|
88
87
|
output.any? { |line| /^Parsed requests\:\s*4\s/ =~ line }.should be_true
|
89
88
|
end
|
89
|
+
|
90
|
+
it "should accept a directory as a commandline option" do
|
91
|
+
output = run("#{log_directory_fixture("s3_logs")} --format amazon_s3")
|
92
|
+
output.any? { |line| /^Parsed requests:\s*8\s/ =~ line }.should be_true
|
93
|
+
end
|
90
94
|
end
|
data/spec/lib/helpers.rb
CHANGED
@@ -10,6 +10,11 @@ module RequestLogAnalyzer::RSpec::Helpers
|
|
10
10
|
File.dirname(__FILE__) + "/../fixtures/#{name}.#{extention}"
|
11
11
|
end
|
12
12
|
|
13
|
+
# directory of logs
|
14
|
+
def log_directory_fixture(name)
|
15
|
+
File.dirname(__FILE__) + "/../fixtures/#{name}"
|
16
|
+
end
|
17
|
+
|
13
18
|
# Creates a log file given some lines
|
14
19
|
def log_snippet(*lines)
|
15
20
|
StringIO.new(lines.join("\n") << "\n")
|
@@ -49,12 +54,12 @@ module RequestLogAnalyzer::RSpec::Helpers
|
|
49
54
|
def temp_output_file(file_type)
|
50
55
|
File.expand_path("#{File.dirname(__FILE__)}/../../tmp/spec.#{file_type}.tmp")
|
51
56
|
end
|
52
|
-
|
57
|
+
|
53
58
|
# Check if a given string can be found in the given file
|
54
59
|
# Returns the line number if found, nil otherwise
|
55
60
|
def find_string_in_file(string, file, options = {})
|
56
61
|
return nil unless File.exists?(file)
|
57
|
-
|
62
|
+
|
58
63
|
line_counter = 0
|
59
64
|
|
60
65
|
File.open( file ) do |io|
|
@@ -66,7 +71,7 @@ module RequestLogAnalyzer::RSpec::Helpers
|
|
66
71
|
return line_counter if line.include? string
|
67
72
|
}
|
68
73
|
end
|
69
|
-
|
74
|
+
|
70
75
|
return nil
|
71
76
|
end
|
72
77
|
end
|
@@ -5,7 +5,7 @@ describe RequestLogAnalyzer::FileFormat::Rails3 do
|
|
5
5
|
subject { RequestLogAnalyzer::FileFormat.load(:rails3) }
|
6
6
|
|
7
7
|
it { should be_well_formed }
|
8
|
-
it { should have(
|
8
|
+
it { should have(10).report_trackers }
|
9
9
|
|
10
10
|
describe '#parse_line' do
|
11
11
|
|
@@ -81,6 +81,11 @@ describe RequestLogAnalyzer::FileFormat::Rails3 do
|
|
81
81
|
:message => "undefined local variable or method `field' for #<Class>",
|
82
82
|
:file => '/Users/willem/Code/warehouse/app/views/queries/execute.csv.erb')
|
83
83
|
end
|
84
|
+
|
85
|
+
it "should parse :rendered lines as an array" do
|
86
|
+
line = " Rendered queries/index.html.erb (0.6ms)"
|
87
|
+
subject.should parse_line(line).as(:rendered).and_capture(:partial_duration => [0.0006])
|
88
|
+
end
|
84
89
|
end
|
85
90
|
|
86
91
|
describe '#parse_io' do
|
@@ -100,7 +105,19 @@ describe RequestLogAnalyzer::FileFormat::Rails3 do
|
|
100
105
|
log_parser.should_not_receive(:warn)
|
101
106
|
log_parser.parse_string(log)
|
102
107
|
end
|
103
|
-
|
108
|
+
|
109
|
+
it "should count partials correctly" do
|
110
|
+
log = <<-EOLOG
|
111
|
+
Started GET "/stream_support" for 127.0.0.1 at 2012-11-21 15:21:31 +0100
|
112
|
+
Processing by HomeController#stream_support as */*
|
113
|
+
Rendered home/stream_support.html.slim (33.2ms)
|
114
|
+
Rendered home/stream_support.html.slim (0.0ms)
|
115
|
+
Completed 200 OK in 2ms (Views: 0.6ms | ActiveRecord: 0.0ms)
|
116
|
+
EOLOG
|
117
|
+
|
118
|
+
log_parser.parse_string(log)
|
119
|
+
end
|
120
|
+
|
104
121
|
it "should parse an unroutable request correctly" do
|
105
122
|
log = <<-EOLOG
|
106
123
|
Started GET "/404" for 127.0.0.1 at Fri Mar 19 06:40:57 -0700 2010
|
@@ -113,10 +130,10 @@ describe RequestLogAnalyzer::FileFormat::Rails3 do
|
|
113
130
|
EOLOG
|
114
131
|
|
115
132
|
log_parser.should_receive(:handle_request).once
|
116
|
-
log_parser.
|
133
|
+
log_parser.should_receive(:warn).once
|
117
134
|
log_parser.parse_string(log)
|
118
135
|
end
|
119
|
-
|
136
|
+
|
120
137
|
it "should parse a failing request correctly" do
|
121
138
|
log = <<-EOLOG
|
122
139
|
Started POST "/queries/397638749/execute.csv" for 127.0.0.1 at Mon Mar 01 18:44:33 -0800 2010
|
@@ -142,7 +159,7 @@ describe RequestLogAnalyzer::FileFormat::Rails3 do
|
|
142
159
|
EOLOG
|
143
160
|
|
144
161
|
log_parser.should_receive(:handle_request).once
|
145
|
-
log_parser.
|
162
|
+
log_parser.should_receive(:warn).exactly(3).times
|
146
163
|
log_parser.parse_string(log)
|
147
164
|
end
|
148
165
|
end
|
@@ -24,6 +24,13 @@ describe RequestLogAnalyzer::Tracker::Duration do
|
|
24
24
|
lambda { @tracker.report(mock_output) }.should_not raise_error
|
25
25
|
end
|
26
26
|
|
27
|
+
it "should generate a report with arrays of durations are present" do
|
28
|
+
@tracker.update(request(:category => 'a', :duration => [0.1, 0.2]))
|
29
|
+
@tracker.update(request(:category => 'a', :duration => [0.2, 0.3]))
|
30
|
+
lambda { @tracker.report(mock_output) }.should_not raise_error
|
31
|
+
@tracker.to_yaml_object['a'].should include(:min => 0.1, :hits => 4, :max => 0.3, :mean => 0.2, :sum => 0.8)
|
32
|
+
end
|
33
|
+
|
27
34
|
it "should generate a YAML output" do
|
28
35
|
@tracker.update(request(:category => 'a', :duration => 0.2))
|
29
36
|
@tracker.update(request(:category => 'b', :duration => 0.2))
|
metadata
CHANGED
@@ -1,83 +1,100 @@
|
|
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
|
-
- 12
|
8
|
-
- 5
|
9
|
-
version: 1.12.5
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.12.6
|
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
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2012-12-10 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: rake
|
23
|
-
|
24
|
-
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
31
23
|
type: :development
|
32
|
-
version_requirements: *id001
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: rspec
|
35
24
|
prerelease: false
|
36
|
-
|
37
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rspec
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
38
36
|
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
|
41
|
-
- 2
|
42
|
-
- 8
|
43
|
-
version: "2.8"
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '2.8'
|
44
39
|
type: :development
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: activerecord
|
48
40
|
prerelease: false
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.8'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activerecord
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
56
55
|
type: :development
|
57
|
-
version_requirements: *id003
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: sqlite3
|
60
56
|
prerelease: false
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: sqlite3
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
68
71
|
type: :development
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
description: ! " Request log analyzer's purpose is to find out how your web application
|
80
|
+
is being used, how it performs and to\n focus your optimization efforts. This
|
81
|
+
tool will parse all requests in the application's log file and aggregate the \n
|
82
|
+
\ information. Once it is finished parsing the log file(s), it will show the requests
|
83
|
+
that take op most server time \n using various metrics. It can also insert all
|
84
|
+
parsed request information into a database so you can roll your own\n analysis.
|
85
|
+
It supports Rails-, Merb- and Rack-based applications logs, Apache and Amazon S3
|
86
|
+
access logs and MySQL \n slow query logs out of the box, but file formats of
|
87
|
+
other applications can easily be supported by supplying an \n easy to write log
|
88
|
+
file format definition.\n"
|
89
|
+
email:
|
72
90
|
- willem@railsdoctors.com
|
73
91
|
- bart@railsdoctors.com
|
74
|
-
executables:
|
92
|
+
executables:
|
75
93
|
- request-log-analyzer
|
76
94
|
extensions: []
|
77
|
-
|
78
|
-
extra_rdoc_files:
|
95
|
+
extra_rdoc_files:
|
79
96
|
- README.rdoc
|
80
|
-
files:
|
97
|
+
files:
|
81
98
|
- .gitignore
|
82
99
|
- .infinity_test
|
83
100
|
- .travis.yml
|
@@ -92,7 +109,7 @@ files:
|
|
92
109
|
- lib/cli/database_console_init.rb
|
93
110
|
- lib/cli/progressbar.rb
|
94
111
|
- lib/cli/tools.rb
|
95
|
-
- lib/ordered_hash.rb
|
112
|
+
- lib/other/ordered_hash.rb
|
96
113
|
- lib/request_log_analyzer.rb
|
97
114
|
- lib/request_log_analyzer/aggregator.rb
|
98
115
|
- lib/request_log_analyzer/aggregator/database_inserter.rb
|
@@ -114,6 +131,7 @@ files:
|
|
114
131
|
- lib/request_log_analyzer/file_format/haproxy.rb
|
115
132
|
- lib/request_log_analyzer/file_format/merb.rb
|
116
133
|
- lib/request_log_analyzer/file_format/mysql.rb
|
134
|
+
- lib/request_log_analyzer/file_format/nginx.rb
|
117
135
|
- lib/request_log_analyzer/file_format/oink.rb
|
118
136
|
- lib/request_log_analyzer/file_format/postgresql.rb
|
119
137
|
- lib/request_log_analyzer/file_format/rack.rb
|
@@ -164,7 +182,10 @@ files:
|
|
164
182
|
- spec/fixtures/rails_1x.log
|
165
183
|
- spec/fixtures/rails_22.log
|
166
184
|
- spec/fixtures/rails_22_cached.log
|
185
|
+
- spec/fixtures/rails_3_partials.log
|
167
186
|
- spec/fixtures/rails_unordered.log
|
187
|
+
- spec/fixtures/s3_logs/2012-10-05-16-18-11-F9AAC5D1A55AEBAD
|
188
|
+
- spec/fixtures/s3_logs/2012-10-05-16-26-06-15314AF7F0651839
|
168
189
|
- spec/fixtures/sinatra.log
|
169
190
|
- spec/fixtures/syslog_1x.log
|
170
191
|
- spec/fixtures/test_file_format.log
|
@@ -221,42 +242,40 @@ files:
|
|
221
242
|
- spec/unit/tracker/traffic_tracker_spec.rb
|
222
243
|
- tasks/github-gem.rake
|
223
244
|
- tasks/request_log_analyzer.rake
|
224
|
-
has_rdoc: true
|
225
245
|
homepage: http://railsdoctors.com
|
226
246
|
licenses: []
|
227
|
-
|
228
247
|
post_install_message:
|
229
|
-
rdoc_options:
|
248
|
+
rdoc_options:
|
230
249
|
- --title
|
231
250
|
- request-log-analyzer
|
232
251
|
- --main
|
233
252
|
- README.rdoc
|
234
253
|
- --line-numbers
|
235
254
|
- --inline-source
|
236
|
-
require_paths:
|
255
|
+
require_paths:
|
237
256
|
- lib
|
238
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
requirements:
|
247
|
-
- -
|
248
|
-
- !ruby/object:Gem::Version
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
- To use the database inserter, ActiveRecord and an appropriate database adapter are required.
|
257
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
258
|
+
none: false
|
259
|
+
requirements:
|
260
|
+
- - ! '>='
|
261
|
+
- !ruby/object:Gem::Version
|
262
|
+
version: '0'
|
263
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
|
+
none: false
|
265
|
+
requirements:
|
266
|
+
- - ! '>='
|
267
|
+
- !ruby/object:Gem::Version
|
268
|
+
version: '0'
|
269
|
+
requirements:
|
270
|
+
- To use the database inserter, ActiveRecord and an appropriate database adapter are
|
271
|
+
required.
|
254
272
|
rubyforge_project: r-l-a
|
255
|
-
rubygems_version: 1.
|
273
|
+
rubygems_version: 1.8.24
|
256
274
|
signing_key:
|
257
275
|
specification_version: 3
|
258
|
-
summary: A command line tool to analyze request logs for Apache, Rails, Merb, MySQL
|
259
|
-
|
276
|
+
summary: A command line tool to analyze request logs for Apache, Rails, Merb, MySQL
|
277
|
+
and other web application servers
|
278
|
+
test_files:
|
260
279
|
- spec/integration/command_line_usage_spec.rb
|
261
280
|
- spec/integration/mailer_spec.rb
|
262
281
|
- spec/integration/munin_plugins_rails_spec.rb
|