fluent-plugin-nats 0.0.4 → 0.0.5

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.
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fluent-plugin-nats (0.0.4)
4
+ fluent-plugin-nats (0.0.5)
5
5
  eventmachine (= 0.12.10)
6
6
  fluentd (>= 0.10.7)
7
7
  nats (>= 0.4.22)
8
8
 
9
9
  GEM
10
- remote: http://rubygems.org/
10
+ remote: https://rubygems.org/
11
11
  specs:
12
12
  cool.io (1.1.0)
13
13
  iobuffer (>= 1.0.0)
data/README.md CHANGED
@@ -18,7 +18,8 @@ Setup the NATS input:
18
18
  port 4222
19
19
  user nats
20
20
  password nats
21
- queue fluent.>
21
+ queue fluent.>,fluent2.>
22
+ ssl false
22
23
  </source>
23
24
  ~~~~~
24
25
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
@@ -8,6 +8,9 @@ module Fluent
8
8
  config_param :port, :integer, :default => 4222
9
9
  config_param :queue, :string, :default => "fluent.>"
10
10
  config_param :tag, :string, :default => "nats"
11
+ config_param :ssl, :bool, :default => false
12
+ config_param :max_reconnect_attempts, :integer, :default => 150
13
+ config_param :reconnect_time_wait, :integer, :default => 2
11
14
 
12
15
  def initialize
13
16
  require "nats/client"
@@ -19,10 +22,18 @@ module Fluent
19
22
  def configure(conf)
20
23
  super
21
24
  @conf = conf
22
- @uri = "nats://#{@user}:#{@password}@#{@host}:#{@port}"
23
25
  unless @host && @queue
24
26
  raise ConfigError, "'host' and 'queue' must be all specified."
25
27
  end
28
+
29
+ @nats_config = {
30
+ :uri => "nats://#{@host}:#{@port}",
31
+ :ssl => @ssl,
32
+ :user => @user,
33
+ :pass => @password,
34
+ :reconnect_time_wait => @reconnect_time_wait,
35
+ :max_reconnect_attempts => @max_reconnect_attempts,
36
+ }
26
37
  end
27
38
 
28
39
  def start
@@ -41,13 +52,21 @@ module Fluent
41
52
  end
42
53
 
43
54
  def run
55
+ queues = @queue.split(',')
44
56
  EM.next_tick {
45
- @nats_conn = NATS.connect(:uri => @uri) {
46
- @nats_conn.subscribe(@queue) do |msg, reply, sub|
47
- tag = "#{@tag}.#{sub}"
48
- msg_json = JSON.parse(msg)
49
- time = msg_json["fluent_timestamp"] || Time.now.to_i
50
- Engine.emit(tag, time, msg_json)
57
+ @nats_conn = NATS.connect(@nats_config) {
58
+ queues.each do |queue|
59
+ @nats_conn.subscribe(queue) do |msg, reply, sub|
60
+ tag = "#{@tag}.#{sub}"
61
+ begin
62
+ msg_json = JSON.parse(msg)
63
+ rescue JSON::ParserError => e
64
+ $log.error "Failed parsing JSON #{e.inspect}. Passing as a normal string"
65
+ msg_json = msg
66
+ end
67
+ time = Engine.now
68
+ Engine.emit(tag, time, msg_json)
69
+ end
51
70
  end
52
71
  }
53
72
  }
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'fluent/test'
3
- require 'lib/fluent/plugin/in_nats'
3
+ require 'lib/fluent/plugin/in_nats.rb'
4
4
  require 'nats/client'
5
5
  require 'test_helper'
6
6
 
@@ -12,16 +12,32 @@ class NATSInputTest < Test::Unit::TestCase
12
12
  host localhost
13
13
  user nats
14
14
  password nats
15
- queue fluent.>
16
15
  ]
17
16
 
18
-
17
+ def basic_queue_conf
18
+ conf = CONFIG + %[
19
+ queue fluent.>
20
+ ]
21
+ end
22
+
23
+ def multiple_queue_conf
24
+ conf = CONFIG + %[
25
+ queue fluent.>, fluent2.>
26
+ ]
27
+ end
28
+
29
+ def ssl_conf
30
+ conf = basic_queue_conf + %[
31
+ ssl true
32
+ ]
33
+ end
34
+
19
35
  def create_driver(conf=CONFIG)
20
36
  Fluent::Test::InputTestDriver.new(Fluent::NATSInput).configure(conf)
21
37
  end
22
38
 
23
- def test_configure
24
- d = create_driver
39
+ def test_configure_basic
40
+ d = create_driver basic_queue_conf
25
41
  assert_equal 4222, d.instance.port
26
42
  assert_equal 'localhost', d.instance.host
27
43
  assert_equal 'nats', d.instance.user
@@ -29,8 +45,27 @@ class NATSInputTest < Test::Unit::TestCase
29
45
  assert_equal 'fluent.>', d.instance.queue
30
46
  end
31
47
 
