request-log-analyzer 1.7.0 → 1.8.0
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 -0
- data/lib/request_log_analyzer.rb +1 -1
- data/lib/request_log_analyzer/controller.rb +4 -2
- data/lib/request_log_analyzer/file_format.rb +2 -1
- data/lib/request_log_analyzer/file_format/delayed_job2.rb +38 -0
- data/lib/request_log_analyzer/file_format/oink.rb +78 -0
- data/lib/request_log_analyzer/request.rb +10 -3
- data/request-log-analyzer.gemspec +4 -4
- data/spec/fixtures/oink_22.log +19 -0
- data/spec/fixtures/oink_22_failure.log +17 -0
- data/spec/integration/command_line_usage_spec.rb +1 -1
- data/spec/integration/mailer_spec.rb +16 -0
- data/spec/unit/file_format/delayed_job2_format_spec.rb +54 -0
- data/spec/unit/file_format/delayed_job_format_spec.rb +1 -1
- data/spec/unit/file_format/oink_format_spec.rb +98 -0
- data/tasks/github-gem.rake +47 -4
- metadata +13 -5
data/bin/request-log-analyzer
CHANGED
@@ -34,6 +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
38
|
command_line.option(:parse_strategy, :default => 'assume-correct')
|
38
39
|
command_line.option(:yaml)
|
39
40
|
command_line.option(:dump) # To be deprecated
|
@@ -85,6 +86,7 @@ rescue CommandLine::Error => e
|
|
85
86
|
puts " --file <filename> Redirect output to file."
|
86
87
|
puts " --mail <emailaddress> Send report to an email address."
|
87
88
|
puts " --mailhost <server> Use the given server as the SMTP server for sending email."
|
89
|
+
puts " --mailsubject <text> Overwrite default mailsubject."
|
88
90
|
puts " --no-progress Hide the progress bar."
|
89
91
|
puts " --output <format> Output format. Supports 'html' and 'fixed_width'."
|
90
92
|
puts " --report-width <amount> Width of ASCII report. Defaults to terminal width."
|
data/lib/request_log_analyzer.rb
CHANGED
@@ -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.
|
14
|
+
VERSION = "1.8.0"
|
15
15
|
|
16
16
|
# Loads constants in the RequestLogAnalyzer namespace using self.load_default_class_file(base, const)
|
17
17
|
# <tt>const</tt>:: The constant that is not yet loaded in the RequestLogAnalyzer namespace. This should be passed as a string or symbol.
|
@@ -21,7 +21,7 @@ module RequestLogAnalyzer
|
|
21
21
|
# <tt>arguments<tt> A CommandLine::Arguments hash containing parsed commandline parameters.
|
22
22
|
def self.build_from_arguments(arguments)
|
23
23
|
|
24
|
-
require '
|
24
|
+
require File.dirname(__FILE__) + '/../mixins/gets_memory_protection' if arguments[:gets_memory_protection]
|
25
25
|
|
26
26
|
options = {}
|
27
27
|
|
@@ -45,6 +45,7 @@ module RequestLogAnalyzer
|
|
45
45
|
options[:report_sort] = arguments[:report_sort]
|
46
46
|
options[:report_amount] = arguments[:report_amount]
|
47
47
|
options[:mailhost] = arguments[:mailhost]
|
48
|
+
options[:mailsubject] = arguments[:mailsubject]
|
48
49
|
options[:silent] = arguments[:silent]
|
49
50
|
|
50
51
|
# Apache format workaround
|
@@ -107,6 +108,7 @@ module RequestLogAnalyzer
|
|
107
108
|
# * <tt>:format</tt> :rails, {:apache => 'FORMATSTRING'}, :merb, :amazon_s3, :mysql or RequestLogAnalyzer::FileFormat class. (Defaults to :rails).
|
108
109
|
# * <tt>:mail</tt> Email the results to this email address.
|
109
110
|
# * <tt>:mailhost</tt> Email the results to this mail server.
|
111
|
+
# * <tt>:mailsubject</tt> Email subject.
|
110
112
|
# * <tt>:no_progress</tt> Do not display the progress bar (increases parsing speed).
|
111
113
|
# * <tt>:output</tt> 'FixedWidth', 'HTML' or RequestLogAnalyzer::Output class. Defaults to 'FixedWidth'.
|
112
114
|
# * <tt>:reject</tt> Reject specific {:field => :value} combination (expects a single hash).
|
@@ -163,7 +165,7 @@ module RequestLogAnalyzer
|
|
163
165
|
output_object = %w[File StringIO].include?(options[:file].class.name) ? options[:file] : File.new(options[:file], "w+")
|
164
166
|
output_args = {:width => 80, :color => false, :characters => :ascii, :sort => output_sort, :amount => output_amount }
|
165
167
|
elsif options[:mail]
|
166
|
-
output_object = RequestLogAnalyzer::Mailer.new(options[:mail], options[:mailhost])
|
168
|
+
output_object = RequestLogAnalyzer::Mailer.new(options[:mail], options[:mailhost], :subject => options[:mailsubject])
|
167
169
|
output_args = {:width => 80, :color => false, :characters => :ascii, :sort => output_sort, :amount => output_amount }
|
168
170
|
else
|
169
171
|
output_object = STDOUT
|
@@ -20,9 +20,10 @@ module RequestLogAnalyzer::FileFormat
|
|
20
20
|
# a usable class is provided. Use this format class.
|
21
21
|
klass = file_format
|
22
22
|
|
23
|
-
elsif file_format.kind_of?(String) && File.exist?(file_format)
|
23
|
+
elsif file_format.kind_of?(String) && File.exist?(file_format) && File.file?(file_format)
|
24
24
|
# load a format from a ruby file
|
25
25
|
require file_format
|
26
|
+
|
26
27
|
const = RequestLogAnalyzer::to_camelcase(File.basename(file_format, '.rb'))
|
27
28
|
if RequestLogAnalyzer::FileFormat.const_defined?(const)
|
28
29
|
klass = RequestLogAnalyzer::FileFormat.const_get(const)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module RequestLogAnalyzer::FileFormat
|
2
|
+
|
3
|
+
# The DelayedJob2 file format parsed log files that are created by DelayedJob 2.0 or higher.
|
4
|
+
# By default, the log file can be found in RAILS_ROOT/log/delayed_job.log
|
5
|
+
class DelayedJob2 < Base
|
6
|
+
|
7
|
+
extend CommonRegularExpressions
|
8
|
+
|
9
|
+
line_definition :job_lock do |line|
|
10
|
+
line.header = true
|
11
|
+
line.regexp = /(#{timestamp('%Y-%m-%dT%H:%M:%S%z')}): \* \[Worker\(\w+ host:(\S+) pid:(\d+)\)\] acquired lock on (\S+)/
|
12
|
+
|
13
|
+
line.capture(:timestamp).as(:timestamp)
|
14
|
+
line.capture(:host)
|
15
|
+
line.capture(:pid).as(:integer)
|
16
|
+
line.capture(:job)
|
17
|
+
end
|
18
|
+
|
19
|
+
line_definition :job_completed do |line|
|
20
|
+
line.footer = true
|
21
|
+
line.regexp = /(#{timestamp('%Y-%m-%dT%H:%M:%S%z')}): \* \[JOB\] \w+ host:(\S+) pid:(\d+) completed after (\d+\.\d+)/
|
22
|
+
line.capture(:timestamp).as(:timestamp)
|
23
|
+
line.capture(:host)
|
24
|
+
line.capture(:pid).as(:integer)
|
25
|
+
line.capture(:duration).as(:duration, :unit => :sec)
|
26
|
+
end
|
27
|
+
|
28
|
+
report do |analyze|
|
29
|
+
analyze.timespan
|
30
|
+
analyze.hourly_spread
|
31
|
+
|
32
|
+
analyze.frequency :job, :line_type => :job_completed, :title => "Completed jobs"
|
33
|
+
#analyze.frequency :job, :if => lambda { |request| request[:attempts] == 1 }, :title => "Failed jobs"
|
34
|
+
|
35
|
+
analyze.duration :duration, :category => :job, :line_type => :job_completed, :title => "Job duration"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
class RequestLogAnalyzer::FileFormat::Oink < RequestLogAnalyzer::FileFormat::Rails
|
2
|
+
# capture the PID
|
3
|
+
HODEL3000_PROCESSING = /\[(\d+)\]: Processing ((?:\w+::)*\w+)#(\w+)(?: to (\w+))? \(for (#{ip_address}) at (#{timestamp('%Y-%m-%d %H:%M:%S')})\) \[([A-Z]+)\]/
|
4
|
+
|
5
|
+
LINE_DEFINITIONS[:processing] = RequestLogAnalyzer::LineDefinition.new(:processing, :header => true,
|
6
|
+
:teaser => /Processing /,
|
7
|
+
:regexp => Regexp.union(LINE_DEFINITIONS[:processing].regexp,HODEL3000_PROCESSING),
|
8
|
+
:captures => [{ :name => :controller, :type => :string }, # Default Rails Processing
|
9
|
+
{ :name => :action, :type => :string },
|
10
|
+
{ :name => :format, :type => :string, :default => 'html' },
|
11
|
+
{ :name => :ip, :type => :string },
|
12
|
+
{ :name => :timestamp, :type => :timestamp },
|
13
|
+
{ :name => :method, :type => :string },
|
14
|
+
{ :name => :pid, :type => :integer }, # Hodel 3000 Processing w/PID
|
15
|
+
{ :name => :controller, :type => :string },
|
16
|
+
{ :name => :action, :type => :string },
|
17
|
+
{ :name => :format, :type => :string, :default => 'html' },
|
18
|
+
{ :name => :ip, :type => :string },
|
19
|
+
{ :name => :timestamp, :type => :timestamp },
|
20
|
+
{ :name => :method, :type => :string }])
|
21
|
+
|
22
|
+
# capture the memory usage
|
23
|
+
LINE_DEFINITIONS[:memory_usage] = RequestLogAnalyzer::LineDefinition.new(:memory_usage,
|
24
|
+
:regexp => /\[(\d+)\]: Memory usage: (\d+) /,
|
25
|
+
:captures => [{ :name => :pid, :type => :integer },{ :name => :memory, :type => :traffic }])
|
26
|
+
|
27
|
+
# capture :memory usage in all line collections
|
28
|
+
LINE_COLLECTIONS.each { |k,v| LINE_COLLECTIONS[k] << :memory_usage }
|
29
|
+
|
30
|
+
report(:append) do |analyze|
|
31
|
+
analyze.traffic :memory_diff, :category => REQUEST_CATEGORIZER, :title => "Largest Memory Increases", :line_type => :memory_usage
|
32
|
+
end
|
33
|
+
|
34
|
+
# Keep a record of PIDs and their memory usage when validating requests.
|
35
|
+
def pids
|
36
|
+
@pids ||= {}
|
37
|
+
end
|
38
|
+
|
39
|
+
class Request
|
40
|
+
# Overrides the #validate method to handle PID updating.
|
41
|
+
def validate
|
42
|
+
update_pids
|
43
|
+
super
|
44
|
+
end
|
45
|
+
|
46
|
+
# Accessor for memory information associated with the specified request PID. If no memory exists
|
47
|
+
# for this request's :pid, the memory tracking is initialized.
|
48
|
+
def pid_memory
|
49
|
+
file_format.pids[self[:pid]] ||= { :last_memory_reading => -1, :current_memory_reading => -1 }
|
50
|
+
end
|
51
|
+
|
52
|
+
# Calculates :memory_diff for each request based on the last completed request that was not a failure.
|
53
|
+
def update_pids
|
54
|
+
# memory isn't recorded with exceptions. need to set #last_memory_reading+ to -1 as
|
55
|
+
# the memory used could have changed. for the next request the memory change will not be recorded.
|
56
|
+
#
|
57
|
+
# NOTE - the failure regex was not matching with a Rails Development log file.
|
58
|
+
if has_line_type?(:failure) and processing = has_line_type?(:processing)
|
59
|
+
pid_memory[:last_memory_reading] = -1
|
60
|
+
elsif mem_line = has_line_type?(:memory_usage)
|
61
|
+
memory_reading = mem_line[:memory]
|
62
|
+
pid_memory[:current_memory_reading] = memory_reading
|
63
|
+
# calcuate the change in memory
|
64
|
+
unless pid_memory[:current_memory_reading] == -1 || pid_memory[:last_memory_reading] == -1
|
65
|
+
# logged as kB, need to convert to bytes for the :traffic Tracker
|
66
|
+
memory_diff = (pid_memory[:current_memory_reading] - pid_memory[:last_memory_reading])*1024
|
67
|
+
if memory_diff > 0
|
68
|
+
self.attributes[:memory_diff] = memory_diff
|
69
|
+
end # if memory_diff > 0
|
70
|
+
end # unless
|
71
|
+
|
72
|
+
pid_memory[:last_memory_reading] = pid_memory[:current_memory_reading]
|
73
|
+
pid_memory[:current_memory_reading] = -1
|
74
|
+
end # if mem_line
|
75
|
+
return true
|
76
|
+
end # def update_pids
|
77
|
+
end # class Request
|
78
|
+
end
|
@@ -30,11 +30,18 @@ module RequestLogAnalyzer
|
|
30
30
|
|
31
31
|
# Converts :eval field, which should evaluate to a hash.
|
32
32
|
def convert_eval(value, capture_definition)
|
33
|
-
eval(value).inject({}) { |h, (k, v)| h[k.to_sym] = v; h}
|
34
|
-
|
33
|
+
eval(sanitize_parameters(value)).inject({}) { |h, (k, v)| h[k.to_sym] = v; h}
|
34
|
+
# Wide range of errors possible with wild eval. ATM we choose to crash on this.
|
35
|
+
rescue SyntaxError
|
35
36
|
nil
|
36
37
|
end
|
37
38
|
|
39
|
+
# Removes certain string sequences which would be problematic for eval.
|
40
|
+
# TODO remove all characters not valid in ruby symbols
|
41
|
+
def sanitize_parameters(parameter_string)
|
42
|
+
parameter_string.gsub(/#</, '"').gsub(/>,/, '", ').gsub(/\\0/, '')
|
43
|
+
end
|
44
|
+
|
38
45
|
# Slow default method to parse timestamps.
|
39
46
|
# Reimplement this function in a file format specific Request class
|
40
47
|
# to improve the timestamp parsing speed.
|
@@ -177,4 +184,4 @@ module RequestLogAnalyzer
|
|
177
184
|
@lines.map { |line| line[:lineno] }.reject { |v| v.nil? }.max
|
178
185
|
end
|
179
186
|
end
|
180
|
-
end
|
187
|
+
end
|
@@ -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.
|
6
|
-
s.date = "2010-
|
5
|
+
s.version = "1.8.0"
|
6
|
+
s.date = "2010-06-30"
|
7
7
|
|
8
8
|
s.rubyforge_project = 'r-l-a'
|
9
9
|
|
@@ -36,6 +36,6 @@ Gem::Specification.new do |s|
|
|
36
36
|
|
37
37
|
# The files and test_files directives are set automatically by the release script.
|
38
38
|
# Do not change them by hand, but make sure to add the files to the git repository.
|
39
|
-
s.files = %w(spec/unit/file_format/delayed_job_format_spec.rb spec/fixtures/rails_unordered.log spec/unit/filter/anonymize_filter_spec.rb lib/request_log_analyzer/output/fancy_html.rb README.rdoc lib/cli/progressbar.rb spec/fixtures/rails.db lib/request_log_analyzer/file_format/rails_development.rb spec/fixtures/rails_22.log spec/fixtures/test_order.log spec/fixtures/header_and_footer.log lib/mixins/gets_memory_protection.rb spec/fixtures/decompression.log spec/fixtures/rails_1x.log lib/request_log_analyzer/file_format/apache.rb lib/request_log_analyzer/output.rb lib/request_log_analyzer/tracker/numeric_value.rb spec/unit/file_format/line_definition_spec.rb spec/unit/request_spec.rb spec/unit/filter/filter_spec.rb spec/unit/aggregator/summarizer_spec.rb lib/request_log_analyzer/file_format/rails.rb spec/database.yml spec/unit/tracker/numeric_value_tracker_spec.rb spec/spec_helper.rb lib/request_log_analyzer/database/base.rb spec/unit/aggregator/database_inserter_spec.rb spec/fixtures/decompression.log.bz2 spec/unit/database/connection_spec.rb spec/fixtures/sinatra.log lib/request_log_analyzer/database/warning.rb spec/fixtures/merb_prefixed.log spec/unit/file_format/postgresql_format_spec.rb lib/request_log_analyzer/filter/timespan.rb spec/fixtures/rails_22_cached.log lib/request_log_analyzer/tracker/traffic.rb spec/unit/file_format/format_autodetection_spec.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/file_format/delayed_job.rb lib/request_log_analyzer/file_format/merb.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/file_format/amazon_s3.rb LICENSE lib/request_log_analyzer/file_format.rb lib/cli/database_console.rb spec/integration/mailer_spec.rb spec/fixtures/merb.log lib/request_log_analyzer/line_definition.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/mailer_spec.rb spec/fixtures/postgresql.log spec/lib/mocks.rb lib/request_log_analyzer/tracker/hourly_spread.rb spec/
|
40
|
-
s.test_files = %w(spec/unit/file_format/delayed_job_format_spec.rb spec/unit/filter/anonymize_filter_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/request_spec.rb spec/unit/filter/filter_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/tracker/numeric_value_tracker_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/database/connection_spec.rb spec/unit/file_format/postgresql_format_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/integration/mailer_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/mailer_spec.rb spec/unit/file_format/rails3_format_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/database/base_class_spec.rb spec/unit/file_format/rails_format_spec.rb spec/integration/command_line_usage_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/file_format/common_regular_expressions_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/rack_format_spec.rb spec/unit/file_format/mysql_format_spec.rb spec/unit/tracker/traffic_tracker_spec.rb spec/integration/scout_spec.rb spec/unit/controller/controller_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/database/database_spec.rb spec/integration/munin_plugins_rails_spec.rb spec/unit/file_format/apache_format_spec.rb)
|
39
|
+
s.files = %w(spec/unit/file_format/delayed_job_format_spec.rb spec/fixtures/rails_unordered.log spec/unit/filter/anonymize_filter_spec.rb lib/request_log_analyzer/output/fancy_html.rb README.rdoc lib/cli/progressbar.rb spec/fixtures/rails.db lib/request_log_analyzer/file_format/rails_development.rb spec/fixtures/rails_22.log spec/unit/file_format/delayed_job2_format_spec.rb spec/fixtures/test_order.log spec/fixtures/header_and_footer.log lib/mixins/gets_memory_protection.rb spec/fixtures/decompression.log spec/fixtures/rails_1x.log lib/request_log_analyzer/file_format/apache.rb lib/request_log_analyzer/output.rb lib/request_log_analyzer/tracker/numeric_value.rb spec/unit/file_format/line_definition_spec.rb spec/unit/request_spec.rb spec/unit/filter/filter_spec.rb spec/unit/aggregator/summarizer_spec.rb lib/request_log_analyzer/file_format/rails.rb spec/database.yml spec/unit/tracker/numeric_value_tracker_spec.rb spec/spec_helper.rb lib/request_log_analyzer/database/base.rb spec/unit/aggregator/database_inserter_spec.rb spec/fixtures/decompression.log.bz2 spec/unit/database/connection_spec.rb spec/fixtures/oink_22.log spec/fixtures/sinatra.log lib/request_log_analyzer/database/warning.rb spec/fixtures/merb_prefixed.log spec/unit/file_format/postgresql_format_spec.rb lib/request_log_analyzer/filter/timespan.rb spec/fixtures/rails_22_cached.log lib/request_log_analyzer/tracker/traffic.rb spec/unit/file_format/format_autodetection_spec.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/file_format/delayed_job.rb lib/request_log_analyzer/file_format/merb.rb lib/request_log_analyzer/file_format/oink.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/file_format/amazon_s3.rb LICENSE lib/request_log_analyzer/file_format.rb lib/cli/database_console.rb spec/integration/mailer_spec.rb spec/fixtures/merb.log lib/request_log_analyzer/line_definition.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/mailer_spec.rb spec/fixtures/postgresql.log spec/lib/mocks.rb lib/request_log_analyzer/tracker/hourly_spread.rb spec/unit/file_format/rails3_format_spec.rb spec/fixtures/syslog_1x.log lib/request_log_analyzer/source.rb lib/request_log_analyzer/file_format/rails3.rb spec/unit/controller/log_processor_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/unit/filter/field_filter_spec.rb DESIGN.rdoc lib/request_log_analyzer/log_processor.rb spec/fixtures/multiple_files_1.log spec/unit/source/log_parser_spec.rb spec/fixtures/decompression.tar.gz spec/unit/database/base_class_spec.rb lib/request_log_analyzer/aggregator/database_inserter.rb lib/request_log_analyzer/database/connection.rb lib/request_log_analyzer/aggregator.rb lib/request_log_analyzer/database.rb spec/unit/file_format/rails_format_spec.rb lib/request_log_analyzer/source/database_loader.rb lib/request_log_analyzer/output/fixed_width.rb spec/integration/command_line_usage_spec.rb tasks/request_log_analyzer.rake lib/request_log_analyzer/tracker/duration.rb spec/fixtures/test_language_combined.log bin/request-log-analyzer lib/request_log_analyzer/tracker.rb tasks/github-gem.rake lib/cli/command_line_arguments.rb lib/request_log_analyzer.rb .gitignore lib/request_log_analyzer/output/html.rb lib/request_log_analyzer/database/request.rb lib/cli/database_console_init.rb lib/request_log_analyzer/database/source.rb spec/unit/file_format/amazon_s3_format_spec.rb lib/request_log_analyzer/filter.rb spec/fixtures/apache_combined.log spec/unit/tracker/duration_tracker_spec.rb spec/fixtures/test_file_format.log lib/request_log_analyzer/aggregator/summarizer.rb spec/fixtures/oink_22_failure.log spec/unit/filter/timespan_filter_spec.rb spec/unit/file_format/common_regular_expressions_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/file_format_api_spec.rb lib/request_log_analyzer/file_format/delayed_job2.rb spec/unit/file_format/rack_format_spec.rb spec/unit/file_format/mysql_format_spec.rb lib/request_log_analyzer/file_format/mysql.rb spec/fixtures/decompression.log.gz lib/request_log_analyzer/tracker/frequency.rb request-log-analyzer.gemspec spec/fixtures/apache_common.log Rakefile spec/unit/tracker/traffic_tracker_spec.rb lib/request_log_analyzer/file_format/postgresql.rb lib/request_log_analyzer/tracker/timespan.rb spec/lib/macros.rb spec/integration/scout_spec.rb spec/unit/controller/controller_spec.rb lib/request_log_analyzer/mailer.rb lib/cli/tools.rb spec/unit/tracker/timespan_tracker_spec.rb spec/lib/testing_format.rb spec/lib/matchers.rb lib/request_log_analyzer/controller.rb spec/unit/tracker/tracker_api_spec.rb lib/request_log_analyzer/request.rb spec/unit/file_format/oink_format_spec.rb spec/fixtures/multiple_files_2.log spec/unit/database/database_spec.rb spec/fixtures/decompression.log.zip spec/fixtures/decompression.tgz lib/request_log_analyzer/file_format/rack.rb spec/integration/munin_plugins_rails_spec.rb spec/fixtures/mysql_slow_query.log spec/lib/helpers.rb lib/request_log_analyzer/source/log_parser.rb lib/request_log_analyzer/aggregator/echo.rb spec/unit/file_format/apache_format_spec.rb)
|
40
|
+
s.test_files = %w(spec/unit/file_format/delayed_job_format_spec.rb spec/unit/filter/anonymize_filter_spec.rb spec/unit/file_format/delayed_job2_format_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/request_spec.rb spec/unit/filter/filter_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/tracker/numeric_value_tracker_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/database/connection_spec.rb spec/unit/file_format/postgresql_format_spec.rb spec/unit/file_format/format_autodetection_spec.rb spec/integration/mailer_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/mailer_spec.rb spec/unit/file_format/rails3_format_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/database/base_class_spec.rb spec/unit/file_format/rails_format_spec.rb spec/integration/command_line_usage_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/file_format/common_regular_expressions_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/rack_format_spec.rb spec/unit/file_format/mysql_format_spec.rb spec/unit/tracker/traffic_tracker_spec.rb spec/integration/scout_spec.rb spec/unit/controller/controller_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/file_format/oink_format_spec.rb spec/unit/database/database_spec.rb spec/integration/munin_plugins_rails_spec.rb spec/unit/file_format/apache_format_spec.rb)
|
41
41
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Jun 18 11:27:37 derek rails[67783]: Processing FileRecordsController#inline (for 127.0.0.1 at 2010-06-18 11:27:37) [GET]
|
2
|
+
Jun 18 11:27:37 derek rails[67783]: Session ID: 8abbd5bce47cfc8bd438c647f5a9e016
|
3
|
+
Jun 18 11:27:37 derek rails[67783]: Parameters: {"id"=>"5171"}
|
4
|
+
Jun 18 11:27:37 derek rails[67783]: Memory usage: 400000 | PID: 67783
|
5
|
+
Jun 18 11:27:37 derek rails[67783]: Completed in 207ms (View: 0, DB: 258) | 200 OK [http://localhost/file_records/inline/5171]
|
6
|
+
|
7
|
+
Jun 18 11:28:11 derek rails[700]: Processing InfoController#about (for 127.0.0.1 at 2010-06-18 11:28:11) [GET]
|
8
|
+
Jun 18 11:28:12 derek rails[700]: Memory usage: 700000 | PID: 67783
|
9
|
+
Jun 18 11:28:12 derek rails[700]: Completed in 379ms (View: 89, DB: 258) | 200 OK [http://localhost/info/about]
|
10
|
+
|
11
|
+
Jun 18 11:28:11 derek rails[700]: Processing InfoController#board (for 127.0.0.1 at 2010-06-18 11:28:11) [GET]
|
12
|
+
Jun 18 11:28:12 derek rails[700]: Memory usage: 750000 | PID: 67783
|
13
|
+
Jun 18 11:28:12 derek rails[700]: Completed in 379ms (View: 89, DB: 258) | 200 OK [http://localhost/info/board]
|
14
|
+
|
15
|
+
Jun 18 11:31:19 derek rails[67783]: Processing InnovationsController#innovation_param (for 127.0.0.1 at 2010-06-18 11:31:19) [GET]
|
16
|
+
Jun 18 11:31:19 derek rails[67783]: Session ID: 8abbd5bce47cfc8bd438c647f5a9e016
|
17
|
+
Jun 18 11:31:19 derek rails[67783]: Parameters: {"organization_param"=>"harvard", "innovation_param"=>"potent-ogt-inhibitors-for-the-treatment-of-cancer-and-diabeti"}
|
18
|
+
Jun 18 11:31:31 derek rails[67783]: Memory usage: 430000 | PID: 67783
|
19
|
+
Jun 18 11:31:31 derek rails[67783]: Completed in 11922ms (View: 200, DB: 11673) | 200 OK [http://localhost/harvard/potent-ogt-inhibitors-for-the-treatment-of-cancer-and-diabeti]
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Jun 18 11:25:37 derek rails[67783]: Processing FileRecordsController#inline (for 127.0.0.1 at 2010-06-18 11:25:37) [GET]
|
2
|
+
Jun 18 11:25:40 derek rails[67783]: NoMethodError (undefined method `update_domain_account' for nil:NilClass):
|
3
|
+
|
4
|
+
Jun 18 11:27:37 derek rails[67783]: Processing FileRecordsController#inline (for 127.0.0.1 at 2010-06-18 11:27:37) [GET]
|
5
|
+
Jun 18 11:27:37 derek rails[67783]: Session ID: 8abbd5bce47cfc8bd438c647f5a9e016
|
6
|
+
Jun 18 11:27:37 derek rails[67783]: Parameters: {"id"=>"5171"}
|
7
|
+
Jun 18 11:27:37 derek rails[67783]: Memory usage: 400000 | PID: 67783
|
8
|
+
Jun 18 11:27:37 derek rails[67783]: Completed in 207ms (View: 0, DB: 258) | 200 OK [http://localhost/file_records/inline/5171]
|
9
|
+
|
10
|
+
Jun 18 11:30:37 derek rails[67783]: Processing FileRecordsController#inline (for 127.0.0.1 at 2010-06-18 11:27:37) [GET]
|
11
|
+
Jun 18 11:30:40 derek rails[67783]: NoMethodError (undefined method `update_domain_account' for nil:NilClass):
|
12
|
+
|
13
|
+
Jun 18 11:31:19 derek rails[67783]: Processing InnovationsController#innovation_param (for 127.0.0.1 at 2010-06-18 11:31:19) [GET]
|
14
|
+
Jun 18 11:31:19 derek rails[67783]: Session ID: 8abbd5bce47cfc8bd438c647f5a9e016
|
15
|
+
Jun 18 11:31:19 derek rails[67783]: Parameters: {"organization_param"=>"harvard", "innovation_param"=>"potent-ogt-inhibitors-for-the-treatment-of-cancer-and-diabeti"}
|
16
|
+
Jun 18 11:31:31 derek rails[67783]: Memory usage: 430000 | PID: 67783
|
17
|
+
Jun 18 11:31:31 derek rails[67783]: Completed in 11922ms (View: 200, DB: 11673) | 200 OK [http://localhost/harvard/potent-ogt-inhibitors-for-the-treatment-of-cancer-and-diabeti]
|
@@ -83,7 +83,7 @@ describe RequestLogAnalyzer, 'running from command line' do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should dump the results to a YAML file" do
|
86
|
-
run("#{log_fixture(:rails_1x)} --
|
86
|
+
run("#{log_fixture(:rails_1x)} --yaml #{temp_output_file(:yaml)}")
|
87
87
|
File.exist?(temp_output_file(:yaml)).should be_true
|
88
88
|
YAML::load(File.read(temp_output_file(:yaml))).should have_at_least(1).item
|
89
89
|
end
|
@@ -30,9 +30,25 @@ describe RequestLogAnalyzer, 'running mailer integration' do
|
|
30
30
|
find_string_in_file("From: <contact@railsdoctors.com>", @log_file).should_not be_nil
|
31
31
|
find_string_in_file("To: <root@localhost>", @log_file).should_not be_nil
|
32
32
|
find_string_in_file("From: Request-log-analyzer reporter <contact@railsdoctors.com>", @log_file).should_not be_nil
|
33
|
+
find_string_in_file("Subject: Request log analyzer report - generated on", @log_file).should_not be_nil
|
33
34
|
find_string_in_file("Request summary", @log_file).should_not be_nil
|
34
35
|
find_string_in_file("PeopleController#show.html [ | 1 | 0.29s | 0.29s | 0.00s | 0.29s | 0.29s", @log_file).should_not be_nil
|
35
36
|
end
|
37
|
+
|
38
|
+
it "should allow a custom mail subject" do
|
39
|
+
RequestLogAnalyzer::Controller.build(
|
40
|
+
:mail => 'root@localhost',
|
41
|
+
:mailhost => 'localhost:2525',
|
42
|
+
:mailsubject => 'TESTSUBJECT',
|
43
|
+
:source_files => log_fixture(:rails_1x),
|
44
|
+
:format => RequestLogAnalyzer::FileFormat::Rails,
|
45
|
+
:no_progress => true
|
46
|
+
).run!
|
47
|
+
|
48
|
+
Process.wait # Wait for mailer to complete
|
49
|
+
|
50
|
+
find_string_in_file("Subject: TESTSUBJECT", @log_file).should_not be_nil
|
51
|
+
end
|
36
52
|
|
37
53
|
it "should send html mail" do
|
38
54
|
RequestLogAnalyzer::Controller.build(
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RequestLogAnalyzer::FileFormat::DelayedJob do
|
4
|
+
|
5
|
+
it "should be a valid file format" do
|
6
|
+
RequestLogAnalyzer::FileFormat.load(:delayed_job).should be_valid
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#parse_line' do
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
@file_format = RequestLogAnalyzer::FileFormat.load(:delayed_job2)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should parse a :job_lock line correctly" do
|
16
|
+
line = "2010-05-17T17:37:34+0000: * [Worker(delayed_job host:hostname.co.uk pid:11888)] acquired lock on S3FileJob"
|
17
|
+
@file_format.should parse_line(line).as(:job_lock).and_capture(:timestamp => 20100517173734,
|
18
|
+
:job => 'S3FileJob', :host => 'hostname.co.uk', :pid => 11888)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should parse a :job_completed line correctly" do
|
22
|
+
line = '2010-05-17T17:37:35+0000: * [JOB] delayed_job host:hostname.co.uk pid:11888 completed after 1.0676'
|
23
|
+
@file_format.should parse_line(line).as(:job_completed).and_capture(:timestamp => 20100517173735,
|
24
|
+
:duration => 1.0676, :host => 'hostname.co.uk', :pid => 11888)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#parse_io' do
|
29
|
+
before(:each) do
|
30
|
+
@log_parser = RequestLogAnalyzer::Source::LogParser.new(RequestLogAnalyzer::FileFormat.load(:delayed_job2))
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should parse a batch of completed jobs without warnings" do
|
34
|
+
fragment = <<-EOLOG
|
35
|
+
2010-05-17T17:36:44+0000: *** Starting job worker delayed_job host:hostname.co.uk pid:11888
|
36
|
+
2010-05-17T17:37:34+0000: * [Worker(delayed_job host:hostname.co.uk pid:11888)] acquired lock on S3FileJob
|
37
|
+
2010-05-17T17:37:35+0000: * [JOB] delayed_job host:hostname.co.uk pid:11888 completed after 1.0676
|
38
|
+
2010-05-17T17:37:35+0000: * [Worker(delayed_job host:hostname.co.uk pid:11888)] acquired lock on S3FileJob
|
39
|
+
2010-05-17T17:37:37+0000: * [JOB] delayed_job host:hostname.co.uk pid:11888 completed after 1.4407
|
40
|
+
2010-05-17T17:37:37+0000: * [Worker(delayed_job host:hostname.co.uk pid:11888)] acquired lock on S3FileJob
|
41
|
+
2010-05-17T17:37:44+0000: * [JOB] delayed_job host:hostname.co.uk pid:11888 completed after 6.9374
|
42
|
+
2010-05-17T17:37:44+0000: 3 jobs processed at 0.3163 j/s, 0 failed ...
|
43
|
+
2010-05-19T11:47:26+0000: Exiting...
|
44
|
+
EOLOG
|
45
|
+
|
46
|
+
request_counter.should_receive(:hit!).exactly(3).times
|
47
|
+
@log_parser.should_not_receive(:warn)
|
48
|
+
|
49
|
+
@log_parser.parse_io(StringIO.new(fragment)) do |request|
|
50
|
+
request_counter.hit! if request.kind_of?(RequestLogAnalyzer::FileFormat::DelayedJob2::Request)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -28,7 +28,7 @@ describe RequestLogAnalyzer::FileFormat::DelayedJob do
|
|
28
28
|
:failed_job => 'BackgroundJob::ThumbnailSaver', :exception => 'ActiveRecord::RecordNotFound')
|
29
29
|
end
|
30
30
|
|
31
|
-
it "" do
|
31
|
+
it "should parse a failed job lock line correctly" do
|
32
32
|
line = "* [JOB] failed to acquire exclusive lock for BackgroundJob::ThumbnailSaver"
|
33
33
|
@file_format.should parse_line(line).as(:job_lock_failed).and_capture(:locked_job => 'BackgroundJob::ThumbnailSaver')
|
34
34
|
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe RequestLogAnalyzer::FileFormat::Oink do
|
4
|
+
describe '.create' do
|
5
|
+
|
6
|
+
context 'without providing a lines argument' do
|
7
|
+
before(:each) { @oink = RequestLogAnalyzer::FileFormat.load(:oink) }
|
8
|
+
|
9
|
+
it "should create a valid file format" do
|
10
|
+
@oink.should be_valid
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should parse :memory_usage line" do
|
14
|
+
@oink.line_definitions.should include(:memory_usage)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#parse_line' do
|
22
|
+
before(:each) { @oink = RequestLogAnalyzer::FileFormat.load(:oink, :all) }
|
23
|
+
|
24
|
+
it "should parse a :memory_usage line correctly" do
|
25
|
+
line = 'Jun 18 11:27:36 derek rails[67783]: Memory usage: 714052 | PID: 67783'
|
26
|
+
@oink.should parse_line(line).as(:memory_usage).and_capture(:pid => 67783, :memory => 714052)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should parse the PID from a :processing line correctly" do
|
30
|
+
line = 'Aug 14 21:16:30 derek rails[67783]: Processing PeopleController#index (for 1.1.1.1 at 2008-08-14 21:16:30) [GET]'
|
31
|
+
@oink.should parse_line(line).as(:processing).and_capture(:pid => 67783, :controller => 'PeopleController', :action => 'index', :timestamp => 20080814211630, :method => 'GET', :ip => '1.1.1.1')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#parse_io' do
|
36
|
+
context "Rails 2.2 style log" do
|
37
|
+
before(:each) do
|
38
|
+
@log_parser = RequestLogAnalyzer::Source::LogParser.new(
|
39
|
+
RequestLogAnalyzer::FileFormat.load(:oink), :parse_strategy => 'cautious')
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should parse requests" do
|
43
|
+
request_counter.should_receive(:hit!).exactly(4).times
|
44
|
+
|
45
|
+
@log_parser.parse_file(log_fixture(:oink_22)) do |request|
|
46
|
+
request_counter.hit! if request.kind_of?(RequestLogAnalyzer::FileFormat::Rails::Request) && request.completed?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should not record :memory_diff on first request" do
|
51
|
+
@log_parser.parse_file(log_fixture(:oink_22)) do |request|
|
52
|
+
if @log_parser.parsed_requests == 1
|
53
|
+
request[:memory_diff].should == nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should record :memory_diff of 2nd tracked PID" do
|
59
|
+
@log_parser.parse_file(log_fixture(:oink_22)) do |request|
|
60
|
+
if @log_parser.parsed_requests == 3
|
61
|
+
request[:memory_diff].should == 50000*1024
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should record :memory_diff of 1st tracked PID" do
|
67
|
+
@log_parser.parse_file(log_fixture(:oink_22)) do |request|
|
68
|
+
if @log_parser.parsed_requests == 4
|
69
|
+
request[:memory_diff].should == 30000*1024
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'Rails 2.2 style log w/failure' do
|
76
|
+
before(:each) do
|
77
|
+
@log_parser = RequestLogAnalyzer::Source::LogParser.new(
|
78
|
+
RequestLogAnalyzer::FileFormat.load(:oink), :parse_strategy => 'cautious')
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should parse requests" do
|
82
|
+
request_counter.should_receive(:hit!).exactly(4).times
|
83
|
+
|
84
|
+
@log_parser.parse_file(log_fixture(:oink_22_failure)) do |request|
|
85
|
+
request_counter.hit! if request.kind_of?(RequestLogAnalyzer::FileFormat::Rails::Request) && request.completed?
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should ignore memory changes when a failure occurs" do
|
90
|
+
@log_parser.parse_file(log_fixture(:oink_22_failure)) do |request|
|
91
|
+
if @log_parser.parsed_requests == 4
|
92
|
+
request[:memory_diff].should == nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
data/tasks/github-gem.rake
CHANGED
@@ -127,8 +127,22 @@ module GithubGem
|
|
127
127
|
release_tasks = [:release_checks, :set_version, :build, :github_release, :gemcutter_release]
|
128
128
|
# release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
|
129
129
|
|
130
|
-
desc "Release a new
|
130
|
+
desc "Release a new version of the gem using the VERSION environment variable"
|
131
131
|
task(:release => release_tasks) { release_task }
|
132
|
+
|
133
|
+
namespace(:release) do
|
134
|
+
desc "Release the next version of the gem, by incrementing the last version segment by 1"
|
135
|
+
task(:next => [:next_version] + release_tasks) { release_task }
|
136
|
+
|
137
|
+
desc "Release the next version of the gem, using a bump increment (0.0.1)"
|
138
|
+
task(:bump => [:next_bump_version] + release_tasks) { release_task }
|
139
|
+
|
140
|
+
desc "Release the next version of the gem, using a minor increment (0.1.0)"
|
141
|
+
task(:minor => [:next_minor_version] + release_tasks) { release_task }
|
142
|
+
|
143
|
+
desc "Release the next version of the gem, using a major increment (1.0.0)"
|
144
|
+
task(:major => [:next_major_version] + release_tasks) { release_task }
|
145
|
+
end
|
132
146
|
|
133
147
|
# task(:check_rubyforge) { check_rubyforge_task }
|
134
148
|
# task(:rubyforge_release) { rubyforge_release_task }
|
@@ -137,6 +151,11 @@ module GithubGem
|
|
137
151
|
task(:tag_version) { tag_version_task }
|
138
152
|
task(:commit_modified_files) { commit_modified_files_task }
|
139
153
|
|
154
|
+
task(:next_version) { next_version_task }
|
155
|
+
task(:next_bump_version) { next_version_task(:bump) }
|
156
|
+
task(:next_minor_version) { next_version_task(:minor) }
|
157
|
+
task(:next_major_version) { next_version_task(:major) }
|
158
|
+
|
140
159
|
desc "Updates the gem release tasks with the latest version on Github"
|
141
160
|
task(:update_tasks) { update_tasks_task }
|
142
161
|
end
|
@@ -160,6 +179,32 @@ module GithubGem
|
|
160
179
|
sh "mv #{gemspec.name}-#{gemspec.version}.gem pkg/#{gemspec.name}-#{gemspec.version}.gem"
|
161
180
|
end
|
162
181
|
|
182
|
+
def newest_version
|
183
|
+
git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max || Gem::Version.new('0.0.0')
|
184
|
+
end
|
185
|
+
|
186
|
+
def next_version(increment = nil)
|
187
|
+
next_version = newest_version.segments
|
188
|
+
increment_index = case increment
|
189
|
+
when :micro then 3
|
190
|
+
when :bump then 2
|
191
|
+
when :minor then 1
|
192
|
+
when :major then 0
|
193
|
+
else next_version.length - 1
|
194
|
+
end
|
195
|
+
|
196
|
+
next_version[increment_index] ||= 0
|
197
|
+
next_version[increment_index] = next_version[increment_index].succ
|
198
|
+
((increment_index + 1)...next_version.length).each { |i| next_version[i] = 0 }
|
199
|
+
|
200
|
+
Gem::Version.new(next_version.join('.'))
|
201
|
+
end
|
202
|
+
|
203
|
+
def next_version_task(increment = nil)
|
204
|
+
ENV['VERSION'] = next_version(increment).version
|
205
|
+
puts "Releasing version #{ENV['VERSION']}..."
|
206
|
+
end
|
207
|
+
|
163
208
|
# Updates the version number in the gemspec file, the VERSION constant in the main
|
164
209
|
# include file and the contents of the VERSION file.
|
165
210
|
def version_task
|
@@ -173,9 +218,7 @@ module GithubGem
|
|
173
218
|
def check_version_task
|
174
219
|
raise "#{ENV['VERSION']} is not a valid version number!" if ENV['VERSION'] && !Gem::Version.correct?(ENV['VERSION'])
|
175
220
|
proposed_version = Gem::Version.new(ENV['VERSION'] || gemspec.version)
|
176
|
-
#
|
177
|
-
newest_version = git.tags.map { |tag| tag.name.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max
|
178
|
-
raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version && newest_version >= proposed_version
|
221
|
+
raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version >= proposed_version
|
179
222
|
end
|
180
223
|
|
181
224
|
# Checks whether the current branch is not diverged from the remote branch
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
7
|
+
- 8
|
8
8
|
- 0
|
9
|
-
version: 1.
|
9
|
+
version: 1.8.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Willem van Bergen
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-06-30 00:00:00 +02:00
|
19
19
|
default_executable: request-log-analyzer
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- spec/fixtures/rails.db
|
67
67
|
- lib/request_log_analyzer/file_format/rails_development.rb
|
68
68
|
- spec/fixtures/rails_22.log
|
69
|
+
- spec/unit/file_format/delayed_job2_format_spec.rb
|
69
70
|
- spec/fixtures/test_order.log
|
70
71
|
- spec/fixtures/header_and_footer.log
|
71
72
|
- lib/mixins/gets_memory_protection.rb
|
@@ -86,6 +87,7 @@ files:
|
|
86
87
|
- spec/unit/aggregator/database_inserter_spec.rb
|
87
88
|
- spec/fixtures/decompression.log.bz2
|
88
89
|
- spec/unit/database/connection_spec.rb
|
90
|
+
- spec/fixtures/oink_22.log
|
89
91
|
- spec/fixtures/sinatra.log
|
90
92
|
- lib/request_log_analyzer/database/warning.rb
|
91
93
|
- spec/fixtures/merb_prefixed.log
|
@@ -97,6 +99,7 @@ files:
|
|
97
99
|
- lib/request_log_analyzer/filter/field.rb
|
98
100
|
- lib/request_log_analyzer/file_format/delayed_job.rb
|
99
101
|
- lib/request_log_analyzer/file_format/merb.rb
|
102
|
+
- lib/request_log_analyzer/file_format/oink.rb
|
100
103
|
- lib/request_log_analyzer/filter/anonymize.rb
|
101
104
|
- lib/request_log_analyzer/file_format/amazon_s3.rb
|
102
105
|
- LICENSE
|
@@ -110,8 +113,8 @@ files:
|
|
110
113
|
- spec/fixtures/postgresql.log
|
111
114
|
- spec/lib/mocks.rb
|
112
115
|
- lib/request_log_analyzer/tracker/hourly_spread.rb
|
113
|
-
- spec/fixtures/syslog_1x.log
|
114
116
|
- spec/unit/file_format/rails3_format_spec.rb
|
117
|
+
- spec/fixtures/syslog_1x.log
|
115
118
|
- lib/request_log_analyzer/source.rb
|
116
119
|
- lib/request_log_analyzer/file_format/rails3.rb
|
117
120
|
- spec/unit/controller/log_processor_spec.rb
|
@@ -150,13 +153,15 @@ files:
|
|
150
153
|
- spec/unit/tracker/duration_tracker_spec.rb
|
151
154
|
- spec/fixtures/test_file_format.log
|
152
155
|
- lib/request_log_analyzer/aggregator/summarizer.rb
|
156
|
+
- spec/fixtures/oink_22_failure.log
|
153
157
|
- spec/unit/filter/timespan_filter_spec.rb
|
154
158
|
- spec/unit/file_format/common_regular_expressions_spec.rb
|
155
159
|
- spec/unit/file_format/merb_format_spec.rb
|
156
160
|
- spec/unit/file_format/file_format_api_spec.rb
|
157
|
-
- lib/request_log_analyzer/file_format/
|
161
|
+
- lib/request_log_analyzer/file_format/delayed_job2.rb
|
158
162
|
- spec/unit/file_format/rack_format_spec.rb
|
159
163
|
- spec/unit/file_format/mysql_format_spec.rb
|
164
|
+
- lib/request_log_analyzer/file_format/mysql.rb
|
160
165
|
- spec/fixtures/decompression.log.gz
|
161
166
|
- lib/request_log_analyzer/tracker/frequency.rb
|
162
167
|
- request-log-analyzer.gemspec
|
@@ -176,6 +181,7 @@ files:
|
|
176
181
|
- lib/request_log_analyzer/controller.rb
|
177
182
|
- spec/unit/tracker/tracker_api_spec.rb
|
178
183
|
- lib/request_log_analyzer/request.rb
|
184
|
+
- spec/unit/file_format/oink_format_spec.rb
|
179
185
|
- spec/fixtures/multiple_files_2.log
|
180
186
|
- spec/unit/database/database_spec.rb
|
181
187
|
- spec/fixtures/decompression.log.zip
|
@@ -225,6 +231,7 @@ summary: A command line tool to analyze request logs for Apache, Rails, Merb, My
|
|
225
231
|
test_files:
|
226
232
|
- spec/unit/file_format/delayed_job_format_spec.rb
|
227
233
|
- spec/unit/filter/anonymize_filter_spec.rb
|
234
|
+
- spec/unit/file_format/delayed_job2_format_spec.rb
|
228
235
|
- spec/unit/file_format/line_definition_spec.rb
|
229
236
|
- spec/unit/request_spec.rb
|
230
237
|
- spec/unit/filter/filter_spec.rb
|
@@ -258,6 +265,7 @@ test_files:
|
|
258
265
|
- spec/unit/controller/controller_spec.rb
|
259
266
|
- spec/unit/tracker/timespan_tracker_spec.rb
|
260
267
|
- spec/unit/tracker/tracker_api_spec.rb
|
268
|
+
- spec/unit/file_format/oink_format_spec.rb
|
261
269
|
- spec/unit/database/database_spec.rb
|
262
270
|
- spec/integration/munin_plugins_rails_spec.rb
|
263
271
|
- spec/unit/file_format/apache_format_spec.rb
|