request-log-analyzer 1.5.4 → 1.6.4
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/README.rdoc +2 -3
- data/lib/request_log_analyzer/database/base.rb +4 -5
- data/lib/request_log_analyzer/file_format/amazon_s3.rb +19 -18
- data/lib/request_log_analyzer/file_format/delayed_job.rb +14 -10
- data/lib/request_log_analyzer/file_format/mysql.rb +15 -12
- data/lib/request_log_analyzer/file_format/postgresql.rb +68 -0
- data/lib/request_log_analyzer/file_format/rails.rb +2 -2
- data/lib/request_log_analyzer/file_format/rails3.rb +86 -0
- data/lib/request_log_analyzer/file_format.rb +2 -2
- data/lib/request_log_analyzer/line_definition.rb +28 -3
- data/lib/request_log_analyzer/output/fancy_html.rb +19 -1
- data/lib/request_log_analyzer/output/fixed_width.rb +1 -1
- data/lib/request_log_analyzer/source/log_parser.rb +2 -2
- data/lib/request_log_analyzer/tracker/numeric_value.rb +1 -1
- data/lib/request_log_analyzer/tracker/traffic.rb +1 -1
- data/lib/request_log_analyzer.rb +1 -1
- data/request-log-analyzer.gemspec +4 -4
- data/spec/fixtures/postgresql.log +2980 -0
- data/spec/unit/file_format/amazon_s3_format_spec.rb +18 -0
- data/spec/unit/file_format/postgresql_format_spec.rb +65 -0
- data/spec/unit/file_format/rails3_format_spec.rb +120 -0
- data/spec/unit/file_format/rails_format_spec.rb +8 -2
- data/spec/unit/source/log_parser_spec.rb +1 -1
- data/spec/unit/tracker/tracker_api_spec.rb +4 -4
- data/tasks/github-gem.rake +22 -17
- metadata +41 -19
|
@@ -46,4 +46,22 @@ describe RequestLogAnalyzer::FileFormat::AmazonS3 do
|
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
+
it "should parse a COPY request correctly" do
|
|
50
|
+
line = '09216466b5571a8db0bf5abca72041fd3fc163e5eb83c51159735353ac6a2b9a testbucket [03/Mar/2010:23:04:59 +0000] 174.119.31.76 09216466b5571a8db0bf5abca72041fd3fc163e5eb83c51159735353ac6a2b9a ACCC34B843C87BC9 REST.COPY.OBJECT files/image.png "PUT /files/image.png HTTP/1.1" 200 - 234 65957 365 319 "-" "" -'
|
|
51
|
+
@file_format.should parse_line(line).as(:access).and_capture(
|
|
52
|
+
:bucket_owner => '09216466b5571a8db0bf5abca72041fd3fc163e5eb83c51159735353ac6a2b9a',
|
|
53
|
+
:bucket => 'testbucket',
|
|
54
|
+
:timestamp => 20100303230459,
|
|
55
|
+
:remote_ip => '174.119.31.76',
|
|
56
|
+
:requester => '09216466b5571a8db0bf5abca72041fd3fc163e5eb83c51159735353ac6a2b9a',
|
|
57
|
+
:key => 'files/image.png',
|
|
58
|
+
:operation => 'REST.COPY.OBJECT',
|
|
59
|
+
:total_time => 0.365,
|
|
60
|
+
:turnaround_time => 0.319,
|
|
61
|
+
:bytes_sent => 234,
|
|
62
|
+
:object_size => 65957,
|
|
63
|
+
:referer => nil,
|
|
64
|
+
:user_agent => '')
|
|
65
|
+
end
|
|
66
|
+
|
|
49
67
|
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RequestLogAnalyzer::FileFormat::Postgresql do
|
|
4
|
+
|
|
5
|
+
it "should be a valid file format" do
|
|
6
|
+
RequestLogAnalyzer::FileFormat.load(:Postgresql).should be_valid
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe '#parse_line' do
|
|
10
|
+
before(:each) do
|
|
11
|
+
@file_format = RequestLogAnalyzer::FileFormat.load(:Postgresql)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should parse a :query line correctly" do
|
|
15
|
+
line = '2004-05-07 11:58:36 LOG: query: SELECT plugin_id, plugin_name FROM plugins'
|
|
16
|
+
@file_format.should parse_line(line).as(:query).and_capture(:timestamp => 20040507115836, :query_fragment => 'SELECT plugin_id, plugin_name FROM plugins')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should parse a :query_fragment line correctly" do
|
|
20
|
+
line = ' groups.type_id,users.user_name,users.realname,'
|
|
21
|
+
@file_format.should parse_line(line).as(:query_fragment).and_capture(:query_fragment => "groups.type_id,users.user_name,users.realname,")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should parse a :duration line correctly" do
|
|
25
|
+
line = '2004-05-07 11:58:36 LOG: duration: 0.002612 sec'
|
|
26
|
+
@file_format.should parse_line(line).as(:duration).and_capture(:query_time => 0.002612)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe '#parse_io' do
|
|
31
|
+
before(:each) do
|
|
32
|
+
@log_parser = RequestLogAnalyzer::Source::LogParser.new(RequestLogAnalyzer::FileFormat.load(:postgresql))
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should parse a multiline query entry correctly" do
|
|
36
|
+
fixture = <<EOS
|
|
37
|
+
2004-05-07 11:58:22 LOG: query: SELECT groups.group_name,groups.unix_group_name,
|
|
38
|
+
groups.type_id,users.user_name,users.realname,
|
|
39
|
+
news_bytes.forum_id,news_bytes.summary,news_bytes.post_date,news_bytes.details
|
|
40
|
+
FROM users,news_bytes,groups
|
|
41
|
+
WHERE news_bytes.group_id='98' AND news_bytes.is_approved <> '4'
|
|
42
|
+
AND users.user_id=news_bytes.submitted_by
|
|
43
|
+
AND news_bytes.group_id=groups.group_id
|
|
44
|
+
ORDER BY post_date DESC LIMIT 10 OFFSET 0
|
|
45
|
+
2004-05-07 11:58:22 LOG: duration: 0.002680 sec
|
|
46
|
+
EOS
|
|
47
|
+
@log_parser.parse_io(StringIO.new(fixture)) do |request|
|
|
48
|
+
request.should be_kind_of(RequestLogAnalyzer::FileFormat::Postgresql::Request)
|
|
49
|
+
request[:query].should == "SELECT groups.group_name,groups.unix_group_name, groups.type_id,users.user_name,users.realname, news_bytes.forum_id,news_bytes.summary,news_bytes.post_date,news_bytes.details FROM users,news_bytes,groups WHERE news_bytes.group_id=:string AND news_bytes.is_approved <> :string AND users.user_id=news_bytes.submitted_by AND news_bytes.group_id=groups.group_id ORDER BY post_date DESC LIMIT :int OFFSET :int"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should parse a dualline query entry correctly" do
|
|
54
|
+
fixture = <<EOS
|
|
55
|
+
2004-05-07 11:58:36 LOG: query: SELECT type, count FROM project_sums_agg WHERE group_id=59
|
|
56
|
+
2004-05-07 11:58:36 LOG: duration: 0.001197 sec
|
|
57
|
+
EOS
|
|
58
|
+
@log_parser.parse_io(StringIO.new(fixture)) do |request|
|
|
59
|
+
request.should be_kind_of(RequestLogAnalyzer::FileFormat::Postgresql::Request)
|
|
60
|
+
request[:query].should == "SELECT type, count FROM project_sums_agg WHERE group_id=:int"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RequestLogAnalyzer::FileFormat::Rails do
|
|
4
|
+
|
|
5
|
+
it "should be a valid file format" do
|
|
6
|
+
RequestLogAnalyzer::FileFormat.load(:rails3).should be_valid
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe '#parse_line' do
|
|
10
|
+
before(:each) { @file_format = RequestLogAnalyzer::FileFormat.load(:rails3) }
|
|
11
|
+
|
|
12
|
+
it "should parse :started lines correctly" do
|
|
13
|
+
line = 'Started GET "/queries" for 127.0.0.1 at 2010-02-25 16:15:18'
|
|
14
|
+
@file_format.should parse_line(line).as(:started).and_capture(:method => 'GET',
|
|
15
|
+
:path => '/queries', :ip => '127.0.0.1', :timestamp => 20100225161518)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should parse :processing lines correctly" do
|
|
19
|
+
line = ' Processing by QueriesController#index as HTML'
|
|
20
|
+
@file_format.should parse_line(line).as(:processing).and_capture(
|
|
21
|
+
:controller => 'QueriesController', :action => 'index', :format => 'HTML')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# it "should parse beta :completed lines correctly" do
|
|
26
|
+
# line = 'Completed in 9ms (Views: 4.9ms | ActiveRecord: 0.5ms) with 200'
|
|
27
|
+
# @file_format.should parse_line(line).as(:completed).and_capture(
|
|
28
|
+
# :duration => 0.009, :status => 200)
|
|
29
|
+
# end
|
|
30
|
+
|
|
31
|
+
it "should parse :completed lines correctly" do
|
|
32
|
+
line = 'Completed 200 OK in 170ms (Views: 78.4ms | ActiveRecord: 48.2ms)'
|
|
33
|
+
@file_format.should parse_line(line).as(:completed).and_capture(
|
|
34
|
+
:duration => 0.170, :status => 200)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should pase :failure lines correctly" do
|
|
38
|
+
line = "ActionView::Template::Error (undefined local variable or method `field' for #<Class>) on line #3 of /Users/willem/Code/warehouse/app/views/queries/execute.csv.erb:"
|
|
39
|
+
@file_format.should parse_line(line).as(:failure).and_capture(:line => 3,
|
|
40
|
+
:error => 'ActionView::Template::Error',
|
|
41
|
+
:message => "undefined local variable or method `field' for #<Class>",
|
|
42
|
+
:file => '/Users/willem/Code/warehouse/app/views/queries/execute.csv.erb')
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe '#parse_io' do
|
|
47
|
+
before(:each) do
|
|
48
|
+
@log_parser = RequestLogAnalyzer::Source::LogParser.new(RequestLogAnalyzer::FileFormat.load(:rails3))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should parse a successful request correctly" do
|
|
52
|
+
log = <<-EOLOG
|
|
53
|
+
Started GET "/" for 127.0.0.1 at 2010-03-19 06:40:41
|
|
54
|
+
Processing by QueriesController#index as HTML
|
|
55
|
+
SQL (16.3ms) SHOW TABLES
|
|
56
|
+
Query Load (32.0ms) SELECT `queries`.* FROM `queries`
|
|
57
|
+
Rendered queries/index.html.erb within layouts/default (40.9ms)
|
|
58
|
+
Completed 200 OK in 170ms (Views: 78.4ms | ActiveRecord: 48.2ms)
|
|
59
|
+
EOLOG
|
|
60
|
+
|
|
61
|
+
request_counter.should_receive(:hit!).once
|
|
62
|
+
@log_parser.should_not_receive(:warn)
|
|
63
|
+
|
|
64
|
+
@log_parser.parse_io(StringIO.new(log)) do |request|
|
|
65
|
+
request_counter.hit! if request.kind_of?(RequestLogAnalyzer::FileFormat::Rails3::Request) && request.completed?
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should parse an unroutable request correctly" do
|
|
70
|
+
log = <<-EOLOG
|
|
71
|
+
Started GET "/404" for 127.0.0.1 at 2010-03-19 06:40:57
|
|
72
|
+
|
|
73
|
+
ActionController::RoutingError (No route matches "/404"):
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
Rendered /Users/rails/actionpack/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.0ms)
|
|
77
|
+
|
|
78
|
+
EOLOG
|
|
79
|
+
|
|
80
|
+
request_counter.should_receive(:hit!).once
|
|
81
|
+
@log_parser.should_not_receive(:warn)
|
|
82
|
+
|
|
83
|
+
@log_parser.parse_io(StringIO.new(log)) do |request|
|
|
84
|
+
request_counter.hit! if request.kind_of?(RequestLogAnalyzer::FileFormat::Rails3::Request) && request.completed?
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should parse a failing request correctly" do
|
|
89
|
+
log = <<-EOLOG
|
|
90
|
+
Started POST "/queries/397638749/execute.csv" for 127.0.0.1 at 2010-03-01 18:44:33
|
|
91
|
+
Processing by QueriesController#execute as CSV
|
|
92
|
+
Parameters: {"commit"=>"Run query", "authenticity_token"=>"pz9WcxkcrlG/43eg6BgSAnJL7yIsaffuHbYxPHUsUzQ=", "id"=>"397638749"}
|
|
93
|
+
|
|
94
|
+
ActionView::Template::Error (undefined local variable or method `field' for #<Class>) on line #3 of /Users/application/app/views/queries/execute.csv.erb:
|
|
95
|
+
1: <%=raw @result.fields.map { |f| f.humanize.to_json }.join(',') %>
|
|
96
|
+
2: <% @result.each do |record| %>
|
|
97
|
+
3: <%=raw @result.fields.map { |f| record[field].to_s }.join(",") %>
|
|
98
|
+
4: <% end %>
|
|
99
|
+
|
|
100
|
+
app/views/queries/execute.csv.erb:3:in `_render_template__652100315_2182241460_0'
|
|
101
|
+
app/views/queries/execute.csv.erb:3:in `map'
|
|
102
|
+
app/views/queries/execute.csv.erb:3:in `_render_template__652100315_2182241460_0'
|
|
103
|
+
app/views/queries/execute.csv.erb:2:in `_render_template__652100315_2182241460_0'
|
|
104
|
+
app/controllers/queries_controller.rb:34:in `execute'
|
|
105
|
+
|
|
106
|
+
Rendered /rails/actionpack-3.0.0.beta/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
|
|
107
|
+
Rendered /rails/actionpack-3.0.0.beta/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (9.7ms)
|
|
108
|
+
Rendered /rails/actionpack-3.0.0.beta/lib/action_dispatch/middleware/templates/rescues/template_error.erb within /Users/willem/.rvm/gems/ruby-1.8.7-p248/gems/actionpack-3.0.0.beta/lib/action_dispatch/middleware/templates/rescues/layout.erb (20.4ms)
|
|
109
|
+
|
|
110
|
+
EOLOG
|
|
111
|
+
|
|
112
|
+
request_counter.should_receive(:hit!).once
|
|
113
|
+
@log_parser.should_not_receive(:warn)
|
|
114
|
+
|
|
115
|
+
@log_parser.parse_io(StringIO.new(log)) do |request|
|
|
116
|
+
request_counter.hit! if request.kind_of?(RequestLogAnalyzer::FileFormat::Rails3::Request) && request.completed?
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -80,11 +80,17 @@ describe RequestLogAnalyzer::FileFormat::Rails do
|
|
|
80
80
|
@rails.should parse_line(line).as(:failure).and_capture(:error => 'NoMethodError', :message => "undefined method `update_domain_account' for nil:NilClass")
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
-
it "should parse a :cache_hit line correctly" do
|
|
84
|
-
line = prefix + 'Filter chain halted as [#<ActionController::Caching::Actions::ActionCacheFilter:0x2a999ad620 @check=nil, @options={:store_options=>{}, :layout=>nil, :cache_path=>#<Proc:0x0000002a999b8890@/app/controllers/cached_controller.rb:8>}
|
|
83
|
+
it "should parse a :cache_hit line correctly with an filter instance reference" do
|
|
84
|
+
line = prefix + 'Filter chain halted as [#<ActionController::Filters::AroundFilter:0x2a999ad120 @identifier=nil, @kind=:filter, @options={:only=>#<Set: {"cached"}>, :if=>:not_logged_in?, :unless=>nil}, @method=#<ActionController::Caching::Actions::ActionCacheFilter:0x2a999ad620 @check=nil, @options={:store_options=>{}, :layout=>nil, :cache_path=>#<Proc:0x0000002a999b8890@/app/controllers/cached_controller.rb:8>}>>] did_not_yield.'
|
|
85
85
|
@rails.should parse_line(line).as(:cache_hit)
|
|
86
86
|
end
|
|
87
87
|
|
|
88
|
+
it "should parse a :cache_hit line correctly with an proc instance reference" do
|
|
89
|
+
line = prefix + 'Filter chain halted as [#<ActionController::Filters::AroundFilter:0x2a9a923e38 @method=#<Proc:0x0000002a9818b3f8@/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/caching/actions.rb:64>, @kind=:filter, @identifier=nil, @options={:unless=>nil, :if=>nil, :only=>#<Set: {"show"}>}>] did_not_yield.'
|
|
90
|
+
@rails.should parse_line(line).as(:cache_hit)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
88
94
|
it "should parse a :parameters line correctly" do
|
|
89
95
|
line = prefix + ' Parameters: {"action"=>"cached", "controller"=>"cached"}'
|
|
90
96
|
@rails.should parse_line(line).as(:parameters).and_capture(:params => {:action => 'cached', :controller => 'cached'})
|
|
@@ -46,7 +46,7 @@ describe RequestLogAnalyzer::Source::LogParser, :requests do
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
it "should parse a stream and find valid requests" do
|
|
49
|
-
io = File.new(log_fixture(:test_file_format), '
|
|
49
|
+
io = File.new(log_fixture(:test_file_format), 'rb')
|
|
50
50
|
@log_parser.parse_io(io) do |request|
|
|
51
51
|
request.should be_kind_of(RequestLogAnalyzer::Request)
|
|
52
52
|
request.should =~ :test
|
|
@@ -85,22 +85,22 @@ describe RequestLogAnalyzer::Tracker::Base do
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
it "should return the value of the block if one is given to the :if option" do
|
|
88
|
-
tracker = @tracker_class.new(:if => lambda { false } )
|
|
88
|
+
tracker = @tracker_class.new(:if => lambda { |r| false } )
|
|
89
89
|
tracker.should_update?(request(:field => 'anything')).should be_false
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
it "should return the inverse value of the block if one is given to the :if option" do
|
|
93
|
-
tracker = @tracker_class.new(:unless => lambda { false } )
|
|
93
|
+
tracker = @tracker_class.new(:unless => lambda { |r| false } )
|
|
94
94
|
tracker.should_update?(request(:field => 'anything')).should be_true
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
it "should return false if any of the checks fail" do
|
|
98
|
-
tracker = @tracker_class.new(:if => :field, :unless => lambda { false }, :line_type => :not_present )
|
|
98
|
+
tracker = @tracker_class.new(:if => :field, :unless => lambda { |r| false }, :line_type => :not_present )
|
|
99
99
|
tracker.should_update?(request(:line_type => :present, :field => 'anything')).should be_false
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
it "should return true if all of the checks succeed" do
|
|
103
|
-
tracker = @tracker_class.new(:if => :field, :unless => lambda { false }, :line_type => :present )
|
|
103
|
+
tracker = @tracker_class.new(:if => :field, :unless => lambda { |r| false }, :line_type => :present )
|
|
104
104
|
tracker.should_update?(request(:line_type => :present, :field => 'anything')).should be_true
|
|
105
105
|
end
|
|
106
106
|
|
data/tasks/github-gem.rake
CHANGED
|
@@ -119,19 +119,20 @@ module GithubGem
|
|
|
119
119
|
checks = [:check_current_branch, :check_clean_status, :check_not_diverged, :check_version]
|
|
120
120
|
checks.unshift('spec:basic') if has_specs?
|
|
121
121
|
checks.unshift('test:basic') if has_tests?
|
|
122
|
-
checks.push << [:check_rubyforge] if gemspec.rubyforge_project
|
|
122
|
+
# checks.push << [:check_rubyforge] if gemspec.rubyforge_project
|
|
123
123
|
|
|
124
124
|
desc "Perform all checks that would occur before a release"
|
|
125
125
|
task(:release_checks => checks)
|
|
126
126
|
|
|
127
|
-
release_tasks = [:release_checks, :set_version, :build, :github_release]
|
|
128
|
-
release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
|
|
127
|
+
release_tasks = [:release_checks, :set_version, :build, :github_release, :gemcutter_release]
|
|
128
|
+
# release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
|
|
129
129
|
|
|
130
130
|
desc "Release a new verison of the gem"
|
|
131
131
|
task(:release => release_tasks) { release_task }
|
|
132
132
|
|
|
133
|
-
task(:check_rubyforge) { check_rubyforge_task }
|
|
134
|
-
task(:rubyforge_release) { rubyforge_release_task }
|
|
133
|
+
# task(:check_rubyforge) { check_rubyforge_task }
|
|
134
|
+
# task(:rubyforge_release) { rubyforge_release_task }
|
|
135
|
+
task(:gemcutter_release) { gemcutter_release_task }
|
|
135
136
|
task(:github_release => [:commit_modified_files, :tag_version]) { github_release_task }
|
|
136
137
|
task(:tag_version) { tag_version_task }
|
|
137
138
|
task(:commit_modified_files) { commit_modified_files_task }
|
|
@@ -215,18 +216,22 @@ module GithubGem
|
|
|
215
216
|
git.push(remote, remote_branch, true)
|
|
216
217
|
end
|
|
217
218
|
|
|
218
|
-
# Checks whether Rubyforge is configured properly
|
|
219
|
-
def check_rubyforge_task
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
# Task to release the .gem file toRubyforge.
|
|
228
|
-
def rubyforge_release_task
|
|
229
|
-
|
|
219
|
+
# # Checks whether Rubyforge is configured properly
|
|
220
|
+
# def check_rubyforge_task
|
|
221
|
+
# # Login no longer necessary when using rubyforge 2.0.0 gem
|
|
222
|
+
# # raise "Could not login on rubyforge!" unless `rubyforge login 2>&1`.strip.empty?
|
|
223
|
+
# output = `rubyforge names`.split("\n")
|
|
224
|
+
# raise "Rubyforge group not found!" unless output.any? { |line| %r[^groups\s*\:.*\b#{Regexp.quote(gemspec.rubyforge_project)}\b.*] =~ line }
|
|
225
|
+
# raise "Rubyforge package not found!" unless output.any? { |line| %r[^packages\s*\:.*\b#{Regexp.quote(gemspec.name)}\b.*] =~ line }
|
|
226
|
+
# end
|
|
227
|
+
|
|
228
|
+
# # Task to release the .gem file toRubyforge.
|
|
229
|
+
# def rubyforge_release_task
|
|
230
|
+
# sh 'rubyforge', 'add_release', gemspec.rubyforge_project, gemspec.name, gemspec.version.to_s, "pkg/#{gemspec.name}-#{gemspec.version}.gem"
|
|
231
|
+
# end
|
|
232
|
+
|
|
233
|
+
def gemcutter_release_task
|
|
234
|
+
sh "gem push pkg/#{gemspec.name}-#{gemspec.version}.gem"
|
|
230
235
|
end
|
|
231
236
|
|
|
232
237
|
# Gem release task.
|
metadata
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: request-log-analyzer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
4
|
+
prerelease: false
|
|
5
|
+
segments:
|
|
6
|
+
- 1
|
|
7
|
+
- 6
|
|
8
|
+
- 4
|
|
9
|
+
version: 1.6.4
|
|
5
10
|
platform: ruby
|
|
6
11
|
authors:
|
|
7
12
|
- Willem van Bergen
|
|
@@ -10,29 +15,37 @@ autorequire:
|
|
|
10
15
|
bindir: bin
|
|
11
16
|
cert_chain: []
|
|
12
17
|
|
|
13
|
-
date:
|
|
18
|
+
date: 2010-03-22 00:00:00 -04:00
|
|
14
19
|
default_executable: request-log-analyzer
|
|
15
20
|
dependencies:
|
|
16
21
|
- !ruby/object:Gem::Dependency
|
|
17
22
|
name: rspec
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
prerelease: false
|
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
21
25
|
requirements:
|
|
22
26
|
- - ">="
|
|
23
27
|
- !ruby/object:Gem::Version
|
|
28
|
+
segments:
|
|
29
|
+
- 1
|
|
30
|
+
- 2
|
|
31
|
+
- 4
|
|
24
32
|
version: 1.2.4
|
|
25
|
-
|
|
33
|
+
type: :development
|
|
34
|
+
version_requirements: *id001
|
|
26
35
|
- !ruby/object:Gem::Dependency
|
|
27
36
|
name: git
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
prerelease: false
|
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
31
39
|
requirements:
|
|
32
40
|
- - ">="
|
|
33
41
|
- !ruby/object:Gem::Version
|
|
42
|
+
segments:
|
|
43
|
+
- 1
|
|
44
|
+
- 1
|
|
45
|
+
- 0
|
|
34
46
|
version: 1.1.0
|
|
35
|
-
|
|
47
|
+
type: :development
|
|
48
|
+
version_requirements: *id002
|
|
36
49
|
description: " Request log analyzer's purpose is to find out how your web application is being used, how it performs and to\n focus your optimization efforts. This tool will parse all requests in the application's log file and aggregate the \n information. Once it is finished parsing the log file(s), it will show the requests that take op most server time \n using various metrics. It can also insert all parsed request information into a database so you can roll your own\n analysis. It supports Rails-, Merb- and Rack-based applications logs, Apache and Amazon S3 access logs and MySQL \n slow query logs out of the box, but file formats of other applications can easily be supported by supplying an \n easy to write log file format definition.\n"
|
|
37
50
|
email:
|
|
38
51
|
- willem@railsdoctors.com
|
|
@@ -65,8 +78,8 @@ files:
|
|
|
65
78
|
- lib/request_log_analyzer/tracker/frequency.rb
|
|
66
79
|
- lib/request_log_analyzer/tracker/duration.rb
|
|
67
80
|
- tasks/github-gem.rake
|
|
68
|
-
- .gitignore
|
|
69
81
|
- spec/unit/filter/filter_spec.rb
|
|
82
|
+
- .gitignore
|
|
70
83
|
- spec/lib/macros.rb
|
|
71
84
|
- spec/spec_helper.rb
|
|
72
85
|
- spec/fixtures/decompression.log.bz2
|
|
@@ -74,10 +87,10 @@ files:
|
|
|
74
87
|
- lib/request_log_analyzer/filter.rb
|
|
75
88
|
- spec/integration/scout_spec.rb
|
|
76
89
|
- spec/fixtures/test_file_format.log
|
|
90
|
+
- spec/unit/filter/timespan_filter_spec.rb
|
|
77
91
|
- lib/request_log_analyzer/tracker/traffic.rb
|
|
78
92
|
- spec/unit/file_format/merb_format_spec.rb
|
|
79
93
|
- spec/unit/file_format/format_autodetection_spec.rb
|
|
80
|
-
- spec/unit/filter/timespan_filter_spec.rb
|
|
81
94
|
- spec/unit/file_format/file_format_api_spec.rb
|
|
82
95
|
- lib/request_log_analyzer/filter/field.rb
|
|
83
96
|
- lib/request_log_analyzer/file_format/merb.rb
|
|
@@ -87,11 +100,14 @@ files:
|
|
|
87
100
|
- spec/integration/mailer_spec.rb
|
|
88
101
|
- lib/request_log_analyzer/line_definition.rb
|
|
89
102
|
- spec/unit/tracker/frequency_tracker_spec.rb
|
|
103
|
+
- spec/fixtures/postgresql.log
|
|
90
104
|
- spec/fixtures/multiple_files_2.log
|
|
91
105
|
- spec/lib/mocks.rb
|
|
92
106
|
- spec/unit/file_format/apache_format_spec.rb
|
|
93
107
|
- spec/fixtures/syslog_1x.log
|
|
108
|
+
- spec/unit/file_format/rails3_format_spec.rb
|
|
94
109
|
- spec/integration/munin_plugins_rails_spec.rb
|
|
110
|
+
- lib/request_log_analyzer/file_format/rails3.rb
|
|
95
111
|
- spec/lib/helpers.rb
|
|
96
112
|
- spec/unit/file_format/delayed_job_format_spec.rb
|
|
97
113
|
- spec/fixtures/rails.db
|
|
@@ -107,10 +123,10 @@ files:
|
|
|
107
123
|
- lib/request_log_analyzer/file_format/rack.rb
|
|
108
124
|
- lib/request_log_analyzer/tracker/numeric_value.rb
|
|
109
125
|
- spec/fixtures/test_language_combined.log
|
|
126
|
+
- spec/unit/request_spec.rb
|
|
110
127
|
- lib/cli/command_line_arguments.rb
|
|
111
128
|
- lib/request_log_analyzer.rb
|
|
112
129
|
- spec/database.yml
|
|
113
|
-
- spec/unit/request_spec.rb
|
|
114
130
|
- lib/request_log_analyzer/database/base.rb
|
|
115
131
|
- spec/unit/aggregator/database_inserter_spec.rb
|
|
116
132
|
- lib/request_log_analyzer/database/request.rb
|
|
@@ -123,6 +139,7 @@ files:
|
|
|
123
139
|
- spec/unit/tracker/duration_tracker_spec.rb
|
|
124
140
|
- spec/fixtures/rails_22_cached.log
|
|
125
141
|
- lib/request_log_analyzer/aggregator/summarizer.rb
|
|
142
|
+
- spec/unit/file_format/postgresql_format_spec.rb
|
|
126
143
|
- spec/unit/file_format/common_regular_expressions_spec.rb
|
|
127
144
|
- spec/fixtures/rails_1x.log
|
|
128
145
|
- lib/request_log_analyzer/file_format/delayed_job.rb
|
|
@@ -132,17 +149,18 @@ files:
|
|
|
132
149
|
- spec/unit/file_format/mysql_format_spec.rb
|
|
133
150
|
- request-log-analyzer.gemspec
|
|
134
151
|
- spec/fixtures/apache_common.log
|
|
152
|
+
- spec/unit/mailer_spec.rb
|
|
135
153
|
- lib/request_log_analyzer/file_format/rails.rb
|
|
136
154
|
- Rakefile
|
|
137
|
-
- spec/unit/mailer_spec.rb
|
|
138
155
|
- lib/request_log_analyzer/tracker/hourly_spread.rb
|
|
139
156
|
- spec/unit/aggregator/summarizer_spec.rb
|
|
140
157
|
- spec/unit/tracker/traffic_tracker_spec.rb
|
|
141
158
|
- spec/unit/tracker/numeric_value_tracker_spec.rb
|
|
159
|
+
- lib/request_log_analyzer/file_format/postgresql.rb
|
|
142
160
|
- lib/request_log_analyzer/tracker/timespan.rb
|
|
143
161
|
- spec/unit/controller/log_processor_spec.rb
|
|
144
|
-
- spec/fixtures/sinatra.log
|
|
145
162
|
- spec/unit/filter/field_filter_spec.rb
|
|
163
|
+
- spec/fixtures/sinatra.log
|
|
146
164
|
- spec/fixtures/merb_prefixed.log
|
|
147
165
|
- lib/request_log_analyzer/log_processor.rb
|
|
148
166
|
- lib/request_log_analyzer/filter/timespan.rb
|
|
@@ -186,18 +204,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
186
204
|
requirements:
|
|
187
205
|
- - ">="
|
|
188
206
|
- !ruby/object:Gem::Version
|
|
207
|
+
segments:
|
|
208
|
+
- 0
|
|
189
209
|
version: "0"
|
|
190
|
-
version:
|
|
191
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
211
|
requirements:
|
|
193
212
|
- - ">="
|
|
194
213
|
- !ruby/object:Gem::Version
|
|
214
|
+
segments:
|
|
215
|
+
- 0
|
|
195
216
|
version: "0"
|
|
196
|
-
version:
|
|
197
217
|
requirements:
|
|
198
218
|
- To use the database inserter, ActiveRecord and an appropriate database adapter are required.
|
|
199
219
|
rubyforge_project: r-l-a
|
|
200
|
-
rubygems_version: 1.3.
|
|
220
|
+
rubygems_version: 1.3.6
|
|
201
221
|
signing_key:
|
|
202
222
|
specification_version: 3
|
|
203
223
|
summary: A command line tool to analyze request logs for Apache, Rails, Merb, MySQL and other web application servers
|
|
@@ -209,13 +229,14 @@ test_files:
|
|
|
209
229
|
- spec/unit/filter/filter_spec.rb
|
|
210
230
|
- spec/unit/database/connection_spec.rb
|
|
211
231
|
- spec/integration/scout_spec.rb
|
|
232
|
+
- spec/unit/filter/timespan_filter_spec.rb
|
|
212
233
|
- spec/unit/file_format/merb_format_spec.rb
|
|
213
234
|
- spec/unit/file_format/format_autodetection_spec.rb
|
|
214
|
-
- spec/unit/filter/timespan_filter_spec.rb
|
|
215
235
|
- spec/unit/file_format/file_format_api_spec.rb
|
|
216
236
|
- spec/integration/mailer_spec.rb
|
|
217
237
|
- spec/unit/tracker/frequency_tracker_spec.rb
|
|
218
238
|
- spec/unit/file_format/apache_format_spec.rb
|
|
239
|
+
- spec/unit/file_format/rails3_format_spec.rb
|
|
219
240
|
- spec/integration/munin_plugins_rails_spec.rb
|
|
220
241
|
- spec/unit/file_format/delayed_job_format_spec.rb
|
|
221
242
|
- spec/unit/source/log_parser_spec.rb
|
|
@@ -225,6 +246,7 @@ test_files:
|
|
|
225
246
|
- spec/unit/aggregator/database_inserter_spec.rb
|
|
226
247
|
- spec/unit/filter/anonymize_filter_spec.rb
|
|
227
248
|
- spec/unit/tracker/duration_tracker_spec.rb
|
|
249
|
+
- spec/unit/file_format/postgresql_format_spec.rb
|
|
228
250
|
- spec/unit/file_format/common_regular_expressions_spec.rb
|
|
229
251
|
- spec/unit/file_format/line_definition_spec.rb
|
|
230
252
|
- spec/unit/file_format/mysql_format_spec.rb
|