fluent-plugin-scribe 0.10.12 → 0.10.13
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.
- checksums.yaml +4 -4
- data/ChangeLog +15 -0
- data/README.rdoc +2 -2
- data/fluent-plugin-scribe.gemspec +2 -1
- data/lib/fluent/plugin/in_scribe.rb +35 -13
- data/test/plugin/test_in_scribe.rb +32 -2
- metadata +27 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e82d716df29ee314a3d51ee911e32f9b0de07a0f
|
4
|
+
data.tar.gz: 35be26bb3acbe72db1b38bad94b2801875d90e22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f98b739988b9bdb0e69d34c56c9139e80cf7c9c1834c3d59f6ee22a449552230e471ee711fa3284487f6fb2735d296c6d42b182168653595526dc5a34fce1031
|
7
|
+
data.tar.gz: 9dc6b1104e4b3aace045c925961b3224e4cc215de001303191f3cd560a94828b7f6929bccc66a1168de4958383b99d140c6ec923c30c861280af3adae46bdedd
|
data/ChangeLog
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
Release 0.10.13 - 2013/10/29
|
2
|
+
* add validation for msg_format
|
3
|
+
* use Yajl instead of JSON for parsing record
|
4
|
+
* add ignore_invalid_record option to ignore invalid record and return OK to scribed
|
5
|
+
|
6
|
+
Release 0.10.12 - 2013/09/04
|
7
|
+
* support 'log_level' option
|
8
|
+
* fix to do shutdown plugin instance not to duplicate listen
|
9
|
+
|
10
|
+
Release 0.10.11 - 2013/09/04
|
11
|
+
* add format_to_json bool option with default value false
|
12
|
+
|
13
|
+
Release 0.10.10 - 2013/02/06
|
14
|
+
* change 'written entries' log level from 'info' to 'debug'
|
15
|
+
|
1
16
|
Release 0.10.9 - 2011/05/30
|
2
17
|
* overwrite default value of buffer_chunk_limit to 1MB
|
3
18
|
* improve memory usage efficiency
|
data/README.rdoc
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
= Scribe input plugin for
|
1
|
+
= Scribe input plugin for Fluentd[http://fluentd.org/]
|
2
2
|
|
3
3
|
== Overview
|
4
4
|
|
5
|
-
This is a plugin for fluentd[
|
5
|
+
This is a plugin for fluentd[http://fluentd.org] data collector. This plugin adds the Scribe[https://github.com/facebook/scribe] compatible interface to fluentd.
|
6
6
|
|
7
7
|
== What's Scribe?
|
8
8
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = "fluent-plugin-scribe"
|
5
|
-
gem.version = "0.10.
|
5
|
+
gem.version = "0.10.13"
|
6
6
|
|
7
7
|
gem.authors = ["Kazuki Ohta", "TAGOMORI Satoshi"]
|
8
8
|
gem.email = ["kazuki.ohta@gmail.com", "tagomoris@gmail.com"]
|
@@ -17,6 +17,7 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.require_paths = ["lib"]
|
18
18
|
|
19
19
|
gem.add_development_dependency "rake"
|
20
|
+
gem.add_development_dependency "test-unit", '~> 3.0.2'
|
20
21
|
gem.add_runtime_dependency "fluentd"
|
21
22
|
gem.add_runtime_dependency "thrift", "~> 0.8.0"
|
22
23
|
end
|
@@ -19,6 +19,12 @@ module Fluent
|
|
19
19
|
class ScribeInput < Input
|
20
20
|
Plugin.register_input('scribe', self)
|
21
21
|
|
22
|
+
SUPPORTED_FORMAT = {
|
23
|
+
'text' => :text,
|
24
|
+
'json' => :json,
|
25
|
+
'url_param' => :url_param,
|
26
|
+
}
|
27
|
+
|
22
28
|
config_param :port, :integer, :default => 1463
|
23
29
|
config_param :bind, :string, :default => '0.0.0.0'
|
24
30
|
config_param :server_type, :string, :default => 'nonblocking'
|
@@ -26,7 +32,12 @@ module Fluent
|
|
26
32
|
config_param :body_size_limit, :size, :default => 32*1024*1024 # TODO default
|
27
33
|
config_param :add_prefix, :string, :default => nil
|
28
34
|
config_param :remove_newline, :bool, :default => false
|
29
|
-
config_param :
|
35
|
+
config_param :ignore_invalid_record, :bool, :default => false
|
36
|
+
config_param :msg_format, :default => :text do |val|
|
37
|
+
f = SUPPORTED_FORMAT[val]
|
38
|
+
raise ConfigError, "unsupported msg_format: #{val}" unless f
|
39
|
+
f
|
40
|
+
end
|
30
41
|
|
31
42
|
unless method_defined?(:log)
|
32
43
|
define_method(:log) { $log }
|
@@ -34,6 +45,7 @@ module Fluent
|
|
34
45
|
|
35
46
|
def initialize
|
36
47
|
require 'cgi'
|
48
|
+
require 'yajl'
|
37
49
|
require 'thrift'
|
38
50
|
$:.unshift File.join(File.dirname(__FILE__), 'thrift')
|
39
51
|
require 'fb303_types'
|
@@ -56,6 +68,7 @@ module Fluent
|
|
56
68
|
handler.add_prefix = @add_prefix
|
57
69
|
handler.remove_newline = @remove_newline
|
58
70
|
handler.msg_format = @msg_format
|
71
|
+
handler.ignore_invalid_record = @ignore_invalid_record
|
59
72
|
handler.logger = log
|
60
73
|
processor = Scribe::Processor.new handler
|
61
74
|
|
@@ -66,10 +79,6 @@ module Fluent
|
|
66
79
|
transport_factory = Thrift::BufferedTransportFactory.new
|
67
80
|
end
|
68
81
|
|
69
|
-
unless ['text', 'json', 'url_param'].include? @msg_format
|
70
|
-
raise 'Unknown format: msg_format=#{@msg_format}'
|
71
|
-
end
|
72
|
-
|
73
82
|
# 2011/09/29 Kazuki Ohta <kazuki.ohta@gmail.com>
|
74
83
|
# This section is a workaround to set strict_read and strict_write option.
|
75
84
|
# Ruby-Thrift 0.7 set them both 'true' in default, but Scribe protocol set
|
@@ -105,8 +114,8 @@ module Fluent
|
|
105
114
|
|
106
115
|
def run
|
107
116
|
@server.serve
|
108
|
-
rescue
|
109
|
-
log.error "unexpected error", :error
|
117
|
+
rescue => e
|
118
|
+
log.error "unexpected error", :error => e.inspect
|
110
119
|
log.error_backtrace
|
111
120
|
end
|
112
121
|
|
@@ -114,12 +123,25 @@ module Fluent
|
|
114
123
|
attr_accessor :add_prefix
|
115
124
|
attr_accessor :remove_newline
|
116
125
|
attr_accessor :msg_format
|
126
|
+
attr_accessor :ignore_invalid_record
|
117
127
|
attr_accessor :logger # Use logger instead of log to avoid confusion with Log method
|
118
128
|
|
119
129
|
def Log(msgs)
|
120
130
|
begin
|
121
131
|
msgs.each { |msg|
|
122
|
-
|
132
|
+
begin
|
133
|
+
record = create_record(msg)
|
134
|
+
rescue => e
|
135
|
+
if @ignore_invalid_record
|
136
|
+
# This warning can be disabled by 'log_level error'
|
137
|
+
logger.warn "got invalid record: #{msg}"
|
138
|
+
next
|
139
|
+
else
|
140
|
+
# Keep existence behaviour
|
141
|
+
raise e
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
123
145
|
if @add_prefix
|
124
146
|
Engine.emit(@add_prefix + '.' + msg.category, Engine.now, record)
|
125
147
|
else
|
@@ -128,7 +150,7 @@ module Fluent
|
|
128
150
|
}
|
129
151
|
return ResultCode::OK
|
130
152
|
rescue => e
|
131
|
-
logger.error "unexpected error", :error
|
153
|
+
logger.error "unexpected error", :error => e.inspect
|
132
154
|
logger.error_backtrace
|
133
155
|
return ResultCode::TRY_LATER
|
134
156
|
end
|
@@ -137,17 +159,17 @@ module Fluent
|
|
137
159
|
private
|
138
160
|
def create_record(msg)
|
139
161
|
case @msg_format
|
140
|
-
when
|
162
|
+
when :text
|
141
163
|
if @remove_newline
|
142
164
|
return { 'message' => msg.message.force_encoding('UTF-8').chomp }
|
143
165
|
else
|
144
166
|
return { 'message' => msg.message.force_encoding('UTF-8') }
|
145
167
|
end
|
146
|
-
when
|
147
|
-
js =
|
168
|
+
when :json
|
169
|
+
js = Yajl.load(msg.message.force_encoding('UTF-8'))
|
148
170
|
raise 'body must be a Hash, if json_body=true' unless js.is_a?(Hash)
|
149
171
|
return js
|
150
|
-
when
|
172
|
+
when :url_param
|
151
173
|
s = msg.message.force_encoding('UTF-8')
|
152
174
|
return Hash[ s.split('&').map { |kv|
|
153
175
|
k,v = kv.split('=', 2);
|
@@ -134,7 +134,7 @@ class ScribeInputTest < Test::Unit::TestCase
|
|
134
134
|
d = create_driver(CONFIG + %[
|
135
135
|
msg_format json
|
136
136
|
])
|
137
|
-
assert_equal
|
137
|
+
assert_equal :json, d.instance.msg_format
|
138
138
|
|
139
139
|
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
140
140
|
Fluent::Engine.now = time
|
@@ -158,11 +158,41 @@ class ScribeInputTest < Test::Unit::TestCase
|
|
158
158
|
shutdown_driver(d)
|
159
159
|
end
|
160
160
|
|
161
|
+
data do
|
162
|
+
Fluent::ScribeInput.new
|
163
|
+
{
|
164
|
+
'true' => [ResultCode::OK, true],
|
165
|
+
'false' => [ResultCode::TRY_LATER, false]
|
166
|
+
}
|
167
|
+
end
|
168
|
+
def test_msg_format_json_with_ignore_invalid_record(data)
|
169
|
+
result, opt = data
|
170
|
+
d = create_driver(CONFIG + %[
|
171
|
+
msg_format json
|
172
|
+
ignore_invalid_record #{opt}
|
173
|
+
])
|
174
|
+
assert_equal :json, d.instance.msg_format
|
175
|
+
assert_equal opt, d.instance.ignore_invalid_record
|
176
|
+
|
177
|
+
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
178
|
+
Fluent::Engine.now = time
|
179
|
+
|
180
|
+
emits = [['tag1', time, '{"a":']]
|
181
|
+
d.run do
|
182
|
+
emits.each { |tag, time, message|
|
183
|
+
res = message_send(tag, message)
|
184
|
+
assert_equal result, res
|
185
|
+
}
|
186
|
+
end
|
187
|
+
|
188
|
+
shutdown_driver(d)
|
189
|
+
end
|
190
|
+
|
161
191
|
def test_msg_format_url_param
|
162
192
|
d = create_driver(CONFIG + %[
|
163
193
|
msg_format url_param
|
164
194
|
])
|
165
|
-
assert_equal
|
195
|
+
assert_equal :url_param, d.instance.msg_format
|
166
196
|
|
167
197
|
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
168
198
|
Fluent::Engine.now = time
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-scribe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kazuki Ohta
|
@@ -9,48 +9,62 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-10-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: test-unit
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 3.0.2
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 3.0.2
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
43
|
name: fluentd
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
31
45
|
requirements:
|
32
|
-
- -
|
46
|
+
- - ">="
|
33
47
|
- !ruby/object:Gem::Version
|
34
48
|
version: '0'
|
35
49
|
type: :runtime
|
36
50
|
prerelease: false
|
37
51
|
version_requirements: !ruby/object:Gem::Requirement
|
38
52
|
requirements:
|
39
|
-
- -
|
53
|
+
- - ">="
|
40
54
|
- !ruby/object:Gem::Version
|
41
55
|
version: '0'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: thrift
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
45
59
|
requirements:
|
46
|
-
- - ~>
|
60
|
+
- - "~>"
|
47
61
|
- !ruby/object:Gem::Version
|
48
62
|
version: 0.8.0
|
49
63
|
type: :runtime
|
50
64
|
prerelease: false
|
51
65
|
version_requirements: !ruby/object:Gem::Requirement
|
52
66
|
requirements:
|
53
|
-
- - ~>
|
67
|
+
- - "~>"
|
54
68
|
- !ruby/object:Gem::Version
|
55
69
|
version: 0.8.0
|
56
70
|
description: Fluentd input/output plugin to handle Facebook scribed thrift protocol
|
@@ -62,8 +76,8 @@ executables:
|
|
62
76
|
extensions: []
|
63
77
|
extra_rdoc_files: []
|
64
78
|
files:
|
65
|
-
- .gitignore
|
66
|
-
- .travis.yml
|
79
|
+
- ".gitignore"
|
80
|
+
- ".travis.yml"
|
67
81
|
- AUTHORS
|
68
82
|
- ChangeLog
|
69
83
|
- Gemfile
|
@@ -95,21 +109,20 @@ require_paths:
|
|
95
109
|
- lib
|
96
110
|
required_ruby_version: !ruby/object:Gem::Requirement
|
97
111
|
requirements:
|
98
|
-
- -
|
112
|
+
- - ">="
|
99
113
|
- !ruby/object:Gem::Version
|
100
114
|
version: '0'
|
101
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
116
|
requirements:
|
103
|
-
- -
|
117
|
+
- - ">="
|
104
118
|
- !ruby/object:Gem::Version
|
105
119
|
version: '0'
|
106
120
|
requirements: []
|
107
121
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.
|
122
|
+
rubygems_version: 2.2.2
|
109
123
|
signing_key:
|
110
124
|
specification_version: 4
|
111
125
|
summary: Scribe Input/Output plugin for Fluentd event collector
|
112
126
|
test_files:
|
113
127
|
- test/plugin/test_in_scribe.rb
|
114
128
|
- test/plugin/test_out_scribe.rb
|
115
|
-
has_rdoc:
|