nbogie-production_log_analyzer 1.5.1.1

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.
@@ -0,0 +1,283 @@
1
+ #!/usr/local/bin/ruby -w
2
+
3
+ $TESTING = true
4
+
5
+ require 'tempfile'
6
+ require 'test/unit'
7
+ require 'stringio'
8
+
9
+ require 'production_log/parser'
10
+
11
+ class TestLogEntry < Test::Unit::TestCase
12
+
13
+ def setup
14
+ @entry = LogParser::LogEntry.new <<EOF
15
+ Processing TwinklerController#index (for 81.109.96.173 at Wed Dec 01 16:01:56 CST 2004)
16
+ Parameters: {\"action\"=>\"index\", \"controller\"=>\"twinkler\"}
17
+ Browser Load First (0.001114) SELECT * FROM browsers WHERE ubid = 'ixsXHgUo7U9PJGgBzr7e9ocaDOc=' LIMIT 1
18
+ Goal Count (0.001762) SELECT COUNT(*) FROM goals WHERE browser_id = '96181' and is_active = 1
19
+ Rendering twinkler/index within layouts/default
20
+ Rendering layouts/default (200 OK)
21
+ Completed in 0.616122 (1 reqs/sec) | Rendering: 0.242475 (39%) | DB: 0.002876 (0%)
22
+ EOF
23
+ end
24
+
25
+ def test_parse
26
+ request = <<EOF
27
+ Processing RssController#uber (for 67.18.200.5 at Mon Mar 07 00:00:25 CST 2005)
28
+ Parameters: {:id=>"author", :"rss/uber/author.html/uber/author"=>nil, :action=>"uber", :username=>"looch", :controller=>"rss"}
29
+ Cookie set: auth=dc%2FGUP20BwziF%2BApGecc0pXB0PF0obi55az63ubAFtsnOOdJPkhfJH2U09yuzQD3WtdmWnydLzFcRA78kwi7Gw%3D%3D; path=/; expires=Thu, 05 Mar 2015 06:00:25 GMT
30
+ Cookie set: ubid=kF05DqFH%2F9hRCOxTz%2Bfb8Q7UV%2FI%3D; path=/; expires=Thu, 05 Mar 2015 06:00:25 GMT
31
+ Browser Load (0.003963) SELECT * FROM browsers WHERE ubid = 'kF05DqFH/9hRCOxTz+fb8Q7UV/I=' LIMIT 1
32
+ Person Load (0.002445) SELECT * FROM people WHERE username = 'looch' AND active = '1' LIMIT 1
33
+ ProfileImage Load (0.001554) SELECT * FROM profile_images WHERE id = 2782 LIMIT 1
34
+ Rendering rss/rss2.0 (200 OK)
35
+ Completed in 0.034519 (28 reqs/sec) | Rendering: 0.011770 (34%) | DB: 0.007962 (23%)
36
+ EOF
37
+ request = request.split "\n"
38
+
39
+ entry = LogParser::LogEntry.new []
40
+
41
+ entry.parse request
42
+ assert_kind_of LogParser::LogEntry, entry
43
+ assert_equal "RssController#uber", entry.page
44
+ assert_equal 3, entry.queries.length
45
+ assert_equal ['Browser Load', 0.003963], entry.queries.first
46
+ assert_equal 0.034519, entry.request_time
47
+ end
48
+
49
+
50
+ def test_parse_when_format_logged
51
+ request = <<EOF
52
+ Processing RssController#uber to xml (for 67.18.200.5 at Mon Mar 07 00:00:25 CST 2005) [GET]
53
+ Parameters: {:id=>"author", :"rss/uber/author.html/uber/author"=>nil, :action=>"uber", :username=>"looch", :controller=>"rss"}
54
+ Cookie set: auth=dc%2FGUP20BwziF%2BApGecc0pXB0PF0obi55az63ubAFtsnOOdJPkhfJH2U09yuzQD3WtdmWnydLzFcRA78kwi7Gw%3D%3D; path=/; expires=Thu, 05 Mar 2015 06:00:25 GMT
55
+ Cookie set: ubid=kF05DqFH%2F9hRCOxTz%2Bfb8Q7UV%2FI%3D; path=/; expires=Thu, 05 Mar 2015 06:00:25 GMT
56
+ Browser Load (0.003963) SELECT * FROM browsers WHERE ubid = 'kF05DqFH/9hRCOxTz+fb8Q7UV/I=' LIMIT 1
57
+ Person Load (0.002445) SELECT * FROM people WHERE username = 'looch' AND active = '1' LIMIT 1
58
+ ProfileImage Load (0.001554) SELECT * FROM profile_images WHERE id = 2782 LIMIT 1
59
+ Rendering rss/rss2.0 (200 OK)
60
+ Completed in 0.034519 (28 reqs/sec) | Rendering: 0.011770 (34%) | DB: 0.007962 (23%)
61
+ EOF
62
+ request = request.split "\n"
63
+
64
+ entry = LogParser::LogEntry.new []
65
+
66
+ entry.parse request
67
+ assert_kind_of LogParser::LogEntry, entry
68
+ assert_equal "GET", entry.verb
69
+ assert_equal "xml", entry.format
70
+ assert_equal "RssController#uber", entry.page
71
+ assert_equal 3, entry.queries.length
72
+ assert_equal ['Browser Load', 0.003963], entry.queries.first
73
+ assert_equal 0.034519, entry.request_time
74
+ end
75
+
76
+ def test_page
77
+ assert_equal "TwinklerController#index", @entry.page
78
+ end
79
+
80
+ def test_ip
81
+ assert_equal "81.109.96.173", @entry.ip
82
+ end
83
+
84
+ def test_time
85
+ assert_equal "Wed Dec 01 16:01:56 CST 2004", @entry.time
86
+ end
87
+
88
+ def test_queries
89
+ expected = []
90
+ expected << ["Browser Load First", 0.001114]
91
+ expected << ["Goal Count", 0.001762]
92
+ assert_equal expected, @entry.queries
93
+ end
94
+
95
+ def test_request_time
96
+ assert_equal 0.616122, @entry.request_time
97
+
98
+ @entry = LogParser::LogEntry.new "Processing TwinklerController#add_thing (for 144.164.232.114 at Wed Dec 01 16:01:56 CST 2004)
99
+ Completed in 0.261485 (3 reqs/sec) | DB: 0.009325 (3%)"
100
+
101
+ assert_equal 0.261485, @entry.request_time
102
+ end
103
+
104
+ def test_render_time
105
+ assert_equal 0.242475, @entry.render_time
106
+
107
+ @entry = LogParser::LogEntry.new "Processing TwinklerController#add_thing (for 144.164.232.114 at Wed Dec 01 16:01:56 CST 2004)
108
+ Completed in 0.261485 (3 reqs/sec) | DB: 0.009325 (3%)"
109
+
110
+ assert_equal 0, @entry.render_time
111
+ end
112
+
113
+ def test_db_time
114
+ assert_equal 0.002876, @entry.db_time
115
+ end
116
+
117
+ end
118
+
119
+ class TestLogParser < Test::Unit::TestCase
120
+
121
+ def test_class_parse
122
+ log = StringIO.new <<-EOF
123
+ Mar 7 00:00:25 online1 rails[59628]: Processing RssController#uber (for 67.18.200.5 at Mon Mar 07 00:00:25 CST 2005)
124
+ Mar 7 00:00:25 online1 rails[59628]: Parameters: {:id=>"author", :"rss/uber/author.html/uber/author"=>nil, :action=>"uber", :username=>"looch", :controller=>"rss"}
125
+ Mar 7 00:00:25 online1 rails[59628]: Cookie set: auth=dc%2FGUP20BwziF%2BApGecc0pXB0PF0obi55az63ubAFtsnOOdJPkhfJH2U09yuzQD3WtdmWnydLzFcRA78kwi7Gw%3D%3D; path=/; expires=Thu, 05 Mar 2015 06:00:25 GMT
126
+ Mar 7 00:00:25 online1 rails[59628]: Cookie set: ubid=kF05DqFH%2F9hRCOxTz%2Bfb8Q7UV%2FI%3D; path=/; expires=Thu, 05 Mar 2015 06:00:25 GMT
127
+ Mar 7 00:00:25 online1 rails[59628]: Browser Load (0.003963) SELECT * FROM browsers WHERE ubid = 'kF05DqFH/9hRCOxTz+fb8Q7UV/I=' LIMIT 1
128
+ Mar 7 00:00:25 online1 rails[59628]: Person Load (0.002445) SELECT * FROM people WHERE username = 'looch' AND active = '1' LIMIT 1
129
+ Mar 7 00:00:25 online1 rails[59628]: ProfileImage Load (0.001554) SELECT * FROM profile_images WHERE id = 2782 LIMIT 1
130
+ Mar 7 00:00:25 online1 rails[59628]: Rendering rss/rss2.0 (200 OK)
131
+ Mar 7 00:00:25 online1 rails[59628]: Completed in 0.034519 (28 reqs/sec) | Rendering: 0.011770 (34%) | DB: 0.007962 (23%)
132
+ EOF
133
+
134
+ entries = []
135
+
136
+ LogParser.parse log do |entry|
137
+ entries << entry
138
+ end
139
+
140
+ assert_equal 1, entries.length
141
+ assert_equal 'RssController#uber', entries.first.page
142
+ end
143
+
144
+ def test_class_parse_components
145
+ log = StringIO.new <<-EOF
146
+ Jul 11 10:05:20 www rails[61243]: Processing ChatroomsController#launch (for 213.152.37.169 at Mon Jul 11 10:05:20 CDT 2005)
147
+ Jul 11 10:05:20 www rails[61243]: Start rendering component ({:action=>"online_count", :controller=>"members"}):
148
+ Jul 11 10:05:20 www rails[34216]: Processing ChatroomsController#launch (for 213.152.37.169 at Mon Jul 11 10:05:20 CDT 2005)
149
+ Jul 11 10:05:20 www rails[34216]: Start rendering component ({:action=>"online_count", :controller=>"members"}):
150
+ Jul 11 10:05:20 www rails[34216]: Processing MembersController#online_count (for 213.152.37.169 at Mon Jul 11 10:05:20 CDT 2005)
151
+ Jul 11 10:05:20 www rails[34216]: Completed in 0.00741 (135 reqs/sec) | DB: 0.00320 (43%)
152
+ Jul 11 10:05:20 www rails[34216]: End of component rendering
153
+ Jul 11 10:05:28 www rails[34216]: Completed in 8.65005 (0 reqs/sec) | Rendering: 8.64820 (99%) | DB: 0.00000 (0%)
154
+ Jul 11 10:05:20 www rails[34216]: Processing ChatroomsController#launch (for 213.152.37.169 at Mon Jul 11 10:05:20 CDT 2005)
155
+ Jul 11 10:05:20 www rails[34216]: Start rendering component ({:action=>"online_count", :controller=>"members"}):
156
+ Jul 11 10:05:20 www rails[34216]: Processing MembersController#online_count (for 213.152.37.169 at Mon Jul 11 10:05:20 CDT 2005)
157
+ Jul 11 10:05:20 www rails[34216]: Completed in 0.00741 (135 reqs/sec) | DB: 0.00320 (43%)
158
+ Jul 11 10:05:20 www rails[34216]: End of component rendering
159
+ Jul 11 10:05:28 www rails[34216]: Completed in 8.65005 (0 reqs/sec) | Rendering: 8.64820 (99%) | DB: 0.00000 (0%)
160
+ Jul 11 10:05:20 www rails[61243]: Processing MembersController#online_count (for 213.152.37.169 at Mon Jul 11 10:05:20 CDT 2005)
161
+ Jul 11 10:05:20 www rails[61243]: Completed in 0.00741 (135 reqs/sec) | DB: 0.00320 (43%)
162
+ Jul 11 10:05:20 www rails[61243]: End of component rendering
163
+ Jul 11 10:05:28 www rails[61243]: Completed in 8.65005 (0 reqs/sec) | Rendering: 8.64820 (99%) | DB: 0.00000 (0%)
164
+ EOF
165
+
166
+ entries = []
167
+ LogParser.parse(log) { |entry| entries << entry }
168
+
169
+ assert_equal 3, entries.length
170
+ assert_equal 'ChatroomsController#launch', entries.first.page
171
+ assert_equal 8.65005, entries.first.request_time
172
+ end
173
+
174
+ def test_class_parse_entries_with_pre_processing_garbage
175
+ log = StringIO.new <<-EOF
176
+ Jan 03 12:51:34 duo2 rails[4347]: Font Load (0.000475) SELECT * FROM fonts ORDER BY name 
177
+ Jan 03 12:51:34 duo2 rails[4347]: Processing StylesheetsController#show (for 127.0.0.1 at 2007-01-03 12:51:34) [GET]
178
+ Jan 03 12:51:34 duo2 rails[4347]: Parameters: {"action"=>"show", "id"=>"1", "controller"=>"stylesheets"}
179
+ Jan 03 12:51:34 duo2 rails[4347]: Newspaper Load (0.000970) SELECT newspapers.* FROM newspapers INNER JOIN users ON newspapers.editor_in_chief = users.id WHERE (users.login = 'geoff') LIMIT 1
180
+ Jan 03 12:51:34 duo2 rails[4347]: Layout Load (0.000501) SELECT * FROM layouts WHERE (layouts.id = 1) LIMIT 1
181
+ Jan 03 12:51:34 duo2 rails[4347]: Completed in 0.00807 (123 reqs/sec) | Rendering: 0.00006 (0%) | DB: 0.00195 (24%) | 200 OK [http://geoff.localhost.com/stylesheets/show/1/styles.css]
182
+ EOF
183
+
184
+ entries = []
185
+ LogParser.parse(log) { |entry| entries << entry }
186
+
187
+ assert_equal 1, entries.length, "Number of entries was incorrect"
188
+ assert_equal 'StylesheetsController#show', entries.first.page
189
+ assert_equal 0.00807, entries.first.request_time
190
+ end
191
+
192
+ def test_class_parse_rails_engines_plugin
193
+ log = StringIO.new <<-EOF
194
+ Jan 03 12:24:21 duo2 rails[4277]: Trying to start engine 'login_engine' from '/Users/topfunky/web/rails/repos/roughunderbelly/vendor/plugins/login_engine'
195
+ Jan 03 12:24:21 duo2 rails[4277]: adding /Users/topfunky/web/rails/repos/roughunderbelly/vendor/plugins/login_engine/lib/login_engine to the load path
196
+ Jan 03 12:24:21 duo2 rails[4277]: adding /Users/topfunky/web/rails/repos/roughunderbelly/vendor/plugins/login_engine/app/views/user_notify to the load path
197
+ Jan 03 12:24:21 duo2 rails[4277]: adding /Users/topfunky/web/rails/repos/roughunderbelly/vendor/plugins/login_engine/app/views/user to the load path
198
+ Jan 03 12:24:21 duo2 rails[4277]: adding /Users/topfunky/web/rails/repos/roughunderbelly/vendor/plugins/login_engine/app/views to the load path
199
+ Jan 03 12:24:21 duo2 rails[4277]: adding /Users/topfunky/web/rails/repos/roughunderbelly/vendor/plugins/login_engine/app/models to the load path
200
+ Jan 03 12:24:21 duo2 rails[4277]: adding /Users/topfunky/web/rails/repos/roughunderbelly/vendor/plugins/login_engine/app/helpers to the load path
201
+ Jan 03 12:24:21 duo2 rails[4277]: adding /Users/topfunky/web/rails/repos/roughunderbelly/vendor/plugins/login_engine/app/controllers to the load path
202
+ Jan 03 12:24:21 duo2 rails[4277]: Attempting to copy public engine files from '/Users/topfunky/web/rails/repos/roughunderbelly/config/../vendor/plugins/login_engine/public'
203
+ Jan 03 12:24:21 duo2 rails[4277]: source dirs: ["/Users/topfunky/web/rails/repos/roughunderbelly/config/../vendor/plugins/login_engine/public/stylesheets"]
204
+ Jan 03 12:24:22 duo2 rails[4277]: finally loading from application: 'exception_notifier.rb'
205
+ Jan 03 12:24:22 duo2 rails[4277]: requiring file 'exception_notifier_helper'
206
+ Jan 03 12:24:22 duo2 rails[4277]: checking 'login_engine' for /Users/topfunky/web/rails/repos/roughunderbelly/config/../vendor/plugins/login_engine/exception_notifier_helper.rb
207
+ Jan 03 12:24:22 duo2 rails[4277]: finally loading from application: 'exception_notifier_helper.rb'
208
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: '/Users/topfunky/web/rails/repos/roughunderbelly/config/../app/controllers/application.rb'
209
+ Jan 03 12:24:23 duo2 rails[4277]: requiring file 'application_helper'
210
+ Jan 03 12:24:23 duo2 rails[4277]: checking 'login_engine' for /Users/topfunky/web/rails/repos/roughunderbelly/config/../vendor/plugins/login_engine/application_helper.rb
211
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'application_helper.rb'
212
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'exception_notifiable.rb'
213
+ Jan 03 12:24:23 duo2 rails[4277]: requiring file 'user_helper'
214
+ Jan 03 12:24:23 duo2 rails[4277]: checking 'login_engine' for /Users/topfunky/web/rails/repos/roughunderbelly/config/../vendor/plugins/login_engine/user_helper.rb
215
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'user_helper.rb'
216
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'user.rb'
217
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'task.rb'
218
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'client.rb'
219
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'email.rb'
220
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'worth.rb'
221
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'column_pref.rb'
222
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'timer.rb'
223
+ Jan 03 12:24:23 duo2 rails[4277]: requiring file '/Users/topfunky/web/rails/repos/roughunderbelly/config/../app/controllers/tasks_controller.rb'
224
+ Jan 03 12:24:23 duo2 rails[4277]: detected RAILS_ROOT, rewriting to 'app/controllers/tasks_controller.rb'
225
+ Jan 03 12:24:23 duo2 rails[4277]: checking 'login_engine' for /Users/topfunky/web/rails/repos/roughunderbelly/config/../vendor/plugins/login_engine/app/controllers/tasks_controller.rb
226
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: '/Users/topfunky/web/rails/repos/roughunderbelly/config/../app/controllers/tasks_controller.rb'
227
+ Jan 03 12:24:23 duo2 rails[4277]: requiring file 'tasks_helper'
228
+ Jan 03 12:24:23 duo2 rails[4277]: checking 'login_engine' for /Users/topfunky/web/rails/repos/roughunderbelly/config/../vendor/plugins/login_engine/tasks_helper.rb
229
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'tasks_helper.rb'
230
+ Jan 03 12:24:23 duo2 rails[4277]: requiring file 'sparklines_helper'
231
+ Jan 03 12:24:23 duo2 rails[4277]: checking 'login_engine' for /Users/topfunky/web/rails/repos/roughunderbelly/config/../vendor/plugins/login_engine/sparklines_helper.rb
232
+ Jan 03 12:24:23 duo2 rails[4277]: finally loading from application: 'sparklines_helper.rb'
233
+ Jan 03 12:24:24 duo2 rails[4277]: SQL (0.000072) BEGIN
234
+ Jan 03 12:24:24 duo2 rails[4277]: SQL (0.000240) INSERT INTO sessions (`updated_at`, `session_id`, `data`) VALUES('2007-01-03 20:24:24', 'bdbb75323d5da69f707d5576e907706e', 'BAh7AA==\n')
235
+ Jan 03 12:24:24 duo2 rails[4277]: SQL (0.000400) COMMIT
236
+ Jan 03 12:24:24 duo2 rails[4277]: Processing TasksController#index (for 127.0.0.1 at 2007-01-03 12:24:24) [GET]
237
+ Jan 03 12:24:24 duo2 rails[4277]: Parameters: {"action"=>"index", "controller"=>"tasks"}
238
+ Jan 03 12:24:24 duo2 rails[4277]: Redirected to http://localhost:3000/tasks/list
239
+ Jan 03 12:24:24 duo2 rails[4277]: Completed in 0.00112 (896 reqs/sec) | DB: 0.00071 (63%) | 302 Found [http://localhost/]
240
+ EOF
241
+
242
+ entries = []
243
+ LogParser.parse(log) { |entry| entries << entry }
244
+
245
+ assert_equal 1, entries.length, "The number of entries was incorrect"
246
+ assert_equal 'TasksController#index', entries.first.page
247
+ assert_equal 0.00112, entries.first.request_time
248
+ end
249
+
250
+ def test_class_parse_multi
251
+ entries = []
252
+ open 'test/test.syslog.log' do |io|
253
+ LogParser.parse io do |entry|
254
+ entries << entry
255
+ end
256
+ end
257
+
258
+ assert_equal 12, entries.length
259
+ assert_equal 'RssController#uber', entries.first.page
260
+
261
+ redirect = entries[5]
262
+ assert_equal 'TeamsController#progress', redirect.page
263
+ assert_equal 0, redirect.render_time
264
+
265
+ second_last = entries[-2]
266
+ assert_equal 'PeopleController#progress', second_last.page
267
+ assert_equal 0, second_last.request_time
268
+
269
+ last = entries.last
270
+ assert_equal nil, last.page
271
+ end
272
+
273
+ def test_class_parse_0_14_x
274
+ entries = []
275
+ open 'test/test.syslog.0.14.x.log' do |io|
276
+ LogParser.parse io do |entry|
277
+ entries << entry
278
+ end
279
+ end
280
+ end
281
+
282
+ end
283
+
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nbogie-production_log_analyzer
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 5
8
+ - 1
9
+ - 1
10
+ version: 1.5.1.1
11
+ platform: ruby
12
+ authors:
13
+ - Eric Hodel
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-06-10 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rails_analyzer_tools
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 4
31
+ - 0
32
+ version: 1.4.0
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rubyforge
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 2
44
+ - 0
45
+ - 4
46
+ version: 2.0.4
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: hoe
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 2
58
+ - 6
59
+ - 0
60
+ version: 2.6.0
61
+ type: :development
62
+ version_requirements: *id003
63
+ description: |-
64
+ production_log_analyzer lets you find out which actions on a Rails
65
+ site are slowing you down.
66
+
67
+ Bug reports:
68
+
69
+ http://rubyforge.org/tracker/?func=add&group_id=1513&atid=5921
70
+ email:
71
+ - drbrain@segment7.net
72
+ executables:
73
+ - action_errors
74
+ - action_grep
75
+ - pl_analyze
76
+ extensions: []
77
+
78
+ extra_rdoc_files:
79
+ - History.txt
80
+ - LICENSE.txt
81
+ - Manifest.txt
82
+ - README.txt
83
+ files:
84
+ - History.txt
85
+ - LICENSE.txt
86
+ - Manifest.txt
87
+ - README.txt
88
+ - Rakefile
89
+ - bin/action_errors
90
+ - bin/action_grep
91
+ - bin/pl_analyze
92
+ - lib/production_log/action_grep.rb
93
+ - lib/production_log/analyzer.rb
94
+ - lib/production_log/parser.rb
95
+ - test/test.syslog.0.14.x.log
96
+ - test/test.syslog.1.2.shortname.log
97
+ - test/test.syslog.empty.log
98
+ - test/test.syslog.log
99
+ - test/test_action_grep.rb
100
+ - test/test_analyzer.rb
101
+ - test/test_parser.rb
102
+ has_rdoc: true
103
+ homepage: http://seattlerb.rubyforge.org/production_log_analyzer
104
+ licenses: []
105
+
106
+ post_install_message:
107
+ rdoc_options:
108
+ - --main
109
+ - README.txt
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ requirements: []
127
+
128
+ rubyforge_project: nbogie-production_log_analyzer
129
+ rubygems_version: 1.3.6
130
+ signing_key:
131
+ specification_version: 3
132
+ summary: production_log_analyzer lets you find out which actions on a Rails site are slowing you down
133
+ test_files:
134
+ - test/test_parser.rb
135
+ - test/test_analyzer.rb
136
+ - test/test_action_grep.rb