low 0.0.7 → 0.0.8
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/.gitignore +1 -0
- data/lib/low/middleware/request_id.rb +39 -0
- data/lib/low/middleware/request_logger.rb +1 -1
- data/lib/low/version.rb +1 -1
- data/lib/low.rb +1 -0
- data/spec/low/middleware/request_id_spec.rb +29 -0
- metadata +4 -1
data/.gitignore
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Low
|
2
|
+
module Middleware
|
3
|
+
# `RequestId` adds a value for env["request_id"]. `RequestLogger`, for one,
|
4
|
+
# uses this value to scope the logger it instantiates.
|
5
|
+
class RequestId
|
6
|
+
@@request_id = 0
|
7
|
+
|
8
|
+
VALID_REQUEST_ID_REGEX = /^[a-zA-Z0-9\s\-_]*$/
|
9
|
+
|
10
|
+
def self.is_valid?(id)
|
11
|
+
id =~ VALID_REQUEST_ID_REGEX
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(app)
|
15
|
+
@app = app
|
16
|
+
|
17
|
+
#generate a request ID (not too worried about uniqueness here).
|
18
|
+
@current_request_id = (@@request_id += 1)
|
19
|
+
end
|
20
|
+
|
21
|
+
def call(env)
|
22
|
+
# If there is a request_id parameter,
|
23
|
+
req = Rack::Request.new(env)
|
24
|
+
|
25
|
+
# and it's valid, use it;
|
26
|
+
if req['request_id'] and RequestId.is_valid?(req['request_id'])
|
27
|
+
env['useless.request_id'] = req['request_id']
|
28
|
+
|
29
|
+
# otherwise, use the generated one
|
30
|
+
else
|
31
|
+
env['useless.request_id'] = @current_request_id.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
# and call the app.
|
35
|
+
@app.call(env)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -7,7 +7,7 @@ module Low
|
|
7
7
|
# the log directory, otherwise use STDOUT (as Heroku likes).
|
8
8
|
# * _log_level_: If set, use the LOG_LEVEL environment variable value;
|
9
9
|
# otherwise, use INFO.
|
10
|
-
# * _group_key_: Use request_id env value.
|
10
|
+
# * _group_key_: Use request_id env value (see the RequestId middleware).
|
11
11
|
class RequestLogger
|
12
12
|
def self.level
|
13
13
|
# If `LOG_LEVEL` is a valid level other than INFO,
|
data/lib/low/version.rb
CHANGED
data/lib/low.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe Low::Middleware::RequestId do
|
4
|
+
def app
|
5
|
+
app = lambda do |env|
|
6
|
+
[200, {'Content-Type' => 'text/plain'}, ['Request Id: ' + env['useless.request_id']]]
|
7
|
+
end
|
8
|
+
|
9
|
+
Low::Middleware::RequestId.new(app)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should add a request ID to the env while proxying transparently' do
|
13
|
+
res = Rack::MockRequest.new(app).get('http://useless.info')
|
14
|
+
res.should be_ok
|
15
|
+
res.body.should =~ /Request Id: [a-z0-9]{1,}/
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should use the ID specified in the query parameter' do
|
19
|
+
res = Rack::MockRequest.new(app).get('http://useless.info?request_id=jah')
|
20
|
+
res.should be_ok
|
21
|
+
res.body.should == 'Request Id: jah'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should not use the ID specified it does not have "simple" characters' do
|
25
|
+
res = Rack::MockRequest.new(app).get('http://useless.info?request_id=(jah)')
|
26
|
+
res.should be_ok
|
27
|
+
res.body.should_not == 'Request Id: (jah)'
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: low
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- README.md
|
106
106
|
- Rakefile
|
107
107
|
- lib/low.rb
|
108
|
+
- lib/low/middleware/request_id.rb
|
108
109
|
- lib/low/middleware/request_logger.rb
|
109
110
|
- lib/low/middleware/subdomain_map.rb
|
110
111
|
- lib/low/mongo.rb
|
@@ -113,6 +114,7 @@ files:
|
|
113
114
|
- lib/low/scoped_logger.rb
|
114
115
|
- lib/low/version.rb
|
115
116
|
- low.gemspec
|
117
|
+
- spec/low/middleware/request_id_spec.rb
|
116
118
|
- spec/low/middleware/request_logger_spec.rb
|
117
119
|
- spec/low/middleware/subdomain_map_spec.rb
|
118
120
|
- spec/low/mongo/util_spec.rb
|
@@ -144,6 +146,7 @@ signing_key:
|
|
144
146
|
specification_version: 3
|
145
147
|
summary: A low-level utility library.
|
146
148
|
test_files:
|
149
|
+
- spec/low/middleware/request_id_spec.rb
|
147
150
|
- spec/low/middleware/request_logger_spec.rb
|
148
151
|
- spec/low/middleware/subdomain_map_spec.rb
|
149
152
|
- spec/low/mongo/util_spec.rb
|