fluent-plugin-gcloud-pubsub-custom 0.3.4 → 0.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dea78067ca4b8f4a2859ed280ad3e577fee82767
4
- data.tar.gz: 3aadcbc365f28e5ec3e80037ebbb8ae7a79e5162
3
+ metadata.gz: a8daf09e1eeb0af707c9fc9fda10284540c73555
4
+ data.tar.gz: c61879a204d49e5c1e11a630e5274916d3b8e507
5
5
  SHA512:
6
- metadata.gz: 9b9f6e9c9b3afb9e407f22d5cec7429e03bf196478bd513f74200da3c2449143c17997f49cf38e9bf32234ae75063cd4086c95ee828735b0108f5299132cdabe
7
- data.tar.gz: f2af751a0a0c1abc468ad7d675d9d4960c856f4278e87a86e4d19fd96a824a49f6976fd3e2879586d0f42b1fbcd47dabb22008d0d6a912f6e83b116cab33c1f9
6
+ metadata.gz: 3de06b045e2f552038d2102c35cc127af05ee67d97138c428c5159f34db5f6f2d552215f8f3f882bab8c1c462f242bc7de21c723ee82e0f9a0e202af6802f0f9
7
+ data.tar.gz: 17502d7a5df5570848fcfb40de28522618825b5f31dc51674c2ded054827a0082a18b36e373ec375398a2c3ca3797dc11559755fc213996bc58fb054096c23c6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  ## ChangeLog
2
2
 
3
+ ### Release 0.4.0 - 2017/01/21
4
+
5
+ - Input plugin
6
+ - Add feature to use record key as tag
7
+
3
8
  ### Release 0.3.4 - 2017/01/03
4
9
 
5
10
  - Output plugin
data/README.md CHANGED
@@ -105,6 +105,9 @@ Use `gcloud_pubsub` input plugin.
105
105
 
106
106
  - `tag` (required)
107
107
  - Set tag of messages.
108
+ - If `tag_key` is specified, `tag` is used as tag when record don't have specified key.
109
+ - `tag_key` (optional)
110
+ - Set key to be used as tag.
108
111
  - `project` (optional)
109
112
  - Set your GCP project
110
113
  - Running fluentd on GCP, you don't have to specify.
@@ -7,7 +7,7 @@ Gem::Specification.new do |gem|
7
7
  gem.license = "MIT"
8
8
  gem.homepage = "https://github.com/mia-0032/fluent-plugin-gcloud-pubsub-custom"
9
9
  gem.summary = gem.description
10
- gem.version = "0.3.4"
10
+ gem.version = "0.4.0"
11
11
  gem.authors = ["Yoshihiro MIYAI"]
12
12
  gem.email = "msparrow17@gmail.com"
13
13
  gem.has_rdoc = false
@@ -22,6 +22,8 @@ module Fluent
22
22
 
23
23
  desc 'Set tag of messages.'
24
24
  config_param :tag, :string
25
+ desc 'Set key to be used as tag.'
26
+ config_param :tag_key, :string, default: nil
25
27
  desc 'Set your GCP project.'
26
28
  config_param :project, :string, default: nil
27
29
  desc 'Set your credential file path.'
@@ -108,6 +110,12 @@ module Fluent
108
110
  @rpc_thread = nil
109
111
  @stop_pull = false
110
112
 
113
+ @extract_tag = if @tag_key.nil?
114
+ method(:static_tag)
115
+ else
116
+ method(:dynamic_tag)
117
+ end
118
+
111
119
  @parser = Plugin.new_parser(@format)
112
120
  @parser.configure(conf)
113
121
  end
@@ -153,6 +161,14 @@ module Fluent
153
161
 
154
162
  private
155
163
 
164
+ def static_tag(record)
165
+ @tag
166
+ end
167
+
168
+ def dynamic_tag(record)
169
+ record.delete(@tag_key) || @tag
170
+ end
171
+
156
172
  def start_rpc
157
173
  log.info "listening http rpc server on http://#{@rpc_bind}:#{@rpc_port}/"
158
174
  @rpc_srv = WEBrick::HTTPServer.new(
@@ -201,12 +217,15 @@ module Fluent
201
217
  end
202
218
 
203
219
  def process(messages)
204
- es = MultiEventStream.new
220
+ event_streams = Hash.new do |hsh, key|
221
+ hsh[key] = MultiEventStream.new
222
+ end
223
+
205
224
  messages.each do |m|
206
225
  line = m.message.data.chomp
207
226
  @parser.parse(line) do |time, record|
208
227
  if time && record
209
- es.add(time, record)
228
+ event_streams[@extract_tag.call(record)].add(time, record)
210
229
  else
211
230
  case @parse_error_action
212
231
  when :exception
@@ -218,10 +237,12 @@ module Fluent
218
237
  end
219
238
  end
220
239
 
221
- # There are some output plugins not to supposed to be called with multi-threading.
222
- # Maybe remove in the future.
223
- @emit_guard.synchronize do
224
- router.emit_stream(@tag, es)
240
+ event_streams.each do |tag, es|
241
+ # There are some output plugins not to supposed to be called with multi-threading.
242
+ # Maybe remove in the future.
243
+ @emit_guard.synchronize do
244
+ router.emit_stream(tag, es)
245
+ end
225
246
  end
226
247
  end
227
248
  end
@@ -99,6 +99,23 @@ class GcloudPubSubInputTest < Test::Unit::TestCase
99
99
  end
100
100
  end
101
101
 
102
+ class DummyMsgDataWithTagKey
103
+ def initialize(tag)
104
+ @tag = tag
105
+ end
106
+ def data
107
+ return '{"foo": "bar", "test_tag_key": "' + @tag + '"}'
108
+ end
109
+ end
110
+ class DummyMessageWithTagKey
111
+ def initialize(tag)
112
+ @tag = tag
113
+ end
114
+ def message
115
+ DummyMsgDataWithTagKey.new @tag
116
+ end
117
+ end
118
+
102
119
  setup do
103
120
  @subscriber = mock!
104
121
  @topic_mock = mock!.subscription('subscription-test') { @subscriber }
@@ -154,6 +171,32 @@ class GcloudPubSubInputTest < Test::Unit::TestCase
154
171
  end
155
172
  end
156
173
 
174
+ test 'with tag_key' do
175
+ messages = [
176
+ DummyMessageWithTagKey.new('tag1'),
177
+ DummyMessageWithTagKey.new('tag2'),
178
+ DummyMessage.new
179
+ ]
180
+ @subscriber.pull(immediate: true, max: 100).once { messages }
181
+ @subscriber.acknowledge(messages).once
182
+
183
+ d = create_driver("#{CONFIG}\ntag_key test_tag_key")
184
+ d.run {
185
+ # d.run sleeps 0.5 sec
186
+ }
187
+ emits = d.emits
188
+
189
+ assert_equal(3, emits.length)
190
+ # test tag
191
+ assert_equal("tag1", emits[0][0])
192
+ assert_equal("tag2", emits[1][0])
193
+ assert_equal("test", emits[2][0])
194
+ # test record
195
+ emits.each do |tag, time, record|
196
+ assert_equal({"foo" => "bar"}, record)
197
+ end
198
+ end
199
+
157
200
  test 'invalid messages with parse_error_action exception ' do
158
201
  messages = Array.new(1, DummyInvalidMessage.new)
159
202
  @subscriber.pull(immediate: true, max: 100).once { messages }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-gcloud-pubsub-custom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshihiro MIYAI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-03 00:00:00.000000000 Z
11
+ date: 2017-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd