racknga 0.9.2 → 0.9.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.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -12
  3. data/README.textile +9 -8
  4. data/Rakefile +19 -272
  5. data/doc/text/news.textile +20 -0
  6. data/lib/racknga/access_log_parser.rb +147 -0
  7. data/lib/racknga/api-keys.rb +40 -0
  8. data/lib/racknga/cache_database.rb +15 -5
  9. data/lib/racknga/exception_mail_notifier.rb +6 -6
  10. data/lib/racknga/log_database.rb +2 -1
  11. data/lib/racknga/log_entry.rb +85 -0
  12. data/lib/racknga/middleware/auth/api-key.rb +95 -0
  13. data/lib/racknga/middleware/cache.rb +22 -8
  14. data/lib/racknga/middleware/deflater.rb +13 -3
  15. data/lib/racknga/middleware/exception_notifier.rb +1 -2
  16. data/lib/racknga/middleware/instance_name.rb +92 -9
  17. data/lib/racknga/middleware/jsonp.rb +25 -5
  18. data/lib/racknga/middleware/log.rb +8 -3
  19. data/lib/racknga/middleware/nginx_raw_uri.rb +65 -0
  20. data/lib/racknga/middleware/range.rb +1 -1
  21. data/lib/racknga/reverse_line_reader.rb +1 -1
  22. data/lib/racknga/utils.rb +1 -1
  23. data/lib/racknga/version.rb +2 -2
  24. data/lib/racknga.rb +4 -2
  25. data/munin/plugins/passenger_application_ +61 -47
  26. data/munin/plugins/passenger_status +64 -33
  27. data/test/racknga-test-utils.rb +2 -1
  28. data/test/run-test.rb +1 -3
  29. data/test/{test-nginx-log-parser.rb → test-access-log-parser.rb} +115 -26
  30. data/test/test-api-keys.rb +80 -0
  31. data/test/test-middleware-auth-api-key.rb +144 -0
  32. data/test/test-middleware-cache.rb +1 -1
  33. data/test/test-middleware-instance-name.rb +50 -16
  34. data/test/test-middleware-jsonp.rb +14 -2
  35. data/test/test-middleware-nginx-raw-uri.rb +70 -0
  36. data/test/test-middleware-range.rb +1 -1
  37. metadata +159 -155
  38. data/lib/racknga/nginx_access_log_parser.rb +0 -139
  39. data/lib/racknga/will_paginate.rb +0 -48
metadata CHANGED
@@ -1,213 +1,217 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: racknga
3
- version: !ruby/object:Gem::Version
4
- hash: 63
5
- prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 2
10
- version: 0.9.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.4
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Kouhei Sutou
14
- autorequire:
8
+ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-08-06 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- hash: 3
27
- segments:
28
- - 0
29
- version: "0"
30
- name: rroonga
31
- prerelease: false
32
- type: :runtime
33
- requirement: *id001
34
- - !ruby/object:Gem::Dependency
35
- version_requirements: &id002 !ruby/object:Gem::Requirement
36
- none: false
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- hash: 3
41
- segments:
42
- - 0
43
- version: "0"
11
+ date: 2023-09-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
44
14
  name: rack
45
- prerelease: false
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
46
20
  type: :runtime
47
- requirement: *id002
48
- - !ruby/object:Gem::Dependency
49
- version_requirements: &id003 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- hash: 3
55
- segments:
56
- - 0
57
- version: "0"
58
- name: test-unit
59
21
  prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: RedCloth
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
60
34
  type: :development
61
- requirement: *id003
62
- - !ruby/object:Gem::Dependency
63
- version_requirements: &id004 !ruby/object:Gem::Requirement
64
- none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- hash: 3
69
- segments:
70
- - 0
71
- version: "0"
72
- name: test-unit-notify
73
35
  prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
74
48
  type: :development
75
- requirement: *id004
76
- - !ruby/object:Gem::Dependency
77
- version_requirements: &id005 !ruby/object:Gem::Requirement
78
- none: false
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- hash: 3
83
- segments:
84
- - 0
85
- version: "0"
86
- name: test-unit-capybara
87
49
  prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: packnga
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
88
62
  type: :development
89
- requirement: *id005
90
- - !ruby/object:Gem::Dependency
91
- version_requirements: &id006 !ruby/object:Gem::Requirement
92
- none: false
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- hash: 3
97
- segments:
98
- - 0
99
- version: "0"
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
100
70
  name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rroonga
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
101
91
  prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: test-unit
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
102
104
  type: :development
103
- requirement: *id006
104
- - !ruby/object:Gem::Dependency
105
- version_requirements: &id007 !ruby/object:Gem::Requirement
106
- none: false
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- hash: 3
111
- segments:
112
- - 0
113
- version: "0"
114
- name: jeweler
115
105
  prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: test-unit-capybara
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
116
118
  type: :development
117
- requirement: *id007
118
- - !ruby/object:Gem::Dependency
119
- version_requirements: &id008 !ruby/object:Gem::Requirement
120
- none: false
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- hash: 3
125
- segments:
126
- - 0
127
- version: "0"
128
- name: yard
129
119
  prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: test-unit-notify
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
130
132
  type: :development
131
- requirement: *id008
132
- description: Racknga is a Rack middlewares that uses rroonga features.
133
- email:
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Racknga is a Rack middlewares that uses Rroonga features.
140
+ email:
134
141
  - kou@clear-code.com
135
142
  executables: []
136
-
137
143
  extensions: []
138
-
139
- extra_rdoc_files:
144
+ extra_rdoc_files:
140
145
  - README.textile
141
- files:
146
+ files:
142
147
  - AUTHORS
143
148
  - Gemfile
144
149
  - README.textile
145
150
  - Rakefile
146
151
  - doc/text//news.textile
147
152
  - lib/racknga.rb
153
+ - lib/racknga/access_log_parser.rb
154
+ - lib/racknga/api-keys.rb
148
155
  - lib/racknga/cache_database.rb
149
156
  - lib/racknga/exception_mail_notifier.rb
150
157
  - lib/racknga/log_database.rb
158
+ - lib/racknga/log_entry.rb
159
+ - lib/racknga/middleware/auth/api-key.rb
151
160
  - lib/racknga/middleware/cache.rb
152
161
  - lib/racknga/middleware/deflater.rb
153
162
  - lib/racknga/middleware/exception_notifier.rb
154
163
  - lib/racknga/middleware/instance_name.rb
155
164
  - lib/racknga/middleware/jsonp.rb
156
165
  - lib/racknga/middleware/log.rb
166
+ - lib/racknga/middleware/nginx_raw_uri.rb
157
167
  - lib/racknga/middleware/range.rb
158
- - lib/racknga/nginx_access_log_parser.rb
159
168
  - lib/racknga/reverse_line_reader.rb
160
169
  - lib/racknga/utils.rb
161
170
  - lib/racknga/version.rb
162
- - lib/racknga/will_paginate.rb
163
171
  - license/lgpl-2.1.txt
164
172
  - munin/plugins/passenger_application_
165
173
  - munin/plugins/passenger_status
166
- - test/test-middleware-jsonp.rb
167
174
  - test/racknga-test-utils.rb
168
- - test/test-middleware-range.rb
169
175
  - test/run-test.rb
170
- - test/test-middleware-instance-name.rb
176
+ - test/test-access-log-parser.rb
177
+ - test/test-api-keys.rb
178
+ - test/test-middleware-auth-api-key.rb
171
179
  - test/test-middleware-cache.rb
172
- - test/test-nginx-log-parser.rb
173
- homepage: http://groonga.rubyforge.org/
174
- licenses:
180
+ - test/test-middleware-instance-name.rb
181
+ - test/test-middleware-jsonp.rb
182
+ - test/test-middleware-nginx-raw-uri.rb
183
+ - test/test-middleware-range.rb
184
+ homepage: http://ranguba.org/
185
+ licenses:
175
186
  - LGPLv2.1 or later
176
- post_install_message:
187
+ metadata: {}
188
+ post_install_message:
177
189
  rdoc_options: []