48
+ def test_configure_multiple_queue
49
+ d = create_driver multiple_queue_conf
50
+ assert_equal 4222, d.instance.port
51
+ assert_equal 'localhost', d.instance.host
52
+ assert_equal 'nats', d.instance.user
53
+ assert_equal 'nats', d.instance.password
54
+ assert_equal 'fluent.>, fluent2.>', d.instance.queue
55
+ end
56
+
57
+ def test_configure_basic_with_ssl
58
+ d = create_driver ssl_conf
59
+ assert_equal 4222, d.instance.port
60
+ assert_equal 'localhost', d.instance.host
61
+ assert_equal 'nats', d.instance.user
62
+ assert_equal 'nats', d.instance.password
63
+ assert_equal 'fluent.>', d.instance.queue
64
+ assert_equal true, d.instance.ssl
65
+ end
66
+
32
67
  def test_emit_with_credentials
33
- d = create_driver
68
+ d = create_driver basic_queue_conf
34
69
 
35
70
  time = Time.parse("2011-01-02 13:14:15 UTC").to_i
36
71
  Fluent::Engine.now = time
@@ -51,13 +86,36 @@ class NATSInputTest < Test::Unit::TestCase
51
86
  end
52
87
 
53
88
  def test_emit_without_credentials
54
- d = create_driver
89
+ d = create_driver basic_queue_conf
90
+
91
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
92
+ Fluent::Engine.now = time
93
+
94
+ d.expect_emit "nats.fluent.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
95
+ d.expect_emit "nats.fluent.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
96
+
97
+ uri = "nats://#{d.instance.host}:#{d.instance.port}"
98
+
99
+ start_nats(uri)
100
+ d.run do
101
+ d.expected_emits.each { |tag, time, record|
102
+ send(uri, tag[5..-1], record)
103
+ sleep 0.5
104
+ }
105
+ end
106
+ kill_nats
107
+ end
108
+
109
+ def test_emit_multiple_queues
110
+ d = create_driver multiple_queue_conf
55
111
 
56
112
  time = Time.parse("2011-01-02 13:14:15 UTC").to_i
57
113
  Fluent::Engine.now = time
58
114
 
59
115
  d.expect_emit "nats.fluent.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
60
116
  d.expect_emit "nats.fluent.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
117
+ d.expect_emit "nats.fluent2.test1", time, {"message"=>'nats', "fluent_timestamp"=>time}
118
+ d.expect_emit "nats.fluent2.test2", time, {"message"=>'nats', "fluent_timestamp"=>time}
61
119
 
62
120
  uri = "nats://#{d.instance.host}:#{d.instance.port}"
63
121
 
@@ -72,6 +130,83 @@ class NATSInputTest < Test::Unit::TestCase
72
130
  end
73
131
 
74
132
 
133
+ def test_emit_without_fluent_timestamp
134
+ d = create_driver basic_queue_conf
135
+
136
+ time = Time.now.to_i
137
+ Fluent::Engine.now = time
138
+
139
+ d.expect_emit "nats.fluent.test1", time, {"message"=>'nats'}
140
+
141
+ uri = "nats://#{d.instance.host}:#{d.instance.port}"
142
+ start_nats(uri)
143
+ d.run do
144
+ d.expected_emits.each do |tag, time, record|
145
+ send(uri, tag[5..-1], record)
146
+ sleep 0.5
147
+ end
148
+ end
149
+ kill_nats
150
+ end
151
+
152
+ def test_emit_arrays
153
+ d = create_driver basic_queue_conf
154
+
155
+ time = Time.now.to_i
156
+ Fluent::Engine.now = time
157
+
158
+ d.expect_emit "nats.fluent.empty_array", time, []
159
+ d.expect_emit "nats.fluent.string_array", time, %w(one two three)
160
+
161
+ uri = "nats://#{d.instance.host}:#{d.instance.port}"
162
+ start_nats(uri)
163
+ d.run do
164
+ d.expected_emits.each do |tag, time, record|
165
+ send(uri, tag[5..-1], record)
166
+ sleep 0.5
167
+ end
168
+ end
169
+ kill_nats
170
+ end
171
+
172
+ def test_empty_publish_string
173
+ d = create_driver basic_queue_conf
174
+
175
+ time = Time.now.to_i
176
+ Fluent::Engine.now = time
177
+
178
+ d.expect_emit "nats.fluent.nil", time, nil
179
+
180
+ uri = "nats://#{d.instance.host}:#{d.instance.port}"
181
+ start_nats(uri)
182
+ d.run do
183
+ d.expected_emits.each do |tag, time, record|
184
+ send(uri, tag[5..-1], nil)
185
+ sleep 0.5
186
+ end
187
+ end
188
+ kill_nats
189
+ end
190
+
191
+ def test_regular_publish_string
192
+ d = create_driver basic_queue_conf
193
+
194
+ time = Time.now.to_i
195
+ Fluent::Engine.now = time
196
+
197
+ d.expect_emit "nats.fluent.string", time, "Lorem ipsum dolor sit amet"
198
+
199
+ uri = "nats://#{d.instance.host}:#{d.instance.port}"
200
+ start_nats(uri)
201
+ d.run do
202
+ d.expected_emits.each do |tag, time, record|
203
+ send(uri, tag[5..-1], "Lorem ipsum dolor sit amet")
204
+ sleep 0.5
205
+ end
206
+ end
207
+ kill_nats
208
+ end
209
+
75
210
  def setup
76
211
  Fluent::Test.setup
77
212
  end
@@ -84,3 +219,5 @@ class NATSInputTest < Test::Unit::TestCase
84
219
  }
85
220
  end
86
221
  end
222
+
223
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-nats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-25 00:00:00.000000000 Z
12
+ date: 2013-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd