request-log-analyzer 1.3.5 → 1.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. data/lib/cli/database_console_init.rb +2 -1
  2. data/lib/request_log_analyzer.rb +1 -1
  3. data/lib/request_log_analyzer/aggregator.rb +1 -5
  4. data/lib/request_log_analyzer/aggregator/database_inserter.rb +4 -5
  5. data/lib/request_log_analyzer/controller.rb +10 -21
  6. data/lib/request_log_analyzer/database.rb +16 -91
  7. data/lib/request_log_analyzer/database/base.rb +4 -4
  8. data/lib/request_log_analyzer/database/request.rb +22 -0
  9. data/lib/request_log_analyzer/database/source.rb +13 -0
  10. data/lib/request_log_analyzer/database/warning.rb +14 -0
  11. data/lib/request_log_analyzer/file_format.rb +1 -13
  12. data/lib/request_log_analyzer/file_format/amazon_s3.rb +1 -2
  13. data/lib/request_log_analyzer/file_format/apache.rb +8 -10
  14. data/lib/request_log_analyzer/file_format/merb.rb +21 -5
  15. data/lib/request_log_analyzer/file_format/rails.rb +8 -14
  16. data/lib/request_log_analyzer/filter.rb +6 -10
  17. data/lib/request_log_analyzer/filter/anonymize.rb +2 -1
  18. data/lib/request_log_analyzer/log_processor.rb +6 -8
  19. data/lib/request_log_analyzer/request.rb +47 -35
  20. data/lib/request_log_analyzer/source.rb +4 -6
  21. data/lib/request_log_analyzer/source/database_loader.rb +3 -7
  22. data/lib/request_log_analyzer/source/log_parser.rb +3 -6
  23. data/lib/request_log_analyzer/tracker.rb +12 -19
  24. data/lib/request_log_analyzer/tracker/hourly_spread.rb +1 -2
  25. data/request-log-analyzer.gemspec +3 -3
  26. data/spec/database.yml +6 -0
  27. data/spec/unit/aggregator/database_inserter_spec.rb +3 -3
  28. data/spec/unit/database/base_class_spec.rb +9 -16
  29. data/spec/unit/database/database_spec.rb +9 -14
  30. data/spec/unit/tracker/tracker_api_spec.rb +111 -36
  31. metadata +7 -4
@@ -5,11 +5,11 @@ module RequestLogAnalyzer::FileFormat
5
5
  # Processing EmployeeController#index (for 123.123.123.123 at 2008-07-13 06:00:00) [GET]
6
6
  line_definition :processing do |line|
7
7
  line.header = true # this line is the first log line for a request
8
- line.teaser = /Processing /
8
+ # line.teaser = /Processing /
9
9
  line.regexp = /Processing ((?:\w+::)?\w+)#(\w+)(?: to (\w+))? \(for (\d+\.\d+\.\d+\.\d+) at (\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)\) \[([A-Z]+)\]/
10
10
  line.captures << { :name => :controller, :type => :string } \
11
11
  << { :name => :action, :type => :string } \
12
- << { :name => :format, :type => :format } \
12
+ << { :name => :format, :type => :string, :default => 'html' } \
13
13
  << { :name => :ip, :type => :string } \
14
14
  << { :name => :timestamp, :type => :timestamp } \
15
15
  << { :name => :method, :type => :string }
@@ -46,7 +46,7 @@ module RequestLogAnalyzer::FileFormat
46
46
  line_definition :completed do |line|
47
47
 
48
48
  line.footer = true
49
- line.teaser = /Completed in /
49
+ # line.teaser = /Completed in /
50
50
  line.regexp = Regexp.new("(?:#{RAILS_21_COMPLETED}|#{RAILS_22_COMPLETED})")
51
51
 
52
52
  line.captures << { :name => :duration, :type => :duration, :unit => :sec } \
@@ -62,15 +62,15 @@ module RequestLogAnalyzer::FileFormat
62
62
  << { :name => :url, :type => :string } # 2.2 variant
63
63
  end
64
64
 
65
-
66
-
67
65
  REQUEST_CATEGORIZER = Proc.new do |request|
68
66
  "#{request[:controller]}##{request[:action]}.#{request[:format]} [#{request[:method]}]"
69
67
  end
70
68
 
71
69
  report do |analyze|
72
- analyze.timespan :line_type => :processing
73
- analyze.frequency :category => REQUEST_CATEGORIZER, :title => 'Top 20 hits', :amount => 20, :line_type => :processing
70
+ analyze.timespan
71
+ analyze.hourly_spread
72
+
73
+ analyze.frequency :category => REQUEST_CATEGORIZER, :title => 'Top 20 hits', :amount => 20
74
74
  analyze.frequency :method, :title => 'HTTP methods'
75
75
  analyze.frequency :status, :title => 'HTTP statuses returned'
76
76
  analyze.frequency :category => lambda { |request| request =~ :cache_hit ? 'Cache hit' : 'No hit' }, :title => 'Rails action cache hits'
@@ -82,23 +82,17 @@ module RequestLogAnalyzer::FileFormat
82
82
  analyze.frequency :category => REQUEST_CATEGORIZER, :title => 'Process blockers (> 1 sec duration)',
83
83
  :if => lambda { |request| request[:duration] && request[:duration] > 1.0 }, :amount => 20
84
84
 
85
- analyze.hourly_spread :line_type => :processing
86
85
  analyze.frequency :error, :title => 'Failed requests', :line_type => :failed, :amount => 20
87
86
  end
88
87
 
89
88
  # Define a custom Request class for the Rails file format to speed up timestamp handling
90
89
  # and to ensure that a format is always set.
91
90
  class Request < RequestLogAnalyzer::Request
92
-
91
+
93
92
  # Do not use DateTime.parse
94
93
  def convert_timestamp(value, definition)
95
94
  value.gsub(/[^0-9]/, '')[0...14].to_i unless value.nil?
96
95
  end
97
-
98
- # Set 'html' as default format for a request
99
- def convert_format(value, definition)
100
- value || 'html'
101
- end
102
96
  end
103
97
 
104
98
  end
@@ -7,28 +7,24 @@ module RequestLogAnalyzer::Filter
7
7
  end
8
8
 
9
9
  # Base filter class used to filter input requests.
10
- # All filters should interit from this base.
10
+ # All filters should interit from this base.
11
11
  class Base
12
12
 
13
- include RequestLogAnalyzer::FileFormat::Awareness
14
-
15
- attr_reader :log_parser
16
- attr_reader :options
13
+ attr_reader :file_format, :options
17
14
 
18
15
  # Initializer
19
16
  # <tt>format</tt> The file format
20
17
  # <tt>options</tt> Are passed to the filters.
21
18
  def initialize(format, options = {})
22
- @options = options
23
- register_file_format(format)
19
+ @file_format = format
20
+ @options = options
24
21
  end
25
22
 
26
23
  # Return the request if the request should be kept.
27
24
  # Return nil otherwise.
28
25
  def filter(request)
29
- return nil unless request
30
- return request
31
- end
26
+ request
27
+ end
32
28
  end
33
29
 
34
30
  end
@@ -19,7 +19,8 @@ module RequestLogAnalyzer::Filter
19
19
  value * ((75 + rand(50)) / 100.0)
20
20
  end
21
21
 
22
- def filter(request)
22
+ def filter(request)
23
+ # TODO: request.attributes is bad practice
23
24
  request.attributes.each do |key, value|
24
25
  if key == :ip
25
26
  request.attributes[key] = generate_random_ip
@@ -12,11 +12,9 @@ module RequestLogAnalyzer
12
12
  #
13
13
  class LogProcessor
14
14
 
15
- include RequestLogAnalyzer::FileFormat::Awareness
16
-
17
- attr_reader :mode, :options, :sources
15
+ attr_reader :mode, :options, :sources, :file_format
18
16
  attr_accessor :output_file
19
-
17
+
20
18
  # Builds a logprocessor instance from the arguments given on the command line
21
19
  # <tt>command</tt> The command hat was used to start the log processor. This will set the
22
20
  # processing mode. Currently, only :strip is supported.
@@ -43,11 +41,11 @@ module RequestLogAnalyzer
43
41
  # <tt>mode</tt> The processing mode
44
42
  # <tt>options</tt> A hash with options to take into account
45
43
  def initialize(format, mode, options = {})
46
- @options = options
47
- @mode = mode
48
- @sources = []
44
+ @options = options
45
+ @mode = mode
46
+ @sources = []
47
+ @file_format = format
49
48
  $output_file = nil
50
- self.register_file_format(format)
51
49
  end
52
50
 
53
51
  # Processes input files by opening it and sending the filestream to <code>process_io</code>,
@@ -9,73 +9,80 @@ module RequestLogAnalyzer
9
9
  # Request#every(field_name) returns all values corresponding to the given field name as array.
10
10
  class Request
11
11
 
12
+ def self.inherited(klass)
13
+ # klass.send(:include, Converters)
14
+ end
15
+
12
16
  module Converters
13
-
17
+
18
+ # Default converter function, which converts the parsed strings to a native Ruby type
19
+ # using the type indication in the line definition. It will use a custom connverter
20
+ # method if one is available.
14
21
  def convert_value(value, capture_definition)
15
- custom_converter_method = "convert_#{capture_definition[:type]}".to_sym
16
- if respond_to?(custom_converter_method)
17
- send(custom_converter_method, value, capture_definition)
18
- elsif !value.nil?
19
- case capture_definition[:type]
20
- when :decimal; value.to_f
21
- when :float; value.to_f
22
- when :double; value.to_f
23
- when :integer; value.to_i
24
- when :int; value.to_i
25
- when :symbol; value.to_sym
26
- else; value.to_s
27
- end
28
- else
29
- nil
30
- end
22
+ return capture_definition[:default] if value.nil?
23
+ custom_converter_method = :"convert_#{capture_definition[:type]}"
24
+ send(custom_converter_method, value, capture_definition)
31
25
  end
32
26
 
27
+ def convert_string(value, capture_definition); value; end
28
+ def convert_decimal(value, capture_definition); value.to_f; end
29
+ def convert_float(value, capture_definition); value.to_f; end
30
+ def convert_decimal(value, capture_definition); value.to_f; end
31
+ def convert_int(value, capture_definition); value.to_i; end
32
+ def convert_integer(value, capture_definition); value.to_i; end
33
+ def convert_sym(value, capture_definition); value.to_sym; end
34
+ def convert_symbol(value, capture_definition); value.to_sym; end
35
+
36
+ # Converts :eval field, which should evaluate to a hash.
33
37
  def convert_eval(value, capture_definition)
34
38
  eval(value).inject({}) { |h, (k, v)| h[k.to_sym] = v; h}
35
39
  rescue SyntaxError
36
40
  nil
37
41
  end
38
42
 
39
- # Slow default method to parse timestamps
43
+ # Slow default method to parse timestamps.
44
+ # Reimplement this function in a file format specific Request class
45
+ # to improve the timestamp parsing speed.
40
46
  def convert_timestamp(value, capture_definition)
41
- DateTime.parse(value).strftime('%Y%m%d%H%M%S').to_i unless value.nil?
47
+ DateTime.parse(value).strftime('%Y%m%d%H%M%S').to_i
42
48
  end
43
49
 
50
+ # Converts traffic fields to (whole) bytes based on the given unit.
44
51
  def convert_traffic(value, capture_definition)
45
- return nil if value.nil?
46
52
  case capture_definition[:unit]
53
+ when nil, :b, :B, :byte then value.to_i
47
54
  when :GB, :G, :gigabyte then (value.to_f * 1000_000_000).round
48
55
  when :GiB, :gibibyte then (value.to_f * (2 ** 30)).round
49
56
  when :MB, :M, :megabyte then (value.to_f * 1000_000).round
50
57
  when :MiB, :mebibyte then (value.to_f * (2 ** 20)).round
51
58
  when :KB, :K, :kilobyte, :kB then (value.to_f * 1000).round
52
59
  when :KiB, :kibibyte then (value.to_f * (2 ** 10)).round
53
- else value.to_i
60
+ else raise "Unknown traffic unit"
54
61
  end
55
62
  end
56
63
 
64
+ # Convert duration fields to float, and make sure the values are in seconds.
57
65
  def convert_duration(value, capture_definition)
58
- return nil if value.nil?
59
66
  case capture_definition[:unit]
67
+ when nil, :sec, :s then value.to_f
60
68
  when :microsec, :musec then value.to_f / 1000000.0
61
69
  when :msec, :millisec then value.to_f / 1000.0
62
- else value.to_f
70
+ else raise "Unknown duration unit"
63
71
  end
64
72
  end
65
73
  end
66
-
67
- include RequestLogAnalyzer::FileFormat::Awareness
74
+
75
+ # Install the default converter methods
68
76
  include Converters
69
-
70
- attr_reader :lines
71
- attr_reader :attributes
77
+
78
+ attr_reader :lines, :attributes, :file_format
72
79
 
73
80
  # Initializes a new Request object.
74
81
  # It will apply the the provided FileFormat module to this instance.
75
82
  def initialize(file_format, attributes = {})
76
- @lines = []
77
- @attributes = attributes
78
- register_file_format(file_format)
83
+ @lines = []
84
+ @attributes = attributes
85
+ @file_format = file_format
79
86
  end
80
87
 
81
88
  # Creates a new request that was parsed from the log with the given FileFormat. The hashes
@@ -86,8 +93,10 @@ module RequestLogAnalyzer
86
93
  return request
87
94
  end
88
95
 
89
- # Adds another line to the request.
90
- # The line should be provides as a hash of the fields parsed from the line.
96
+ # Adds another line to the request when it is parsed in the LogParser.
97
+ #
98
+ # The line should be provided as a hash with the attributes line_definition, :captures,
99
+ # :lineno and :source set. This function is called from LogParser.
91
100
  def add_parsed_line (parsed_line)
92
101
  value_hash = parsed_line[:line_definition].convert_captured_values(parsed_line[:captures], self)
93
102
  value_hash[:line_type] = parsed_line[:line_definition].name
@@ -96,12 +105,16 @@ module RequestLogAnalyzer
96
105
  add_line_hash(value_hash)
97
106
  end
98
107
 
108
+ # Adds another line to the request using a plain hash.
109
+ #
110
+ # The line should be provides as a hash of the fields parsed from the line.
99
111
  def add_line_hash(value_hash)
100
112
  @lines << value_hash
101
113
  @attributes = value_hash.merge(@attributes)
102
114
  end
103
115
 
104
-
116
+ # Adds another line to the request. This method switches automatically between
117
+ # the add_line_hash and add_parsed_line based on the keys of the provided hash.
105
118
  def <<(hash)
106
119
  hash[:line_definition] ? add_parsed_line(hash) : add_line_hash(hash)
107
120
  end
@@ -109,7 +122,6 @@ module RequestLogAnalyzer
109
122
  # Checks whether the given line type was parsed from the log file for this request
110
123
  def has_line_type?(line_type)
111
124
  return true if @lines.length == 1 && @lines[0][:line_type] == line_type.to_sym
112
-
113
125
  @lines.detect { |l| l[:line_type] == line_type.to_sym }
114
126
  end
115
127
 
@@ -21,9 +21,6 @@ module RequestLogAnalyzer::Source
21
21
  # RequestLogAnalyzer::Request instances that will be fed through the pipleine.
22
22
  class Base
23
23
 
24
- # Make the Spurce instance aware of the current file format
25
- include RequestLogAnalyzer::FileFormat::Awareness
26
-
27
24
  # A hash of options
28
25
  attr_reader :options
29
26
 
@@ -42,14 +39,15 @@ module RequestLogAnalyzer::Source
42
39
  # The total number of skipped requests because of filters.
43
40
  attr_reader :skipped_requests
44
41
 
45
-
42
+ # The FileFormat instance that describes the format of this source.
43
+ attr_reader :file_format
46
44
 
47
45
  # Initializer, which will register the file format and save any options given as a hash.
48
46
  # <tt>format</tt>:: The file format instance
49
47
  # <tt>options</tt>:: A hash of options that can be used by a specific Source implementation
50
48
  def initialize(format, options = {})
51
- @options = options
52
- register_file_format(format)
49
+ @options = options
50
+ @file_format = format
53
51
  end
54
52
 
55
53
  # The prepare method is called before the RequestLogAnalyzer::Source::Base#each_request method is called.
@@ -26,8 +26,7 @@ module RequestLogAnalyzer::Source
26
26
  # The Database class gets log data from the database.
27
27
  class DatabaseLoader < Base
28
28
 
29
- attr_reader :source_files
30
- attr_reader :requests
29
+ attr_reader :source_files, :file_format, :requests
31
30
 
32
31
  # Initializes the log file parser instance.
33
32
  # It will apply the language specific FileFormat module to this instance. It will use the line
@@ -35,14 +34,11 @@ module RequestLogAnalyzer::Source
35
34
  #
36
35
  # <tt>format</tt>:: The current file format instance
37
36
  # <tt>options</tt>:: A hash of options that are used by the parser
38
- def initialize(format, options = {})
39
- @line_definitions = {}
40
- @options = options
37
+ def initialize(format, options = {})
38
+ super(format, options)
41
39
  @source_files = options[:source_files]
42
40
  @parsed_requests = 0
43
41
  @requests = []
44
-
45
- self.register_file_format(format)
46
42
  end
47
43
 
48
44
  # Reads the input, which can either be a file, sequence of files or STDIN to parse
@@ -27,9 +27,8 @@ module RequestLogAnalyzer::Source
27
27
  #
28
28
  # <tt>format</tt>:: The current file format instance
29
29
  # <tt>options</tt>:: A hash of options that are used by the parser
30
- def initialize(format, options = {})
31
- @line_definitions = {}
32
- @options = options
30
+ def initialize(format, options = {})
31
+ super(format, options)
33
32
  @parsed_lines = 0
34
33
  @parsed_requests = 0
35
34
  @skipped_lines = 0
@@ -40,8 +39,6 @@ module RequestLogAnalyzer::Source
40
39
 
41
40
  @options[:parse_strategy] ||= DEFAULT_PARSE_STRATEGY
42
41
  raise "Unknown parse strategy" unless PARSE_STRATEGIES.include?(@options[:parse_strategy])
43
-
44
- self.register_file_format(format)
45
42
  end
46
43
 
47
44
  # Reads the input, which can either be a file, sequence of files or STDIN to parse
@@ -137,7 +134,7 @@ module RequestLogAnalyzer::Source
137
134
  def parse_io(io, options = {}, &block) # :yields: request
138
135
  @current_lineno = 1
139
136
  while line = io.gets
140
- @progress_handler.call(:progress, io.pos) if @progress_handler && @current_lineno % 127 == 0
137
+ @progress_handler.call(:progress, io.pos) if @progress_handler && (@current_lineno & 255 == 0)
141
138
 
142
139
  if request_data = file_format.parse_line(line) { |wt, message| warn(wt, message) }
143
140
  @parsed_lines += 1
@@ -29,6 +29,17 @@ module RequestLogAnalyzer::Tracker
29
29
  # * <tt>:line_type</tt> Line type this tracker will accept.
30
30
  def initialize(options ={})
31
31
  @options = options
32
+ setup_should_update_checks!
33
+ end
34
+
35
+ # Sets up the tracker's should_update? checks.
36
+ def setup_should_update_checks!
37
+ @should_update_checks = []
38
+ @should_update_checks.push( lambda { |request| request.has_line_type?(options[:line_type]) } ) if options[:line_type]
39
+ @should_update_checks.push(options[:if]) if options[:if].respond_to?(:call)
40
+ @should_update_checks.push( lambda { |request| request[options[:if]] }) if options[:if].kind_of?(Symbol)
41
+ @should_update_checks.push( lambda { |request| !options[:unless].call(request) }) if options[:unless].respond_to?(:call)
42
+ @should_update_checks.push( lambda { |request| !request[options[:unless]] }) if options[:unless].kind_of?(Symbol)
32
43
  end
33
44
 
34
45
  # Hook things that need to be done before running here.
@@ -55,25 +66,7 @@ module RequestLogAnalyzer::Tracker
55
66
  #
56
67
  # <tt>request</tt> The request object.
57
68
  def should_update?(request)
58
- return false if options[:line_type] && !request.has_line_type?(options[:line_type])
59
-
60
- if options[:if]
61
- if options[:if].kind_of?(Symbol)
62
- return false unless request[options[:if]]
63
- elsif options[:if].respond_to?(:call)
64
- return false unless options[:if].call(request)
65
- end
66
- end
67
-
68
- if options[:unless]
69
- if options[:unless].kind_of?(Symbol)
70
- return false if request[options[:unless]]
71
- elsif options[:unless].respond_to?(:call)
72
- return false if options[:unless].call(request)
73
- end
74
- end
75
-
76
- return true
69
+ @should_update_checks.all? { |c| c.call(request) }
77
70
  end
78
71
 
79
72
  # Hook report generation here.
@@ -41,8 +41,7 @@ module RequestLogAnalyzer::Tracker
41
41
  # Check if the timestamp in the request and store it.
42
42
  # <tt>request</tt> The request.
43
43
  def update(request)
44
- request = request.attributes
45
- timestamp = request[options[:field]]
44
+ timestamp = request.first(options[:field])
46
45
 
47
46
  @request_time_graph[timestamp.to_s[8..9].to_i] +=1
48
47
  @first = timestamp if @first.nil? || timestamp < @first
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "request-log-analyzer"
3
- s.version = "1.3.5"
4
- s.date = "2009-09-16"
3
+ s.version = "1.3.6"
4
+ s.date = "2009-09-20"
5
5
 
6
6
  s.rubyforge_project = 'r-l-a'
7
7
 
@@ -31,6 +31,6 @@ Gem::Specification.new do |s|
31
31
  s.email = ['willem@railsdoctors.com', 'bart@railsdoctors.com']
32
32
  s.homepage = 'http://railsdoctors.com'
33
33
 
34
- s.files = %w(spec/unit/filter/anonymize_filter_spec.rb lib/request_log_analyzer/line_definition.rb lib/request_log_analyzer/output/html.rb lib/request_log_analyzer/controller.rb spec/fixtures/rails_22_cached.log spec/lib/macros.rb lib/request_log_analyzer/file_format/rails_development.rb spec/fixtures/apache_combined.log spec/fixtures/apache_common.log spec/fixtures/merb_prefixed.log lib/request_log_analyzer/file_format/amazon_s3.rb tasks/request_log_analyzer.rake spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/apache_format_spec.rb spec/integration/command_line_usage_spec.rb lib/request_log_analyzer/database.rb spec/fixtures/decompression.log.bz2 spec/fixtures/rails_unordered.log lib/request_log_analyzer/log_processor.rb lib/request_log_analyzer/tracker.rb lib/request_log_analyzer/filter.rb bin/request-log-analyzer request-log-analyzer.gemspec DESIGN.rdoc spec/unit/filter/timespan_filter_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/lib/matchers.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/tracker/frequency.rb spec/fixtures/decompression.log.gz spec/fixtures/decompression.log spec/lib/testing_format.rb spec/fixtures/test_order.log spec/fixtures/rails.db lib/request_log_analyzer/output/fixed_width.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/tracker/timespan.rb lib/request_log_analyzer/database/base.rb lib/request_log_analyzer/aggregator.rb lib/cli/progressbar.rb lib/request_log_analyzer/mailer.rb README.rdoc spec/fixtures/merb.log lib/request_log_analyzer/tracker/hourly_spread.rb .gitignore spec/unit/tracker/tracker_api_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb lib/request_log_analyzer/aggregator/echo.rb spec/unit/controller/log_processor_spec.rb spec/spec_helper.rb lib/request_log_analyzer.rb spec/database.yml Rakefile lib/request_log_analyzer/database/connection.rb spec/unit/filter/filter_spec.rb spec/fixtures/test_language_combined.log lib/request_log_analyzer/aggregator/database_inserter.rb lib/request_log_analyzer/aggregator/summarizer.rb lib/request_log_analyzer/file_format/rack.rb lib/request_log_analyzer/file_format/rails.rb spec/fixtures/decompression.tar.gz spec/unit/tracker/traffic_tracker_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/database/base_class_spec.rb lib/request_log_analyzer/filter/timespan.rb lib/request_log_analyzer/source/log_parser.rb spec/fixtures/decompression.tgz spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/fixtures/header_and_footer.log lib/cli/tools.rb lib/request_log_analyzer/file_format/merb.rb spec/fixtures/multiple_files_1.log spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/line_definition_spec.rb lib/request_log_analyzer/source.rb lib/request_log_analyzer/request.rb lib/cli/database_console.rb spec/unit/database/connection_spec.rb spec/unit/controller/controller_spec.rb spec/lib/mocks.rb spec/lib/helpers.rb lib/cli/database_console_init.rb lib/request_log_analyzer/output.rb lib/request_log_analyzer/file_format/apache.rb spec/fixtures/rails_1x.log spec/fixtures/decompression.log.zip spec/unit/source/request_spec.rb spec/unit/source/log_parser_spec.rb spec/fixtures/test_file_format.log tasks/github-gem.rake spec/unit/database/database_spec.rb lib/request_log_analyzer/tracker/duration.rb lib/request_log_analyzer/tracker/traffic.rb lib/request_log_analyzer/file_format.rb spec/unit/aggregator/summarizer_spec.rb spec/fixtures/syslog_1x.log spec/fixtures/rails_22.log spec/fixtures/multiple_files_2.log LICENSE lib/request_log_analyzer/source/database_loader.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/file_format/rails_format_spec.rb lib/cli/command_line_arguments.rb)
34
+ s.files = %w(spec/unit/filter/anonymize_filter_spec.rb spec/fixtures/rails_22_cached.log lib/request_log_analyzer/line_definition.rb lib/request_log_analyzer/output/html.rb lib/request_log_analyzer/controller.rb spec/lib/macros.rb lib/request_log_analyzer/file_format/rails_development.rb spec/fixtures/apache_combined.log spec/fixtures/apache_common.log spec/fixtures/merb_prefixed.log lib/request_log_analyzer/file_format/amazon_s3.rb tasks/request_log_analyzer.rake spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/apache_format_spec.rb spec/integration/command_line_usage_spec.rb lib/request_log_analyzer/database.rb spec/fixtures/decompression.log.bz2 spec/fixtures/rails_unordered.log lib/request_log_analyzer/log_processor.rb lib/request_log_analyzer/tracker.rb lib/request_log_analyzer/filter.rb bin/request-log-analyzer request-log-analyzer.gemspec DESIGN.rdoc spec/unit/filter/timespan_filter_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/lib/matchers.rb lib/request_log_analyzer/filter/field.rb lib/request_log_analyzer/tracker/frequency.rb spec/fixtures/decompression.log.gz spec/fixtures/decompression.log spec/lib/testing_format.rb spec/fixtures/test_order.log spec/fixtures/rails.db lib/request_log_analyzer/output/fixed_width.rb lib/request_log_analyzer/filter/anonymize.rb lib/request_log_analyzer/tracker/timespan.rb lib/request_log_analyzer/database/base.rb lib/request_log_analyzer/aggregator.rb lib/cli/progressbar.rb lib/request_log_analyzer/mailer.rb README.rdoc lib/request_log_analyzer/database/warning.rb spec/fixtures/merb.log lib/request_log_analyzer/tracker/hourly_spread.rb .gitignore spec/unit/tracker/tracker_api_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb lib/request_log_analyzer/aggregator/echo.rb spec/unit/controller/log_processor_spec.rb spec/spec_helper.rb lib/request_log_analyzer.rb spec/database.yml Rakefile lib/request_log_analyzer/database/connection.rb spec/unit/filter/filter_spec.rb spec/fixtures/test_language_combined.log lib/request_log_analyzer/aggregator/database_inserter.rb lib/request_log_analyzer/aggregator/summarizer.rb lib/request_log_analyzer/file_format/rack.rb lib/request_log_analyzer/database/source.rb lib/request_log_analyzer/file_format/rails.rb spec/fixtures/decompression.tar.gz spec/unit/tracker/traffic_tracker_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/database/base_class_spec.rb lib/request_log_analyzer/filter/timespan.rb lib/request_log_analyzer/source/log_parser.rb spec/fixtures/decompression.tgz spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/fixtures/header_and_footer.log lib/cli/tools.rb lib/request_log_analyzer/file_format/merb.rb spec/fixtures/multiple_files_1.log spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/line_definition_spec.rb lib/request_log_analyzer/source.rb lib/request_log_analyzer/request.rb lib/cli/database_console.rb spec/unit/database/connection_spec.rb spec/unit/controller/controller_spec.rb spec/lib/mocks.rb spec/lib/helpers.rb spec/fixtures/rails_1x.log lib/cli/database_console_init.rb lib/request_log_analyzer/output.rb lib/request_log_analyzer/file_format/apache.rb spec/fixtures/decompression.log.zip spec/unit/source/request_spec.rb spec/unit/source/log_parser_spec.rb spec/fixtures/test_file_format.log tasks/github-gem.rake spec/unit/database/database_spec.rb lib/request_log_analyzer/tracker/duration.rb lib/request_log_analyzer/tracker/traffic.rb lib/request_log_analyzer/file_format.rb spec/unit/aggregator/summarizer_spec.rb spec/fixtures/syslog_1x.log spec/fixtures/rails_22.log lib/request_log_analyzer/database/request.rb spec/fixtures/multiple_files_2.log LICENSE lib/request_log_analyzer/source/database_loader.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/file_format/rails_format_spec.rb lib/cli/command_line_arguments.rb)
35
35
  s.test_files = %w(spec/unit/filter/anonymize_filter_spec.rb spec/unit/file_format/file_format_api_spec.rb spec/unit/file_format/apache_format_spec.rb spec/integration/command_line_usage_spec.rb spec/unit/filter/timespan_filter_spec.rb spec/unit/aggregator/database_inserter_spec.rb spec/unit/tracker/tracker_api_spec.rb spec/unit/tracker/duration_tracker_spec.rb spec/unit/file_format/amazon_s3_format_spec.rb spec/unit/controller/log_processor_spec.rb spec/unit/filter/filter_spec.rb spec/unit/tracker/traffic_tracker_spec.rb spec/unit/filter/field_filter_spec.rb spec/unit/database/base_class_spec.rb spec/unit/tracker/timespan_tracker_spec.rb spec/unit/tracker/hourly_spread_spec.rb spec/unit/file_format/merb_format_spec.rb spec/unit/file_format/line_definition_spec.rb spec/unit/database/connection_spec.rb spec/unit/controller/controller_spec.rb spec/unit/source/request_spec.rb spec/unit/source/log_parser_spec.rb spec/unit/database/database_spec.rb spec/unit/aggregator/summarizer_spec.rb spec/unit/tracker/frequency_tracker_spec.rb spec/unit/file_format/rails_format_spec.rb)
36
36
  end