wvanbergen-request-log-analyzer 1.3.1 → 1.3.2

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.
@@ -51,6 +51,7 @@ begin
51
51
  command_line.option(:report_width, :default => terminal_width - 1)
52
52
 
53
53
  command_line.switch(:debug)
54
+ command_line.switch(:no_progress)
54
55
 
55
56
  command_line.minimum_parameters = 1
56
57
  end
@@ -35,10 +35,11 @@ module RequestLogAnalyzer
35
35
  # Database command line options
36
36
  options[:database] = arguments[:database] if arguments[:database]
37
37
  options[:reset_database] = arguments[:reset_database]
38
-
39
38
  options[:debug] = arguments[:debug]
40
39
  options[:dump] = arguments[:dump]
41
-
40
+ options[:parse_strategy] = arguments[:parse_strategy]
41
+ options[:no_progress] = arguments[:no_progress]
42
+
42
43
  output_class = RequestLogAnalyzer::Output::const_get(arguments[:output])
43
44
  if arguments[:file]
44
45
  output_file = File.new(arguments[:file], "w+")
@@ -75,10 +76,8 @@ module RequestLogAnalyzer
75
76
 
76
77
  controller = Controller.new(RequestLogAnalyzer::Source::LogParser.new(file_format, options), options)
77
78
  #controller = Controller.new(RequestLogAnalyzer::Source::DatabaseLoader.new(file_format, options), options)
78
-
79
- options[:parse_strategy] = arguments[:parse_strategy]
80
79
 
81
- # register filters
80
+ # register filters
82
81
  if arguments[:after] || arguments[:before]
83
82
  filter_options = {}
84
83
  filter_options[:after] = DateTime.parse(arguments[:after])
@@ -133,8 +132,9 @@ module RequestLogAnalyzer
133
132
  @source.warning = lambda { |type, message, lineno| @aggregators.each { |agg| agg.warning(type, message, lineno) } } if @source
134
133
 
135
134
  # Handle progress messagess
136
- @source.progress = lambda { |message, value| handle_progress(message, value) } if @source
135
+ @source.progress = lambda { |message, value| handle_progress(message, value) } if @source && !options[:no_progress]
137
136
 
137
+ # Handle source change messages
138
138
  @source.source_changes = lambda { |change, filename| handle_source_change(change, filename) } if @source
139
139
  end
140
140
 
@@ -51,7 +51,7 @@ module RequestLogAnalyzer::Source
51
51
  def each_request(options = {}, &block) # :yields: :request, request
52
52
 
53
53
  case @source_files
54
- when IO;
54
+ when IO
55
55
  puts "Parsing from the standard input. Press CTRL+C to finish." # FIXME: not here
56
56
  parse_stream(@source_files, options, &block)
57
57
  when String
@@ -97,6 +97,7 @@ module RequestLogAnalyzer::Source
97
97
  # <tt>options</tt>:: A Hash of options that will be pased to parse_io.
98
98
  def parse_file(file, options = {}, &block)
99
99
 
100
+ @progress_handler = @dormant_progress_handler
100
101
  @current_source = File.expand_path(file)
101
102
  @progress_handler.call(:started, file) if @progress_handler
102
103
  @source_changes_handler.call(:started, @current_source) if @source_changes_handler
@@ -110,6 +111,7 @@ module RequestLogAnalyzer::Source
110
111
  @source_changes_handler.call(:finished, @current_source) if @source_changes_handler
111
112
  @progress_handler.call(:finished, file) if @progress_handler
112
113
  @current_source = nil
114
+ @progress_handler = nil
113
115
  end
114
116
 
115
117
  # Parses an IO stream. It will simply call parse_io. This function does not support progress updates
@@ -134,8 +136,8 @@ module RequestLogAnalyzer::Source
134
136
  # <tt>options</tt>:: A hash of options that can be used by the parser.
135
137
  def parse_io(io, options = {}, &block) # :yields: request
136
138
  @current_lineno = 1
137
- io.each_line do |line|
138
- @progress_handler.call(:progress, io.pos) if @progress_handler && io.kind_of?(File)
139
+ while line = io.gets
140
+ @progress_handler.call(:progress, io.pos) if @progress_handler && @current_lineno % 127 == 0
139
141
 
140
142
  if request_data = file_format.parse_line(line) { |wt, message| warn(wt, message) }
141
143
  @parsed_lines += 1
@@ -152,7 +154,7 @@ module RequestLogAnalyzer::Source
152
154
  # Add a block to this method to install a progress handler while parsing.
153
155
  # <tt>proc</tt>:: The proc that will be called to handle progress update messages
154
156
  def progress=(proc)
155
- @progress_handler = proc
157
+ @dormant_progress_handler = proc
156
158
  end
157
159
 
158
160
  # Add a block to this method to install a warning handler while parsing,
@@ -28,7 +28,9 @@ module RequestLogAnalyzer::Tracker
28
28
  def prepare
29
29
  raise "No duration field set up for category tracker #{self.inspect}" unless options[:duration]
30
30
  raise "No categorizer set up for duration tracker #{self.inspect}" unless options[:category]
31
-
31
+
32
+ @categorizer = options[:category].respond_to?(:call) ? options[:category] : lambda { |request| request[options[:category]] }
33
+ @durationizer = options[:duration].respond_to?(:call) ? options[:duration] : lambda { |request| request[options[:duration]] }
32
34
  @categories = {}
33
35
  end
34
36
 
