fluent-plugin-dynamodb-alt 0.1.1 → 0.1.2
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/README.md +1 -0
- data/fluent-plugin-dynamodb-alt.gemspec +2 -1
- data/lib/fluent/plugin/out_dynamodb_alt.rb +19 -0
- data/spec/out_dynamodb_alt_spec.rb +52 -3
- data/spec/spec_helper.rb +3 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: def6475b444e76ca66d619f4fea1f814a4c64431
|
4
|
+
data.tar.gz: 3f83b0bd39fe53f813f2b8273b5e2e39392145da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 552cd086584a6edcf30139cb6b6ea4b9081c2913592cd1381e3abe360a1f52958b4a0a4e2f62597d16ee4bc2a98c46536047a552403c792fbcf1f55e5fd04b07
|
7
|
+
data.tar.gz: 6eab1ab0f0540f685264fb2ec7190e2c177ebd7a41ea31dbb149b09aa63390fe17e3727fb2279dc00eb7310cebcb0da392b2c3796c3569407524fb47aa795cec
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'fluent-plugin-dynamodb-alt'
|
7
|
-
spec.version = '0.1.
|
7
|
+
spec.version = '0.1.2'
|
8
8
|
spec.authors = ['Genki Sugawara']
|
9
9
|
spec.email = ['sgwr_dts@yahoo.co.jp']
|
10
10
|
spec.summary = %q{Fluent plugin to output to DynamoDB.}
|
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'rspec', '>= 3.0.0'
|
26
26
|
spec.add_development_dependency 'hashie'
|
27
27
|
spec.add_development_dependency 'ddbcli'
|
28
|
+
spec.add_development_dependency 'msgpack'
|
28
29
|
end
|
@@ -16,6 +16,7 @@ class Fluent::DynamodbAltOutput < Fluent::BufferedOutput
|
|
16
16
|
config_param :endpoint, :string, :default => nil
|
17
17
|
config_param :table_name, :string
|
18
18
|
config_param :timestamp_key, :string
|
19
|
+
config_param :binary_keys, :string, :default => nil
|
19
20
|
config_param :concurrency, :integer, :default => 1
|
20
21
|
config_param :expected, :string, :default => nil
|
21
22
|
config_param :conditional_operator, :string, :default => 'AND'
|
@@ -27,6 +28,7 @@ class Fluent::DynamodbAltOutput < Fluent::BufferedOutput
|
|
27
28
|
super
|
28
29
|
require 'aws-sdk-core'
|
29
30
|
require 'parallel'
|
31
|
+
require 'stringio'
|
30
32
|
end
|
31
33
|
|
32
34
|
def configure(conf)
|
@@ -66,6 +68,12 @@ class Fluent::DynamodbAltOutput < Fluent::BufferedOutput
|
|
66
68
|
@expected = parse_expected(@expected)
|
67
69
|
log.info("dynamodb_alt expected: #{@expected.inspect}")
|
68
70
|
end
|
71
|
+
|
72
|
+
if @binary_keys
|
73
|
+
@binary_keys = @binary_keys.strip.split(/\s*,\s*/)
|
74
|
+
else
|
75
|
+
@binary_keys = []
|
76
|
+
end
|
69
77
|
end
|
70
78
|
|
71
79
|
def start
|
@@ -102,6 +110,8 @@ class Fluent::DynamodbAltOutput < Fluent::BufferedOutput
|
|
102
110
|
end
|
103
111
|
|
104
112
|
def put_record(record)
|
113
|
+
convert_binary!(record)
|
114
|
+
|
105
115
|
item = {
|
106
116
|
:table_name => @table_name,
|
107
117
|
:item => record
|
@@ -201,4 +211,13 @@ class Fluent::DynamodbAltOutput < Fluent::BufferedOutput
|
|
201
211
|
}.last
|
202
212
|
}
|
203
213
|
end
|
214
|
+
|
215
|
+
def convert_binary!(record)
|
216
|
+
@binary_keys.each do |key|
|
217
|
+
val = record[key]
|
218
|
+
record[key] = StringIO.new(val) if val
|
219
|
+
end
|
220
|
+
|
221
|
+
return record
|
222
|
+
end
|
204
223
|
end
|
@@ -32,6 +32,7 @@ describe Fluent::DynamodbAltOutput do
|
|
32
32
|
endpoint http:://localhost:4567
|
33
33
|
table_name my_table
|
34
34
|
timestamp_key timestamp
|
35
|
+
binary_keys aaa,bbb
|
35
36
|
concurrency 2
|
36
37
|
conditional_operator OR
|
37
38
|
EOS
|
@@ -42,12 +43,37 @@ describe Fluent::DynamodbAltOutput do
|
|
42
43
|
expect(driver.instance.endpoint ).to eq 'http:://localhost:4567'
|
43
44
|
expect(driver.instance.table_name ).to eq 'my_table'
|
44
45
|
expect(driver.instance.timestamp_key ).to eq 'timestamp'
|
46
|
+
expect(driver.instance.binary_keys ).to eq ['aaa', 'bbb']
|
45
47
|
expect(driver.instance.concurrency ).to eq 2
|
46
48
|
expect(driver.instance.conditional_operator).to eq 'OR'
|
47
49
|
expect(driver.instance.instance_variable_get(:@hash_key) ).to eq 'hash_key'
|
48
50
|
expect(driver.instance.instance_variable_get(:@range_key)).to eq 'range_key'
|
49
51
|
end
|
50
52
|
|
53
|
+
it do
|
54
|
+
driver = create_driver
|
55
|
+
allow(driver.instance).to receive(:configure_aws)
|
56
|
+
|
57
|
+
allow(driver.instance).to receive(:create_client) {
|
58
|
+
client = double('client')
|
59
|
+
allow(client).to receive(:describe_table) {
|
60
|
+
Hashie::Mash.new(:table => {
|
61
|
+
:key_schema => [
|
62
|
+
{:key_type => 'HASH', :attribute_name => 'hash_key'},
|
63
|
+
]})
|
64
|
+
}
|
65
|
+
client
|
66
|
+
}
|
67
|
+
|
68
|
+
driver.configure(<<-EOS)
|
69
|
+
type dynamodb_alt
|
70
|
+
table_name my_table
|
71
|
+
timestamp_key timestamp
|
72
|
+
EOS
|
73
|
+
|
74
|
+
expect(driver.instance.binary_keys).to eq []
|
75
|
+
end
|
76
|
+
|
51
77
|
it do
|
52
78
|
driver = create_driver
|
53
79
|
allow(driver.instance).to receive(:configure_aws)
|
@@ -70,7 +96,7 @@ describe Fluent::DynamodbAltOutput do
|
|
70
96
|
expected timestamp GE 0,key LT 100
|
71
97
|
EOS
|
72
98
|
|
73
|
-
expected = driver.instance.
|
99
|
+
expected = driver.instance.expected
|
74
100
|
expect(expected).to eq [["timestamp", "GE", 0],["key", "LT", 100]]
|
75
101
|
end
|
76
102
|
|
@@ -96,7 +122,7 @@ describe Fluent::DynamodbAltOutput do
|
|
96
122
|
expected id NULL,timestamp LT ${ts},key EQ ${k}
|
97
123
|
EOS
|
98
124
|
|
99
|
-
expected = driver.instance.
|
125
|
+
expected = driver.instance.expected
|
100
126
|
|
101
127
|
expect(expected[0]).to eq ["id", "NULL", nil]
|
102
128
|
|
@@ -158,7 +184,7 @@ describe Fluent::DynamodbAltOutput do
|
|
158
184
|
expected key1 EQ "str",key2 EQ 1
|
159
185
|
EOS
|
160
186
|
|
161
|
-
expected = driver.instance.
|
187
|
+
expected = driver.instance.expected
|
162
188
|
expect(expected).to eq [["key1", "EQ", "str"], ["key2", "EQ", 1]]
|
163
189
|
end
|
164
190
|
}
|
@@ -430,5 +456,28 @@ describe Fluent::DynamodbAltOutput do
|
|
430
456
|
end
|
431
457
|
end
|
432
458
|
}
|
459
|
+
|
460
|
+
context('binary') {
|
461
|
+
it do
|
462
|
+
run_driver(:binary_keys => 'data') do |d|
|
463
|
+
d.emit({'id' => '12345678-1234-1234-1234-123456789001', 'timestamp' => 1409534625001, 'data' => MessagePack.pack({'foo' => 100, 'bar' => 'Zzz...'})}, time)
|
464
|
+
d.emit({'id' => '12345678-1234-1234-1234-123456789002', 'timestamp' => 1409534625002, 'data' => MessagePack.pack({'foo' => 200, 'bar' => 'Zzz..'})}, time)
|
465
|
+
d.emit({'id' => '12345678-1234-1234-1234-123456789003', 'timestamp' => 1409534625003, 'data' => MessagePack.pack({'foo' => 300, 'bar' => 'Zzz.'})}, time)
|
466
|
+
end
|
467
|
+
|
468
|
+
rows = select_all.map do |row|
|
469
|
+
data = row['data']
|
470
|
+
data = Base64.strict_decode64(data)
|
471
|
+
row['data'] = MessagePack.unpack(data)
|
472
|
+
row
|
473
|
+
end
|
474
|
+
|
475
|
+
expect(rows).to match_array [
|
476
|
+
{"id"=>"12345678-1234-1234-1234-123456789001", "timestamp"=>1409534625001, "data" => {'foo' => 100, 'bar' => 'Zzz...'}},
|
477
|
+
{"id"=>"12345678-1234-1234-1234-123456789002", "timestamp"=>1409534625002, "data" => {'foo' => 200, 'bar' => 'Zzz..'}},
|
478
|
+
{"id"=>"12345678-1234-1234-1234-123456789003", "timestamp"=>1409534625003, "data" => {'foo' => 300, 'bar' => 'Zzz.'}},
|
479
|
+
]
|
480
|
+
end
|
481
|
+
}
|
433
482
|
}
|
434
483
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
require 'fluent/test'
|
2
2
|
require 'fluent/plugin/out_dynamodb_alt'
|
3
|
+
require 'base64'
|
3
4
|
require 'hashie'
|
5
|
+
require 'msgpack'
|
4
6
|
require 'securerandom'
|
7
|
+
require 'stringio'
|
5
8
|
|
6
9
|
DRIVER_DEFAULT_TAG = 'test.default'
|
7
10
|
TEST_TABLE_NAME = 'my_table-' + SecureRandom.uuid
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-dynamodb-alt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - '>='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: msgpack
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
description: Fluent plugin to output to DynamoDB.
|
126
140
|
email:
|
127
141
|
- sgwr_dts@yahoo.co.jp
|