fluent-plugin-out-http 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +1 -0
- data/fluent-plugin-out-http.gemspec +1 -1
- data/lib/fluent/plugin/out_http.rb +13 -1
- data/test/plugin/test_out_http.rb +51 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3880fd774a40aecbe2a66d70b82f1839262ac6b788a9beded2cd5209a272c9eb
|
4
|
+
data.tar.gz: f4edd620701fdba356062650b67fb80b45308d240d49240b291447cea10788d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7596426626b5c0c419c5851075f9727b998c10a8ddfc65304ed9580a461d5b0fabb626de0dd19ff8dd951174afb8ee749e65127df08dafcb6b610843226948a0
|
7
|
+
data.tar.gz: 03bfe5f1164a42accc81b1fc2a0c746ad80b468d70e0b313994e86d5b2765ffad11cf4f14aecc51bc7e4412c46999dd88c9fe251053b2140627555fa3c94d0ef
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.1.1
|
4
|
+
* Added plain text transport capability
|
5
|
+
* Added specify cacert file for ssl verify
|
6
|
+
|
7
|
+
## 1.1.0
|
8
|
+
* Support for jwt token authentication
|
9
|
+
|
10
|
+
## 1.0.1
|
11
|
+
* Added endpoint_url placeholder support
|
12
|
+
|
13
|
+
## 1.0.0
|
14
|
+
* Use Fluentd v1 API
|
15
|
+
|
3
16
|
## 0.2.0
|
4
17
|
### Added
|
5
18
|
* SSL is now supported if `endpoint_url` uses the `https` scheme (uses ruby-2.1 syntax internally)
|
data/README.md
CHANGED
@@ -17,6 +17,7 @@ A generic [fluentd][1] output plugin for sending logs to an HTTP endpoint.
|
|
17
17
|
username alice # default: ''
|
18
18
|
password bobpop # default: '', secret: true
|
19
19
|
buffered true # default: false. Switch non-buffered/buffered mode
|
20
|
+
cacert_file /etc/ssl/endpoint1.cert # default: ''
|
20
21
|
token tokent # default: ''
|
21
22
|
</match>
|
22
23
|
|
@@ -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.
|
5
|
+
gem.version = "1.1.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}
|
@@ -24,7 +24,7 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
|
|
24
24
|
config_param :http_method, :enum, list: [:get, :put, :post, :delete], :default => :post
|
25
25
|
|
26
26
|
# form | json
|
27
|
-
config_param :serializer, :enum, list: [:json, :form], :default => :form
|
27
|
+
config_param :serializer, :enum, list: [:json, :form, :text], :default => :form
|
28
28
|
|
29
29
|
# Simple rate limiting: ignore any records within `rate_limit_msec`
|
30
30
|
# since the last one.
|
@@ -33,6 +33,9 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
|
|
33
33
|
# Raise errors that were rescued during HTTP requests?
|
34
34
|
config_param :raise_on_error, :bool, :default => true
|
35
35
|
|
36
|
+
# ca file to use for https request
|
37
|
+
config_param :cacert_file, :string, :default => ''
|
38
|
+
|
36
39
|
# 'none' | 'basic' | 'jwt' | 'bearer'
|
37
40
|
config_param :authentication, :enum, list: [:none, :basic, :jwt, :bearer], :default => :none
|
38
41
|
config_param :username, :string, :default => ''
|
@@ -56,6 +59,7 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
|
|
56
59
|
OpenSSL::SSL::VERIFY_PEER
|
57
60
|
end
|
58
61
|
|
62
|
+
@ca_file = @cacert_file
|
59
63
|
@last_request_time = nil
|
60
64
|
raise Fluent::ConfigError, "'tag' in chunk_keys is required." if !@chunk_key_tag && @buffered
|
61
65
|
end
|
@@ -75,6 +79,8 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
|
|
75
79
|
def set_body(req, tag, time, record)
|
76
80
|
if @serializer == :json
|
77
81
|
set_json_body(req, record)
|
82
|
+
elsif @serializer == :text
|
83
|
+
set_text_body(req, record)
|
78
84
|
else
|
79
85
|
req.set_form_data(record)
|
80
86
|
end
|
@@ -90,6 +96,11 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
|
|
90
96
|
req['Content-Type'] = 'application/json'
|
91
97
|
end
|
92
98
|
|
99
|
+
def set_text_body(req, data)
|
100
|
+
req.body = data["message"]
|
101
|
+
req['Content-Type'] = 'text/plain'
|
102
|
+
end
|
103
|
+
|
93
104
|
def create_request(tag, time, record)
|
94
105
|
url = format_url(tag, time, record)
|
95
106
|
uri = URI.parse(url)
|
@@ -104,6 +115,7 @@ class Fluent::Plugin::HTTPOutput < Fluent::Plugin::Output
|
|
104
115
|
:use_ssl => uri.scheme == 'https'
|
105
116
|
}
|
106
117
|
opts[:verify_mode] = @ssl_verify_mode if opts[:use_ssl]
|
118
|
+
opts[:ca_file] = File.join(@ca_file) if File.file?(@ca_file)
|
107
119
|
opts
|
108
120
|
end
|
109
121
|
|
@@ -96,6 +96,9 @@ class HTTPOutputTestBase < Test::Unit::TestCase
|
|
96
96
|
record = {:auth => nil}
|
97
97
|
if req.content_type == 'application/json'
|
98
98
|
record[:json] = Yajl.load(req.body)
|
99
|
+
elsif req.content_type == 'text/plain'
|
100
|
+
puts req
|
101
|
+
record[:data] = req.body
|
99
102
|
else
|
100
103
|
record[:form] = Hash[*(req.body.split('&').map{|kv|kv.split('=')}.flatten)]
|
101
104
|
end
|
@@ -202,6 +205,11 @@ class HTTPOutputTest < HTTPOutputTestBase
|
|
202
205
|
serializer json
|
203
206
|
]
|
204
207
|
|
208
|
+
CONFIG_TEXT = %[
|
209
|
+
endpoint_url http://127.0.0.1:#{port}/api/
|
210
|
+
serializer text
|
211
|
+
]
|
212
|
+
|
205
213
|
CONFIG_PUT = %[
|
206
214
|
endpoint_url http://127.0.0.1:#{port}/api/
|
207
215
|
http_method put
|
@@ -390,6 +398,18 @@ class HTTPOutputTest < HTTPOutputTestBase
|
|
390
398
|
assert_nil record[:auth]
|
391
399
|
end
|
392
400
|
|
401
|
+
def test_emit_text
|
402
|
+
binary_string = "\xe3\x81\x82"
|
403
|
+
d = create_driver CONFIG_TEXT
|
404
|
+
d.run(default_tag: 'test.metrics') do
|
405
|
+
d.feed({ "message" => "hello" })
|
406
|
+
end
|
407
|
+
assert_equal 1, @posts.size
|
408
|
+
record = @posts[0]
|
409
|
+
assert_equal 'hello', record[:data]
|
410
|
+
assert_nil record[:auth]
|
411
|
+
end
|
412
|
+
|
393
413
|
def test_http_error_is_raised
|
394
414
|
d = create_driver CONFIG_HTTP_ERROR
|
395
415
|
assert_raise Errno::ECONNREFUSED do
|
@@ -542,6 +562,20 @@ class HTTPSOutputTest < HTTPOutputTestBase
|
|
542
562
|
http_opts = d.instance.http_opts(test_uri)
|
543
563
|
assert_equal true, http_opts[:use_ssl]
|
544
564
|
assert_equal OpenSSL::SSL::VERIFY_NONE, http_opts[:verify_mode]
|
565
|
+
|
566
|
+
cacert_file_config = %[
|
567
|
+
endpoint_url https://127.0.0.1:#{self.class.port}/api/
|
568
|
+
ssl_no_verify true
|
569
|
+
cacert_file /tmp/ssl.cert
|
570
|
+
]
|
571
|
+
d = create_driver cacert_file_config
|
572
|
+
FileUtils::touch '/tmp/ssl.cert'
|
573
|
+
http_opts = d.instance.http_opts(test_uri)
|
574
|
+
assert_equal true, http_opts[:use_ssl]
|
575
|
+
assert_equal OpenSSL::SSL::VERIFY_NONE, http_opts[:verify_mode]
|
576
|
+
assert_equal true, File.file?('/tmp/ssl.cert')
|
577
|
+
puts http_opts
|
578
|
+
assert_equal File.join('/tmp/ssl.cert'), http_opts[:ca_file]
|
545
579
|
end
|
546
580
|
|
547
581
|
def test_emit_form_ssl
|
@@ -559,4 +593,21 @@ class HTTPSOutputTest < HTTPOutputTestBase
|
|
559
593
|
|
560
594
|
assert_equal '50', record[:form]['field1']
|
561
595
|
end
|
596
|
+
|
597
|
+
def test_emit_form_ssl_ca
|
598
|
+
config = %[
|
599
|
+
endpoint_url https://127.0.0.1:#{self.class.port}/api/
|
600
|
+
ssl_no_verify true
|
601
|
+
cacert_file /tmp/ssl.cert
|
602
|
+
]
|
603
|
+
d = create_driver config
|
604
|
+
d.run(default_tag: 'test.metrics') do
|
605
|
+
d.feed({ 'field1' => 50 })
|
606
|
+
end
|
607
|
+
|
608
|
+
assert_equal 1, @posts.size
|
609
|
+
record = @posts[0]
|
610
|
+
|
611
|
+
assert_equal '50', record[:form]['field1']
|
612
|
+
end
|
562
613
|
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: 1.1.
|
4
|
+
version: 1.1.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-
|
11
|
+
date: 2018-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yajl-ruby
|