fluent-plugin-kinesis 0.3.3 → 0.3.4

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
  SHA1:
3
- metadata.gz: e552b291a04585897a47473fab2aafb95b7b3bc1
4
- data.tar.gz: b48ce1dc2e7359f39d1ce43f303aceca35755bd1
3
+ metadata.gz: 1afe44290b2075c66e362e31b6ad9239b8b8a4f1
4
+ data.tar.gz: 8317862b2882294c24efd9d1e1d3434e37a82ba6
5
5
  SHA512:
6
- metadata.gz: 828c58279188411787abb483731339458579c8fcd869cc122cbfd4edea6402749cc0ec6b0f13844534ba7214297983383073a0cde6a2a8965d67207f9e6647d7
7
- data.tar.gz: a8b3826baa130ccd2470fb1c91f5df603eb937e7f789a1d8357fcdb1d9a7c74643597c6b355ad5e48ee05edc8ed8b372336e88338b06e03088b9c2cf6f7ac43a
6
+ metadata.gz: d3ed7132f9ab1022c75de1eef2732858adf4cacfeb607b4a7543e3989ce6541d14b601521062eedd966bd49f52a3f8d5812505e1fedcae6fd098c29ec863f35e
7
+ data.tar.gz: 890a373bdb0c9752026fc52120b444b7eb84dbf3abc116ea4d8d78816cb0dcf8f5f35c83ca888ab295dc251a4599e1d2f9681f7ee892c0ccf93be761409a893c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.3.4
4
+
5
+ - **Multi-byte UTF-8 support**: We now support multi-byte UTF-8 by using *use_yajl* option.
6
+
3
7
  ## 0.3.3
4
8
 
5
9
  - **Security improvements**: Disabled logging `aws_key_id` and `aws_sec_key` into log file.
data/README.md CHANGED
@@ -186,6 +186,11 @@ may fail for reasons documented in the Kinesis Service API Reference for PutReco
186
186
  Failed records will be retried **retries_on_putrecords** times. If a record
187
187
  fails all retries an error log will be emitted.
188
188
 
189
+ ### use_yajl
190
+
191
+ Boolean, default is false.
192
+ In case you find error `Encoding::UndefinedConversionError` with multibyte texts, you can avoid that error with this option.
193
+
189
194
  ### debug
190
195
 
191
196
  Boolean. Enable if you need to debug Amazon Kinesis API call. Default is false.
@@ -13,6 +13,7 @@
13
13
 
14
14
  require 'aws-sdk-core'
15
15
  require 'multi_json'
16
+ require 'yajl'
16
17
  require 'logger'
17
18
  require 'securerandom'
18
19
  require 'fluent/plugin/version'
@@ -49,6 +50,7 @@ module FluentPluginKinesis
49
50
  config_param :explicit_hash_key_expr, :string, default: nil
50
51
  config_param :order_events, :bool, default: false
51
52
  config_param :retries_on_putrecords, :integer, default: 3
53
+ config_param :use_yajl, :bool, default: false
52
54
 
53
55
  config_param :debug, :bool, default: false
54
56
 
@@ -87,6 +89,8 @@ module FluentPluginKinesis
87
89
  )
88
90
  @explicit_hash_key_proc = eval(explicit_hash_key_proc_str)
89
91
  end
92
+
93
+ @dump_class = @use_yajl ? Yajl : JSON
90
94
  end
91
95
 
92
96
  def start
@@ -99,7 +103,7 @@ module FluentPluginKinesis
99
103
 
100
104
  def format(tag, time, record)
101
105
  data = {
102
- data: record.to_json,
106
+ data: @dump_class.dump(record),
103
107
  partition_key: get_key(:partition_key,record)
104
108
  }
105
109
 
@@ -261,7 +265,7 @@ module FluentPluginKinesis
261
265
  log.error sprintf(
262
266
  'Could not put record, Error: %s, Record: %s',
263
267
  record[:error_code],
264
- record[:body].to_json
268
+ @dump_class.dump(record[:body])
265
269
  )
266
270
  }
267
271
  end
@@ -12,5 +12,5 @@
12
12
  # language governing permissions and limitations under the License.
13
13
 
14
14
  module FluentPluginKinesis
15
- VERSION = '0.3.3'
15
+ VERSION = '0.3.4'
16
16
  end
@@ -26,6 +26,10 @@ class KinesisOutputTest < Test::Unit::TestCase
26
26
  partition_key test_partition_key
27
27
  ]
28
28
 
29
+ CONFIG_YAJL= CONFIG + %[
30
+ use_yajl true
31
+ ]
32
+
29
33
  def create_driver(conf = CONFIG, tag='test')
30
34
  Fluent::Test::BufferedOutputTestDriver
31
35
  .new(FluentPluginKinesis::OutputFilter, tag).configure(conf)
@@ -57,6 +61,7 @@ class KinesisOutputTest < Test::Unit::TestCase
57
61
  explicit_hash_key test_hash_key
58
62
  explicit_hash_key_expr record
59
63
  order_events true
64
+ use_yajl true
60
65
  ]
61
66
  d = create_driver(conf)
62
67
  assert_equal 'test_stream', d.instance.stream_name
@@ -74,6 +79,7 @@ class KinesisOutputTest < Test::Unit::TestCase
74
79
  d.instance.instance_variable_get(:@explicit_hash_key_proc).call('a')
75
80
  assert_equal true, d.instance.order_events
76
81
  assert_equal nil, d.instance.instance_variable_get(:@sequence_number_for_ordering)
82
+ assert_equal true, d.instance.use_yajl
77
83
  end
78
84
 
79
85
  def test_mode_configuration
@@ -141,9 +147,11 @@ class KinesisOutputTest < Test::Unit::TestCase
141
147
 
142
148
  end
143
149
 
144
- def test_format
145
150
 
146
- d = create_driver
151
+ data("json"=>CONFIG, "yajl"=>CONFIG_YAJL)
152
+ def test_format(config)
153
+
154
+ d = create_driver(config)
147
155
 
148
156
  data1 = {"test_partition_key"=>"key1","a"=>1,"time"=>"2011-01-02T13:14:15Z","tag"=>"test"}
149
157
  data2 = {"test_partition_key"=>"key2","a"=>2,"time"=>"2011-01-02T13:14:15Z","tag"=>"test"}
@@ -253,6 +261,37 @@ class KinesisOutputTest < Test::Unit::TestCase
253
261
  )
254
262
  end
255
263
 
264
+ def test_multibyte_with_yajl
265
+
266
+ d = create_driver(CONFIG_YAJL)
267
+
268
+ data1 = {"test_partition_key"=>"key1","a"=>"\xE3\x82\xA4\xE3\x83\xB3\xE3\x82\xB9\xE3\x83\x88\xE3\x83\xBC\xE3\x83\xAB","time"=>"2011-01-02T13:14:15Z","tag"=>"test"}
269
+ json = Yajl.dump(data1)
270
+ data1["a"].force_encoding("ASCII-8BIT")
271
+
272
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
273
+ d.emit(data1, time)
274
+
275
+ d.expect_format({
276
+ 'data' => json,
277
+ 'partition_key' => 'key1' }.to_msgpack
278
+ )
279
+
280
+ client = create_mock_client
281
+ client.describe_stream(stream_name: 'test_stream')
282
+ client.put_records(
283
+ stream_name: 'test_stream',
284
+ records: [
285
+ {
286
+ data: json,
287
+ partition_key: 'key1'
288
+ }
289
+ ]
290
+ ) { {} }
291
+
292
+ d.run
293
+ end
294
+
256
295
  def test_get_key
257
296
  d = create_driver
258
297
  assert_equal(
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-kinesis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-24 00:00:00.000000000 Z
11
+ date: 2015-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler