rack-logstasher 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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