rack-logstasher 0.0.1 → 0.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.
@@ -6,12 +6,13 @@ module Rack
6
6
  class Logger < Rack::CommonLogger
7
7
  def initialize(app, logger, opts = {})
8
8
  super(app, logger)
9
- @extra_headers = opts[:extra_headers] || {}
9
+ @extra_request_headers = opts[:extra_request_headers] || {}
10
+ @extra_response_headers = opts[:extra_response_headers] || {}
10
11
  end
11
12
 
12
13
  private
13
14
 
14
- def log(env, status, header, began_at)
15
+ def log(env, status, response_headers, began_at)
15
16
  now = Time.now
16
17
 
17
18
  data = {
@@ -22,16 +23,22 @@ module Rack
22
23
  :remote_addr => env['REMOTE_ADDR'],
23
24
  :parameters => env["QUERY_STRING"],
24
25
  :request => request_line(env),
25
- :length => extract_content_length(header)
26
+ :length => extract_content_length(response_headers)
26
27
  }
27
28
 
28
- @extra_headers.each do |header, log_key|
29
+ @extra_request_headers.each do |header, log_key|
29
30
  env_key = "HTTP_#{header.upcase.gsub('-', '_')}"
30
31
  if env[env_key]
31
32
  data[log_key] = env[env_key]
32
33
  end
33
34
  end
34
35
 
36
+ @extra_response_headers.each do |header, log_key|
37
+ if response_headers[header]
38
+ data[log_key] = response_headers[header]
39
+ end
40
+ end
41
+
35
42
  event = LogStash::Event.new('@fields' => data, '@tags' => ['request'])
36
43
  msg = event.to_json + "\n"
37
44
  if @logger.respond_to?(:write)
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module Logstasher
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
data/spec/logger_spec.rb CHANGED
@@ -49,47 +49,96 @@ describe "Logger" do
49
49
 
50
50
  describe "adding extra headers to the log" do
51
51
  before :each do
52
- @extra_headers = {}
52
+ @extra_request_headers = {}
53
+ @extra_response_headers = {}
53
54
  end
54
55
  def app
55
56
  Rack::Logstasher::Logger.new(
56
57
  proc {|env|
57
- sleep @sleep_time if @sleep_time
58
- [200, {}, ["Inner app response"]]
58
+ headers = @inner_response_headers || {}
59
+ [200, headers, ["Inner app response"]]
59
60
  },
60
61
  Logger.new(tmp_logfile_path),
61
- :extra_headers => @extra_headers
62
+ :extra_request_headers => @extra_request_headers,
63
+ :extra_response_headers => @extra_response_headers
62
64
  )
63
65
  end
64
66
 
65
- it "should add specified extra headers to the log under the given key" do
66
- @extra_headers["foo"] = "header_foo"
67
- get "/something", {}, {"HTTP_FOO" => "bar"}
67
+ context "extra request headers" do
68
+ it "should add specified extra request headers to the log under the given key" do
69
+ @extra_request_headers["foo"] = "header_foo"
70
+ get "/something", {}, {"HTTP_FOO" => "bar"}
68
71
 
69
- log_details = JSON.parse(last_log_line)
70
- fields = log_details['@fields']
72
+ log_details = JSON.parse(last_log_line)
73
+ fields = log_details['@fields']
71
74
 
72
- expect(fields['header_foo']).to eq('bar')
73
- end
75
+ expect(fields['header_foo']).to eq('bar')
76
+ end
77
+
78
+ it "should not add the key if the header is missing" do
79
+ @extra_request_headers["foo"] = "header_foo"
80
+ get "/something"
81
+
82
+ log_details = JSON.parse(last_log_line)
83
+ fields = log_details['@fields']
84
+
85
+ expect(fields).not_to have_key('header_foo')
86
+ end
74
87
 
75
- it "should not add the key if the header is missing" do
76
- @extra_headers["foo"] = "header_foo"
77
- get "/something"
88
+ it "should handle dashes in header name" do
89
+ @extra_request_headers["Varnish-Id"] = "varnish_id"
90
+ get "/something", {}, {"HTTP_VARNISH_ID" => "1234"}
78
91
 
79
- log_details = JSON.parse(last_log_line)
80
- fields = log_details['@fields']
92
+ log_details = JSON.parse(last_log_line)
93
+ fields = log_details['@fields']
81
94
 
82
- expect(fields).not_to have_key('header_foo')
95
+ expect(fields['varnish_id']).to eq('1234')
96
+ end
83
97
  end
84
98
 
85
- it "should handle dashes in header name" do
86
- @extra_headers["Varnish-Id"] = "varnish_id"
87
- get "/something", {}, {"HTTP_VARNISH_ID" => "1234"}
99
+ context "extra response headers" do
100
+ it "should add specified extra response headers to the log under the given key" do
101
+ @extra_response_headers["foo"] = "header_foo"
102
+ @inner_response_headers = {"Foo" => "bar"}
103
+ get "/something"
104
+
105
+ log_details = JSON.parse(last_log_line)
106
+ fields = log_details['@fields']
107
+
108
+ expect(fields['header_foo']).to eq('bar')
109
+ end
110
+
111
+ it "should not add the key if the header is missing" do
112
+ @extra_response_headers["foo"] = "header_foo"
113
+ get "/something"
114
+
115
+ log_details = JSON.parse(last_log_line)
116
+ fields = log_details['@fields']
117
+
118
+ expect(fields).not_to have_key('header_foo')
119
+ end
120
+
121
+ it "should handle dashes in header name" do
122
+ @extra_response_headers["X-Cache"] = "cache_status"
123
+ @inner_response_headers = {"X-Cache" => "MISS"}
124
+ get "/something"
125
+
126
+ log_details = JSON.parse(last_log_line)
127
+ fields = log_details['@fields']
128
+
129
+ expect(fields['cache_status']).to eq('MISS')
130
+ end
131
+
132
+ it "should match header in a case-insensitive fashion" do
133
+ @extra_response_headers["X-CacHe"] = "cache_status"
134
+ @inner_response_headers = {"x-cAche" => "MISS"}
135
+ get "/something"
88
136
 
89
- log_details = JSON.parse(last_log_line)
90
- fields = log_details['@fields']
137
+ log_details = JSON.parse(last_log_line)
138
+ fields = log_details['@fields']
91
139
 
92
- expect(fields['varnish_id']).to eq('1234')
140
+ expect(fields['cache_status']).to eq('MISS')
141
+ end
93
142
  end
94
143
  end
95
144
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-logstasher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-17 00:00:00.000000000 Z
12
+ date: 2013-12-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -161,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
161
161
  version: '0'
162
162
  segments:
163
163
  - 0
164
- hash: 1307778500513444384
164
+ hash: 946937473393142977
165
165
  required_rubygems_version: !ruby/object:Gem::Requirement
166
166
  none: false
167
167
  requirements:
@@ -170,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
170
  version: '0'
171
171
  segments:
172
172
  - 0
173
- hash: 1307778500513444384
173
+ hash: 946937473393142977
174
174
  requirements: []
175
175
  rubyforge_project:
176
176
  rubygems_version: 1.8.23