178
-
179
- require_paths:
190
+ require_paths:
180
191
  - lib
181
- required_ruby_version: !ruby/object:Gem::Requirement
182
- none: false
183
- requirements:
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
184
194
  - - ">="
185
- - !ruby/object:Gem::Version
186
- hash: 3
187
- segments:
188
- - 0
189
- version: "0"
190
- required_rubygems_version: !ruby/object:Gem::Requirement
191
- none: false
192
- requirements:
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
193
199
  - - ">="
194
- - !ruby/object:Gem::Version
195
- hash: 3
196
- segments:
197
- - 0
198
- version: "0"
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
199
202
  requirements: []
200
-
201
- rubyforge_project: groonga
202
- rubygems_version: 1.7.2
203
- signing_key:
204
- specification_version: 3
205
- summary: A Rack middleware collection for rroonga features.
206
- test_files:
207
- - test/test-middleware-jsonp.rb
203
+ rubygems_version: 3.5.0.dev
204
+ signing_key:
205
+ specification_version: 4
206
+ summary: A Rack middleware collection for Rroonga features.
207
+ test_files:
208
208
  - test/racknga-test-utils.rb
209
- - test/test-middleware-range.rb
210
209
  - test/run-test.rb
211
- - test/test-middleware-instance-name.rb
210
+ - test/test-access-log-parser.rb
211
+ - test/test-api-keys.rb
212
+ - test/test-middleware-auth-api-key.rb
212
213
  - test/test-middleware-cache.rb
213
- - test/test-nginx-log-parser.rb
214
+ - test/test-middleware-instance-name.rb
215
+ - test/test-middleware-jsonp.rb
216
+ - test/test-middleware-nginx-raw-uri.rb
217
+ - test/test-middleware-range.rb
@@ -1,139 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2011 Ryo Onodera <onodera@clear-code.com>
4
- #
5
- # This library is free software; you can redistribute it and/or
6
- # modify it under the terms of the GNU Lesser General Public
7
- # License as published by the Free Software Foundation; either
8
- # version 2.1 of the License, or (at your option) any later version.
9
- #
10
- # This library is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- # Lesser General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU Lesser General Public
16
- # License along with this library; if not, write to the Free Software
17
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
-
19
- require "racknga/reverse_line_reader"
20
-
21
- module Racknga
22
- # Supported formats:
23
- # * combined (default format)
24
- # * combined_with_time (custom format for Passenger)
25
- #
26
- # Configurations in nginx:
27
- # * combined
28
- # log_format combined '$remote_addr - $remote_user [$time_local] '
29
- # '"$request" $status $body_bytes_sent '
30
- # '"$http_referer" "$http_user_agent"';
31
- # access_log log/access.log combined
32
- #
33
- # * combined_with_time
34
- # log_format combined_with_time '$remote_addr - $remote_user '
35
- # '[$time_local, $upstream_http_x_runtime, $request_time] '
36
- # '"$request" $status $body_bytes_sent '
37
- # '"$http_referer" "$http_user_agent"';
38
- # access_log log/access.log combined_with_time
39
- class NginxAccessLogParser
40
- include Enumerable
41
-
42
- class FormatError < StandardError
43
- end
44
-
45
- def initialize(line_reader)
46
- @line_reader = line_reader
47
- end
48
-
49
- def each
50
- @line_reader.each do |line|
51
- line.force_encoding("UTF-8")
52
- yield(parse_line(line)) if line.valid_encoding?
53
- end
54
- end
55
-
56
- REMOTE_ADDRESS = '(?:\d{1,3}\.){3}\d{1,3}'
57
- REMOTE_USER = '[^ ]+'
58
- TIME_LOCAL = '[^ ]+ \+\d{4}'
59
- RUNTIME = '(?:[\d.]+|-)'
60
- REQUEST_TIME = '[\d.]+'
61
- REQUEST = '.*?'
62
- STATUS = '\d{3}'
63
- BODY_BYTES_SENT = '\d+'
64
- HTTP_REFERER = '.*?'
65
- HTTP_USER_AGENT = '(?:\\"|[^\"])*?' # '
66
- LOG_FORMAT =
67
- /\A(#{REMOTE_ADDRESS}) - (#{REMOTE_USER}) \[(#{TIME_LOCAL})(?:, (#{RUNTIME}), (#{REQUEST_TIME}))?\] "(#{REQUEST})" (#{STATUS}) (#{BODY_BYTES_SENT}) "(#{HTTP_REFERER})" "(#{HTTP_USER_AGENT})"\n\z/
68
- def parse_line(line)
69
- if line =~ LOG_FORMAT
70
- last_match = Regexp.last_match
71
- options = {}
72
- options[:remote_address] = last_match[1]
73
- options[:remote_user] = last_match[2]
74
- parse_time_local(last_match[3], options)
75
- options[:runtime] = last_match[4].to_f
76
- options[:request_time] = last_match[5].to_f
77
- options[:request] = last_match[6]
78
- options[:status] = last_match[7].to_i
79
- options[:body_bytes_sent] = last_match[8].to_i
80
- options[:http_referer] = last_match[9]
81
- options[:http_user_agent] = last_match[10]
82
- LogEntry.new(options)
83
- else
84
- raise FormatError.new("ill-formatted log entry: #{line.inspect} !~ #{LOG_FORMAT}")
85
- end
86
- end
87
-
88
- def parse_time_local(token, options)
89
- day, month, year, hour, minute, second, _time_zone = token.split(/[\/: ]/)
90
- options[:time_local] = Time.local(year, month, day, hour, minute, second)
91
- end
92
- end
93
-
94
- class ReversedNginxAccessLogParser < NginxAccessLogParser
95
- def initialize(line_reader)
96
- @line_reader = ReverseLineReader.new(line_reader)
97
- end
98
- end
99
-
100
- class LogEntry
101
- ATTRIBUTES = [
102
- :remote_address,
103
- :remote_user,
104
- :time_local,
105
- :runtime,
106
- :request_time,
107
- :request,
108
- :status,
109
- :body_bytes_sent,
110
- :http_referer,
111
- :http_user_agent,
112
- ]
113
-
114
- attr_reader(*ATTRIBUTES)
115
- def initialize(options=nil)
116
- options ||= {}
117
- @remote_address = options[:remote_address]
118
- @remote_user = options[:remote_user]
119
- @time_local = options[:time_local] || Time.at(0)
120
- @runtime = options[:runtime] || 0.0
121
- @request_time = options[:request_time] || 0.0
122
- @request = options[:request]
123
- @status = options[:status]
124
- @body_bytes_sent = options[:body_bytes_sent]
125
- @http_referer = options[:http_referer]
126
- @http_user_agent = options[:http_user_agent]
127
- end
128
-
129
- def attributes
130
- ATTRIBUTES.collect do |attribute|
131
- __send__(attribute)
132
- end
133
- end
134
-
135
- def ==(other)
136
- attributes == other.attributes
137
- end
138
- end
139
- end
@@ -1,48 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2010 SHIMODA Hiroshi <shimoda@clear-code.com>
4
- #
5
- # This library is free software; you can redistribute it and/or
6
- # modify it under the terms of the GNU Lesser General Public
7
- # License as published by the Free Software Foundation; either
8
- # version 2.1 of the License, or (at your option) any later version.
9
- #
10
- # This library is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- # Lesser General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU Lesser General Public
16
- # License along with this library; if not, write to the Free Software
17
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
-
19
- require "groonga"
20
-
21
- module Groonga
22
- # @deprecated since 0.9.2. Use Kaminari instead of will_paginate.
23
- module WillPaginateAPI
24
- def total_pages
25
- n_pages
26
- end
27
-
28
- def per_page
29
- n_records_in_page
30
- end
31
-
32
- def total_entries
33
- n_records
34
- end
35
-
36
- def out_of_bounds?
37
- current_page > total_pages
38
- end
39
-
40
- def offset
41
- (start_offset || 0) - 1
42
- end
43
- end
44
-
45
- module Pagination
46
- include WillPaginateAPI
47
- end
48
- end