fluent-plugin-out-http 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3880fd774a40aecbe2a66d70b82f1839262ac6b788a9beded2cd5209a272c9eb
4
- data.tar.gz: f4edd620701fdba356062650b67fb80b45308d240d49240b291447cea10788d8
3
+ metadata.gz: f6816aa0fc629f6b264dce12602cdd716577350c2e65c05c6cb1d97c51b95f34
4
+ data.tar.gz: 3db9d8d0c757b307f53abb6fcc4e84d7dd3f4c84232409fc075c225821a38300
5
5
  SHA512:
6
- metadata.gz: 7596426626b5c0c419c5851075f9727b998c10a8ddfc65304ed9580a461d5b0fabb626de0dd19ff8dd951174afb8ee749e65127df08dafcb6b610843226948a0
7
- data.tar.gz: 03bfe5f1164a42accc81b1fc2a0c746ad80b468d70e0b313994e86d5b2765ffad11cf4f14aecc51bc7e4412c46999dd88c9fe251053b2140627555fa3c94d0ef
6
+ metadata.gz: 16c16745835465635955c5d86d52c5c0be5d3c887002db36e74206f12059b514be37ed99003ef8c86f508f316984cad27f9c71a826511d089c977fce5ef0b7d8
7
+ data.tar.gz: 2322d4d8ffc7a79abcb3905fd36486e1f939ed0b36a425876faf43e9fd9d8bd1ca7b0bb2eb0a8d5d6f71859fb94003fcd9a18c7647e64c5a76d69e624afd85e2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ### 1.1.2
4
+ * Added custom headers feature
5
+
3
6
  ## 1.1.1
4
7
  * Added plain text transport capability
5
8
  * Added specify cacert file for ssl verify
data/README.md CHANGED
@@ -19,6 +19,7 @@ A generic [fluentd][1] output plugin for sending logs to an HTTP endpoint.
19
19
  buffered true # default: false. Switch non-buffered/buffered mode
20
20
  cacert_file /etc/ssl/endpoint1.cert # default: ''
21
21
  token tokent # default: ''
22
+ custom_headers {"token":"arbitrary"} # default: nil
22
23
  </match>
23
24
 
24
25
  ## Usage notes
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |gem|
4
4
  gem.name = "fluent-plugin-out-http"
5
- gem.version = "1.1.1"
5
+ gem.version = "1.1.2"
6
6
  gem.authors = ["Marica Odagaki"]
7
7
  gem.email = ["ento.entotto@gmail.com"]
8
8
  gem.summary = %q{A generic Fluentd output plugin to send logs to an HTTP endpoint}
@@ -36,6 +36,9 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
36
36
  # ca file to use for https request
37
37
  config_param :cacert_file, :string, :default => ''
38
38
 
39
+ # custom headers
40
+ config_param :custom_headers, :hash, :default => nil
41
+
39
42
  # 'none' | 'basic' | 'jwt' | 'bearer'
40
43
  config_param :authentication, :enum, list: [:none, :basic, :jwt, :bearer], :default => :none
41
44
  config_param :username, :string, :default => ''
@@ -88,7 +91,14 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
88
91
  end
89
92
 
90
93
  def set_header(req, tag, time, record)
91
- req
94
+ if @custom_headers
95
+ @custom_headers.each do |k,v|
96
+ req[k] = v
97
+ end
98
+ req
99
+ else
100
+ req
101
+ end
92
102
  end
93
103
 
94
104
  def set_json_body(req, data)
@@ -119,6 +129,10 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
119
129
  opts
120
130
  end
121
131
 
132
+ def proxies
133
+ ENV['HTTPS_PROXY'] || ENV['HTTP_PROXY'] || ENV['http_proxy'] || ENV['https_proxy']
134
+ end
135
+
122
136
  def send_request(req, uri)
123
137
  is_rate_limited = (@rate_limit_msec != 0 and not @last_request_time.nil?)
124
138
  if is_rate_limited and ((Time.now.to_f - @last_request_time) * 1000.0 < @rate_limit_msec)
@@ -137,7 +151,17 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
137
151
  req['authorization'] = "jwt #{@token}"
138
152
  end
139
153
  @last_request_time = Time.now.to_f
140
- res = Net::HTTP.start(uri.host, uri.port, **http_opts(uri)) {|http| http.request(req) }
154
+
155
+ if proxy = proxies
156
+ proxy_uri = URI.parse(proxy)
157
+
158
+ res = Net::HTTP.start(uri.host, uri.port,
159
+ proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password,
160
+ **http_opts(uri)) {|http| http.request(req) }
161
+ else
162
+ res = Net::HTTP.start(uri.host, uri.port, **http_opts(uri)) {|http| http.request(req) }
163
+ end
164
+
141
165
  rescue => e # rescue all StandardErrors
142
166
  # server didn't respond
143
167
  log.warn "Net::HTTP.#{req.method.capitalize} raises exception: #{e.class}, '#{e.message}'"
@@ -56,6 +56,7 @@ class HTTPOutputTestBase < Test::Unit::TestCase
56
56
  @prohibited = 0
57
57
  @requests = 0
58
58
  @auth = false
59
+ @headers = {}
59
60
  @dummy_server_thread = Thread.new do
60
61
  srv = WEBrick::HTTPServer.new(self.class.server_config)
61
62
  begin
@@ -67,6 +68,9 @@ class HTTPOutputTestBase < Test::Unit::TestCase
67
68
  res.body = 'request method mismatch'
68
69
  next
69
70
  end
71
+ req.each do |key, value|
72
+ @headers[key] = value
73
+ end
70
74
  if @auth and req.header['authorization'][0] == 'Basic YWxpY2U6c2VjcmV0IQ==' # pattern of user='alice' passwd='secret!'
71
75
  # ok, authorized
72
76
  # pattern of bear #{Base64.encode64('secret token!')}
@@ -280,6 +284,34 @@ class HTTPOutputTest < HTTPOutputTestBase
280
284
  assert_equal 2, @posts.size
281
285
  end
282
286
 
287
+ def test_emit_form_with_custom_headers
288
+ d = create_driver CONFIG + %[custom_headers {"key":"custom","token":"arbitrary"}]
289
+ d.run(default_tag: 'test.metrics') do
290
+ d.feed({ 'field1' => 50, 'field2' => 20, 'field3' => 10, 'otherfield' => 1, 'binary' => "\xe3\x81\x82".force_encoding("ascii-8bit") })
291
+ end
292
+
293
+ assert_true @headers.has_key?("key")
294
+ assert_equal "custom", @headers["key"]
295
+ assert_true @headers.has_key?("token")
296
+ assert_equal "arbitrary", @headers["token"]
297
+
298
+ assert_equal 1, @posts.size
299
+ record = @posts[0]
300
+
301
+ assert_equal '50', record[:form]['field1']
302
+ assert_equal '20', record[:form]['field2']
303
+ assert_equal '10', record[:form]['field3']
304
+ assert_equal '1', record[:form]['otherfield']
305
+ assert_equal URI.encode_www_form_component("あ").upcase, record[:form]['binary'].upcase
306
+ assert_nil record[:auth]
307
+
308
+ d.run(default_tag: 'test.metrics') do
309
+ d.feed({ 'field1' => 50, 'field2' => 20, 'field3' => 10, 'otherfield' => 1 })
310
+ end
311
+
312
+ assert_equal 2, @posts.size
313
+ end
314
+
283
315
  class BufferedEmitTest < self
284
316
  def test_emit_form
285
317
  d = create_driver CONFIG + %[buffered true]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-out-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marica Odagaki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-08 00:00:00.000000000 Z
11
+ date: 2018-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yajl-ruby