@@ -49,15 +51,15 @@ module RequestLogAnalyzer::Tracker
49
51
  raise "Capture mismatch for multiple values in a request"
50
52
  end
51
53
  else
52
- category = options[:category].respond_to?(:call) ? options[:category].call(request) : request[options[:category]]
53
- duration = options[:duration].respond_to?(:call) ? options[:duration].call(request) : request[options[:duration]]
54
+ category = @categorizer.call(request) # options[:category].respond_to?(:call) ? options[:category].call(request) : request[options[:category]]
55
+ duration = @durationizer.call(request) # options[:duration].respond_to?(:call) ? options[:duration].call(request) : request[options[:duration]]
54
56
 
55
57
  if duration.kind_of?(Float) && category.kind_of?(String)
56
58
  @categories[category] ||= {:hits => 0, :cumulative => 0.0, :min => duration, :max => duration }
57
59
  @categories[category][:hits] += 1
58
60
  @categories[category][:cumulative] += duration
59
61
  @categories[category][:min] = duration if duration < @categories[category][:min]
60
- @categories[category][:max] = duration if duration > @categories[category][:max]
62
+ @categories[category][:max] = duration if duration > @categories[category][:max]
61
63
  end
62
64
  end
63
65
  end
@@ -57,16 +57,20 @@ module RequestLogAnalyzer::Tracker
57
57
  def should_update?(request)
58
58
  return false if options[:line_type] && !request.has_line_type?(options[:line_type])
59
59
 
60
- if options[:if].kind_of?(Symbol)
61
- return false unless request[options[:if]]
62
- elsif options[:if].respond_to?(:call)
63
- return false unless options[:if].call(request)
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
64
66
  end
65
67
 
66
- if options[:unless].kind_of?(Symbol)
67
- return false if request[options[:unless]]
68
- elsif options[:unless].respond_to?(:call)
69
- return false if options[:unless].call(request)
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
70
74
  end
71
75
 
72
76
  return true
@@ -11,7 +11,7 @@ module RequestLogAnalyzer
11
11
 
12
12
  # The current version of request-log-analyzer.
13
13
  # This will be diplayed in output reports etc.
14
- VERSION = "1.3.1"
14
+ VERSION = "1.3.2"
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.
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "request-log-analyzer"
3
- s.version = "1.3.1"
4
- s.date = "2009-09-12"
3
+ s.version = "1.3.2"
4
+ s.date = "2009-09-13"
5
5
 
6
6
  s.rubyforge_project = 'r-l-a'
7
7
 
@@ -70,7 +70,7 @@ describe RequestLogAnalyzer::FileFormat::Apache do
70
70
  end
71
71
 
72
72
  it "should read the correct values from a valid HTTP/1.0 access log line" do
73
- @log_parser.parse_io(@sample_1) do |request|
73
+ @log_parser.parse_io(StringIO.new(@sample_1)) do |request|
74
74
  request[:remote_host].should == '1.129.119.13'
75
75
  request[:timestamp].should == 20090908075409
76
76
  request[:http_status].should == 200
@@ -82,7 +82,7 @@ describe RequestLogAnalyzer::FileFormat::Apache do
82
82
  end
83
83
 
84
84
  it "should read the correct values from a valid 200 access log line" do
85
- @log_parser.parse_io(@sample_2) do |request|
85
+ @log_parser.parse_io(StringIO.new(@sample_2)) do |request|
86
86
  request[:remote_host].should == '1.82.235.29'
87
87
  request[:timestamp].should == 20090908075405
88
88
  request[:http_status].should == 200
@@ -122,7 +122,7 @@ describe RequestLogAnalyzer::FileFormat::Apache do
122
122
  end
123
123
 
124
124
  it "should read the correct values from a valid 404 access log line" do
125
- @log_parser.parse_io(@sample_1) do |request|
125
+ @log_parser.parse_io(StringIO.new(@sample_1)) do |request|
126
126
  request[:remote_host].should == '69.41.0.45'
127
127
  request[:timestamp].should == 20090902120240
128
128
  request[:http_status].should == 404
@@ -136,7 +136,7 @@ describe RequestLogAnalyzer::FileFormat::Apache do
136
136
  end
137
137
 
138
138
  it "should read the correct values from a valid 200 access log line" do
139
- @log_parser.parse_io(@sample_2) do |request|
139
+ @log_parser.parse_io(StringIO.new(@sample_2)) do |request|
140
140
  request[:remote_host].should == '10.0.1.1'
141
141
  request[:timestamp].should == 20090902050833
142
142
  request[:http_status].should == 200
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wvanbergen-request-log-analyzer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-09-12 00:00:00 -07:00
13
+ date: 2009-09-13 00:00:00 -07:00
14
14
  default_executable: request-log-analyzer
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -146,6 +146,7 @@ files:
146
146
  - lib/cli/command_line_arguments.rb
147
147
  has_rdoc: false
148
148
  homepage: http://railsdoctors.com
149
+ licenses:
149
150
  post_install_message:
150
151
  rdoc_options:
151
152
  - --title
@@ -171,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
172
  requirements:
172
173
  - To use the database inserter, ActiveRecord and an appropriate database adapter are required.
173
174
  rubyforge_project: r-l-a
174
- rubygems_version: 1.2.0
175
+ rubygems_version: 1.3.5
175
176
  signing_key:
176
177
  specification_version: 2
177
178
  summary: A command line tool to analyze request logs for Apache, Rails, Merb and other application servers