fluent-plugin-out-http 0.3.0 → 0.3.1

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: 433d2a376477171e9efc1b1413dafbfb5517018495967e3f1c59f9034aae2baf
4
- data.tar.gz: 6705a5554d7080cfa7b32f85899b6184be19c2b9a40e97feec90161e903b3e41
3
+ metadata.gz: a3dfa31c31f15188b9975d34a9997f4ec9a5d2d7faa3d5a159689ab7f6e643f2
4
+ data.tar.gz: a33cf636b0f25ff45d8920de78c454eec77958e41fffd76adfd07e2b1cd0da53
5
5
  SHA512:
6
- metadata.gz: '08dcfb49bbc1bf9d9b509e1bffc4e5774a0939a3653d58d3ddca98483654ba9a87d245c0c8bcef73551a907342e225950f72c9b0aba3bcedd4d6f27a5c209108'
7
- data.tar.gz: a7853666a4a876981babd8288880d3ce1297267cf706777e5f40c922bd721d120969c50d590f342728778374a4a664b506fa4bd6b307ebdaaad273631401a5c8
6
+ metadata.gz: 02bfa51bd6026ee1370bc296a290002f85b6209361fa8707c0b065a7111c1d02bc36d78a43b498f36672454c4ee87bd789011dd07e049981ae4ed2a7e2dbe664
7
+ data.tar.gz: f5dd4c2646dfb524a14ef17db5d35858b4652ea15f7482a928f616a68936d7a0b222390e31094a9d9036b3f7e1f8ceaca6ab6e7811e87d27fb5764389e3d44bf
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.1
4
+ ### Added
5
+ * Added plain text transport capability
6
+ * Added specify cacert file for ssl verify
7
+
8
+ ## 0.3.0
9
+ ### Added
10
+ * Support for jwt token authentication:
11
+
3
12
  ## 0.2.0
4
13
  ### Added
5
14
  * SSL is now supported if `endpoint_url` uses the `https` scheme (uses ruby-2.1 syntax internally)
data/README.md CHANGED
@@ -16,6 +16,7 @@ A generic [fluentd][1] output plugin for sending logs to an HTTP endpoint.
16
16
  authentication basic # default: none
17
17
  username alice # default: ''
18
18
  password bobpop # default: '', secret: true
19
+ cacert_file /etc/ssl/endpoint1.cert # default: ''
19
20
  token tokent # default: ''
20
21
  </match>
21
22
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |gem|
4
4
  gem.name = "fluent-plugin-out-http"
5
- gem.version = "0.3.0"
5
+ gem.version = "0.3.1"
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}
@@ -27,6 +27,9 @@ class Fluent::HTTPOutput < Fluent::Output
27
27
  # Raise errors that were rescued during HTTP requests?
28
28
  config_param :raise_on_error, :bool, :default => true
29
29
 
30
+ # ca file to use for https request
31
+ config_param :cacert_file, :string, :default => ''
32
+
30
33
  # nil | 'none' | 'basic' | 'jwt' | 'bearer'
31
34
  config_param :authentication, :string, :default => nil
32
35
  config_param :username, :string, :default => ''
@@ -42,7 +45,9 @@ class Fluent::HTTPOutput < Fluent::Output
42
45
  OpenSSL::SSL::VERIFY_PEER
43
46
  end
44
47
 
45
- serializers = [:json, :form]
48
+ @ca_file = @cacert_file
49
+
50
+ serializers = [:json, :form, :text]
46
51
  @serializer = if serializers.include? @serializer.intern
47
52
  @serializer.intern
48
53
  else
@@ -74,7 +79,7 @@ class Fluent::HTTPOutput < Fluent::Output
74
79
  def shutdown
75
80
  super
76
81
  end
77
-
82
+
78
83
  def format_url(tag, time, record)
79
84
  @endpoint_url
80
85
  end
@@ -82,6 +87,8 @@ class Fluent::HTTPOutput < Fluent::Output
82
87
  def set_body(req, tag, time, record)
83
88
  if @serializer == :json
84
89
  set_json_body(req, record)
90
+ elsif @serializer == :text
91
+ set_text_body(req, record)
85
92
  else
86
93
  req.set_form_data(record)
87
94
  end
@@ -97,6 +104,11 @@ class Fluent::HTTPOutput < Fluent::Output
97
104
  req['Content-Type'] = 'application/json'
98
105
  end
99
106
 
107
+ def set_text_body(req, data)
108
+ req.body = data["message"]
109
+ req['Content-Type'] = 'text/plain'
110
+ end
111
+
100
112
  def create_request(tag, time, record)
101
113
  url = format_url(tag, time, record)
102
114
  uri = URI.parse(url)
@@ -111,6 +123,7 @@ class Fluent::HTTPOutput < Fluent::Output
111
123
  :use_ssl => uri.scheme == 'https'
112
124
  }
113
125
  opts[:verify_mode] = @ssl_verify_mode if opts[:use_ssl]
126
+ opts[:ca_file] = File.join(@ca_file) if File.file?(@ca_file)
114
127
  opts
115
128
  end
116
129
 
@@ -92,6 +92,9 @@ class HTTPOutputTestBase < Test::Unit::TestCase
92
92
  record = {:auth => nil}
93
93
  if req.content_type == 'application/json'
94
94
  record[:json] = Yajl.load(req.body)
95
+ elsif req.content_type == 'text/plain'
96
+ puts req
97
+ record[:data] = req.body
95
98
  else
96
99
  record[:form] = Hash[*(req.body.split('&').map{|kv|kv.split('=')}.flatten)]
97
100
  end
@@ -192,6 +195,11 @@ class HTTPOutputTest < HTTPOutputTestBase
192
195
  serializer json
193
196
  ]
194
197
 
198
+ CONFIG_TEXT = %[
199
+ endpoint_url http://127.0.0.1:#{port}/api/
200
+ serializer text
201
+ ]
202
+
195
203
  CONFIG_PUT = %[
196
204
  endpoint_url http://127.0.0.1:#{port}/api/
197
205
  http_method put
@@ -278,6 +286,17 @@ class HTTPOutputTest < HTTPOutputTestBase
278
286
  assert_equal 1, record[:json]['otherfield']
279
287
  assert_equal binary_string, record[:json]['binary']
280
288
  assert_nil record[:auth]
289
+ end
290
+
291
+ def test_emit_text
292
+ binary_string = "\xe3\x81\x82"
293
+ d = create_driver CONFIG_TEXT
294
+ d.emit({ "message" => "hello" })
295
+ d.run
296
+ assert_equal 1, @posts.size
297
+ record = @posts[0]
298
+ assert_equal 'hello', record[:data]
299
+ assert_nil record[:auth]
281
300
  end
282
301
 
283
302
  def test_http_error_is_raised
@@ -422,6 +441,20 @@ class HTTPSOutputTest < HTTPOutputTestBase
422
441
  http_opts = d.instance.http_opts(test_uri)
423
442
  assert_equal true, http_opts[:use_ssl]
424
443
  assert_equal OpenSSL::SSL::VERIFY_NONE, http_opts[:verify_mode]
444
+
445
+ cacert_file_config = %[
446
+ endpoint_url https://127.0.0.1:#{self.class.port}/api/
447
+ ssl_no_verify true
448
+ cacert_file /tmp/ssl.cert
449
+ ]
450
+ d = create_driver cacert_file_config
451
+ FileUtils::touch '/tmp/ssl.cert'
452
+ http_opts = d.instance.http_opts(test_uri)
453
+ assert_equal true, http_opts[:use_ssl]
454
+ assert_equal OpenSSL::SSL::VERIFY_NONE, http_opts[:verify_mode]
455
+ assert_equal true, File.file?('/tmp/ssl.cert')
456
+ puts http_opts
457
+ assert_equal File.join('/tmp/ssl.cert'), http_opts[:ca_file]
425
458
  end
426
459
 
427
460
  def test_emit_form_ssl
@@ -438,4 +471,20 @@ class HTTPSOutputTest < HTTPOutputTestBase
438
471
 
439
472
  assert_equal '50', record[:form]['field1']
440
473
  end
474
+
475
+ def test_emit_form_ssl_ca
476
+ config = %[
477
+ endpoint_url https://127.0.0.1:#{self.class.port}/api/
478
+ ssl_no_verify true
479
+ cacert_file /tmp/ssl.cert
480
+ ]
481
+ d = create_driver config
482
+ d.emit({ 'field1' => 50 })
483
+ d.run
484
+
485
+ assert_equal 1, @posts.size
486
+ record = @posts[0]
487
+
488
+ assert_equal '50', record[:form]['field1']
489
+ end
441
490
  end
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: 0.3.0
4
+ version: 0.3.1
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-07 00:00:00.000000000 Z
11
+ date: 2018-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yajl-ruby