clogger 2.0.1 → 2.0.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/GIT-VERSION-GEN +1 -1
  3. data/lib/clogger/pure.rb +19 -8
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85af41cf4cb499a42ed7dbd0fa83176b587e7897
4
- data.tar.gz: 363e963d851ffc22fc5947b859eac866c8c4f129
3
+ metadata.gz: dd4966f902d26e1a0037ddf465336678a0d342ed
4
+ data.tar.gz: b2f531772d210d2823187a8de8c76a1f8cdf0387
5
5
  SHA512:
6
- metadata.gz: be050e0aa75fa61a11505d0bc677cfbcbbcf7675ecb87fed56e511636db0cb85fc76cfda5e041d8c8dfb2f46c8cae14e0a3e9f76e5fb1d6812eedd156001c56e
7
- data.tar.gz: 22da33f482565c5d9fc63d3f6a3279ba3c02dac61d634cad93e5221132831d30a0cea0ba02a829be984061bfa0c28b96edd6ee6ad0c5762c6f27e5cbdf17fca9
6
+ metadata.gz: aa24a2c1f213548c32055f04bbeb1e113ec063d27f77fb264ae121cb865aba887f525366a52cc375731be2f121a5dc102053b1ee146deb3c21e2f33ba5d209e0
7
+ data.tar.gz: 618537067d02ef74554bc5355b0364c5bb4260212ee7b6cca218fe74a683cfed4e88ce3d0c257d9d45e14a1826044368c373c34e79e977c73a67f3fbf2d867ce
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v2.0.1
4
+ DEF_VER=v2.0.2
5
5
 
6
6
  LF='
7
7
  '
@@ -6,7 +6,7 @@
6
6
  class Clogger
7
7
 
8
8
  attr_accessor :env, :status, :headers, :body
9
- attr_writer :body_bytes_sent
9
+ attr_writer :body_bytes_sent, :start
10
10
 
11
11
  def initialize(app, opts = {})
12
12
  # trigger autoload to avoid thread-safety issues later on
@@ -28,10 +28,10 @@ class Clogger
28
28
  end
29
29
 
30
30
  def call(env)
31
- @start = Time.now
31
+ start = mono_now
32
32
  resp = @app.call(env)
33
33
  unless resp.instance_of?(Array) && resp.size == 3
34
- log(env, 500, {})
34
+ log(env, 500, {}, start)
35
35
  raise TypeError, "app response not a 3 element Array: #{resp.inspect}"
36
36
  end
37
37
  status, headers, body = resp
@@ -39,13 +39,14 @@ class Clogger
39
39
  if @wrap_body
40
40
  @reentrant = env['rack.multithread'] if @reentrant.nil?
41
41
  wbody = @reentrant ? self.dup : self
42
+ wbody.start = start
42
43
  wbody.env = env
43
44
  wbody.status = status
44
45
  wbody.headers = headers
45
46
  wbody.body = body
46
47
  return [ status, headers, wbody ]
47
48
  end
48
- log(env, status, headers)
49
+ log(env, status, headers, start)
49
50
  [ status, headers, body ]
50
51
  end
51
52
 
@@ -60,8 +61,8 @@ class Clogger
60
61
 
61
62
  def close
62
63
  @body.close if @body.respond_to?(:close)
63
- ensure
64
- log(@env, @status, @headers)
64
+ ensure
65
+ log(@env, @status, @headers)
65
66
  end
66
67
 
67
68
  def reentrant?
@@ -153,7 +154,7 @@ private
153
154
  format % [ sec, usec / div ]
154
155
  end
155
156
 
156
- def log(env, status, headers)
157
+ def log(env, status, headers, start = @start)
157
158
  str = @fmt_ops.map { |op|
158
159
  case op[0]
159
160
  when OP_LITERAL; op[1]
@@ -164,7 +165,7 @@ private
164
165
  when OP_TIME_LOCAL; Time.now.strftime(op[1])
165
166
  when OP_TIME_UTC; Time.now.utc.strftime(op[1])
166
167
  when OP_REQUEST_TIME
167
- t = Time.now - @start
168
+ t = mono_now - start
168
169
  time_format(t.to_i, (t - t.to_i) * 1000000, op[1], op[2])
169
170
  when OP_TIME
170
171
  t = Time.now
@@ -184,4 +185,14 @@ private
184
185
  end
185
186
  nil
186
187
  end
188
+
189
+ # favor monotonic clock if possible, and try to use clock_gettime in
190
+ # more recent Rubies since it generates less garbage
191
+ if defined?(Process::CLOCK_MONOTONIC)
192
+ def mono_now; Process.clock_gettime(Process::CLOCK_MONOTONIC); end
193
+ elsif defined?(Process::CLOCK_REALTIME)
194
+ def mono_now; Process.clock_gettime(Process::CLOCK_REALTIME); end
195
+ else
196
+ def mono_now; Time.now.to_f; end
197
+ end
187
198
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clogger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - cloggers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-13 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack