fluent-plugin-mqtt 0.0.8 → 0.0.9

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: 19e8964bfff6ad942926e4e1607b91a099f8a1f9
4
- data.tar.gz: dcf3560aca07e73b59eb1ff319620977dc63ac6b
3
+ metadata.gz: 87146ea70041d0d56d3a6c9db7f6cf8a1096bd9a
4
+ data.tar.gz: fe84c1296c4e329dbca1e794e0e3fd177a415666
5
5
  SHA512:
6
- metadata.gz: a86199765c2bdcd8309c2e79c0ea4a073a443acef5a55574ee8fc951d8974c45116f0fdaf5ae94d6c72c6477bb565746be676de52f6ca8ec44f9836cd382b378
7
- data.tar.gz: b3d1b82362c57f3860338946b44f5af6419a133173caee3fc8b0fbf6f2978aa8f5b1a8189bc8f912797911d9bc5b1bdf9588a400a9dd50169fae9496b0ac3f4f
6
+ metadata.gz: 4d4f98038168c1a48cd50911ee8e6f3ff617ffa66a5cef78ce0db37c13c13d378527025eee7d17715f5e1356ec3526bfef6737a66fe691e0ab6347ecc98122c0
7
+ data.tar.gz: 841606034f3c2b74a22c4e8e8c812d29571987b6ab57efe004b811959ed41f946809d03f8e0c609eb1fd8b5118a3bdab370584be37fd57dfaf833aac35602b09
@@ -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-mqtt"
7
- spec.version = "0.0.8"
7
+ spec.version = "0.0.9"
8
8
  spec.authors = ["Yuuna Kurita"]
9
9
  spec.email = ["yuuna.m@gmail.com"]
10
10
  spec.summary = %q{fluentd input plugin for mqtt server}
@@ -1,14 +1,18 @@
1
- module Fluent
2
- class OutMqtt < BufferedOutput
3
- Plugin.register_output('mqtt', self)
1
+ require 'mqtt'
2
+ require 'msgpack'
3
+ require 'fluent/plugin/output'
4
+
5
+ module Fluent::Plugin
6
+ class OutMqtt < Output
7
+ Fluent::Plugin.register_output('mqtt', self)
8
+
9
+ helpers :compat_parameters, :inject, :formatter
10
+
11
+ DEFAULT_BUFFER_TYPE = "memory"
4
12
 
5
- include Fluent::SetTagKeyMixin
6
13
  config_set_default :include_tag_key, false
7
-
8
- include Fluent::SetTimeKeyMixin
9
14
  config_set_default :include_time_key, true
10
15
 
11
-
12
16
  config_param :port, :integer, :default => 1883
13
17
  config_param :bind, :string, :default => '127.0.0.1'
14
18
  config_param :topic, :string, :default => 'td-agent'
@@ -22,15 +26,19 @@ module Fluent
22
26
  config_param :cert, :string, :default => nil
23
27
  config_param :retain, :string, :default => true
24
28
 
25
- require 'mqtt'
29
+ config_section :buffer do
30
+ config_set_default :@type, DEFAULT_BUFFER_TYPE
31
+ config_set_default :chunk_keys, ['tag']
32
+ end
26
33
 
27
- unless method_defined?(:log)
28
- define_method(:log) { $log }
34
+ config_section :inject do
35
+ config_set_default :time_key, "time"
36
+ config_set_default :time_type, "string"
37
+ config_set_default :time_format, "%Y-%m-%dT%H:%M:%S%z"
29
38
  end
30
39
 
31
40
  def initialize
32
41
  super
33
- require 'msgpack'
34
42
 
35
43
  @clients = {}
36
44
  @connection_options = {}
@@ -38,19 +46,21 @@ module Fluent
38
46
  end
39
47
 
40
48
  def configure(conf)
49
+ compat_parameters_convert(conf, :buffer, :inject, :formatter)
41
50
  super
42
51
  @bind ||= conf['bind']
43
52
  @topic ||= conf['topic']
44
53
  @port ||= conf['port']
45
- @formatter = Plugin.new_formatter(@format)
46
- @formatter.configure(conf)
54
+ @formatter = formatter_create
55
+ if conf.has_key?('buffer_chunk_limit')
56
+ #check buffer_size
57
+ conf['buffer_chunk_limit'] = available_buffer_chunk_limit(conf)
58
+ end
47
59
  end
48
60
 
49
61
  def start
50
- #check buffer_size
51
- @buffer.buffer_chunk_limit = available_buffer_chunk_limit
52
62
 
53
- $log.debug "start mqtt #{@bind}"
63
+ log.debug "start mqtt #{@bind}"
54
64
  opts = {host: @bind,
55
65
  port: @port}
56
66
  opts[:client_id] = @client_id if @client_id
@@ -70,11 +80,21 @@ module Fluent
70
80
  end
71
81
 
72
82
  def format(tag, time, record)
73
- [tag, time, record].to_msgpack
83
+ [time, record].to_msgpack
84
+ end
85
+
86
+ def formatted_to_msgpack_binary
87
+ true
88
+ end
89
+
90
+ def multi_workers_ready?
91
+ true
74
92
  end
75
93
 
76
94
  def write(chunk)
77
- chunk.msgpack_each { |tag, time, record|
95
+ tag = chunk.metadata.tag
96
+ chunk.msgpack_each { |time, record|
97
+ record = inject_values_to_record(tag, time, record)
78
98
  log.debug "write #{@topic} #{@formatter.format(tag,time,record)}"
79
99
  @connect.publish(@topic, @formatter.format(tag,time,record), retain=@retain)
80
100
  }
@@ -84,12 +104,12 @@ module Fluent
84
104
  # Following limits are heuristic. BSON is sometimes bigger than MessagePack and JSON.
85
105
  LIMIT_MQTT = 2 * 1024 # 2048kb
86
106
 
87
- def available_buffer_chunk_limit
88
- if @buffer.buffer_chunk_limit > LIMIT_MQTT
89
- log.warn ":buffer_chunk_limit(#{@buffer.buffer_chunk_limit}) is large. Reset :buffer_chunk_limit with #{LIMIT_MQTT}"
107
+ def available_buffer_chunk_limit(conf)
108
+ if conf['buffer_chunk_limit'] > LIMIT_MQTT
109
+ log.warn ":buffer_chunk_limit(#{conf['buffer_chunk_limit']}) is large. Reset :buffer_chunk_limit with #{LIMIT_MQTT}"
90
110
  LIMIT_MQTT
91
111
  else
92
- @buffer.buffer_chunk_limit
112
+ conf['buffer_chunk_limit']
93
113
  end
94
114
  end
95
115
  end
@@ -24,6 +24,9 @@ unless ENV.has_key?('VERBOSE')
24
24
  end
25
25
 
26
26
  require 'fluent/plugin/in_mqtt'
27
+ require 'fluent/plugin/out_mqtt'
27
28
 
28
29
  class Test::Unit::TestCase
29
30
  end
31
+
32
+ include Fluent::Test::Helpers
@@ -0,0 +1,118 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/output'
3
+
4
+ class MqttOutputTest < Test::Unit::TestCase
5
+ def setup
6
+ Fluent::Test.setup
7
+ end
8
+
9
+ CONFIG = %[ bind 127.0.0.1
10
+ port 1883
11
+ format json ]
12
+
13
+ def create_driver(conf = CONFIG)
14
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::OutMqtt).configure(conf)
15
+ end
16
+
17
+ def sub_client(topic = "td-agent/#")
18
+ connect = MQTT::Client.connect("localhost")
19
+ connect.subscribe(topic)
20
+ return connect
21
+ end
22
+
23
+ def test_configure_1
24
+ d = create_driver(
25
+ %[ bind 127.0.0.1
26
+ port 1883
27
+ format json]
28
+ )
29
+ assert_equal '127.0.0.1', d.instance.bind
30
+ assert_equal 1883, d.instance.port
31
+ assert_equal 'json', d.instance.instance_variable_get(:@format)
32
+
33
+ d2 = create_driver(
34
+ %[ bind 127.0.0.1
35
+ port 1883
36
+ format csv
37
+ fields time,message
38
+ time_key time]
39
+ )
40
+ assert_equal 'csv', d2.instance.instance_variable_get(:@format)
41
+ assert_equal 'time', d2.instance.inject_config.time_key
42
+ end
43
+
44
+ class TestWithTimeZone < self
45
+ def setup
46
+ @timeZone = ENV['TZ']
47
+ end
48
+ def teardown
49
+ ENV['TZ'] = @timeZone
50
+ end
51
+
52
+ def test_format_csv
53
+ ENV['TZ'] = 'Asia/Tokyo'
54
+
55
+ d = create_driver(
56
+ %[ bind 127.0.0.1
57
+ port 1883
58
+ format csv
59
+ time_type string
60
+ time_format %Y-%m-%dT%H:%M:%S%z
61
+ fields time,message]
62
+ )
63
+
64
+ client = sub_client
65
+ time = event_time("2011-01-02 13:14:15 UTC")
66
+ data = [
67
+ {tag: "tag1", message: "#{time},hello world" },
68
+ {tag: "tag2", message: "#{time},hello to you to" },
69
+ {tag: "tag3", message: "#{time}," },
70
+ ]
71
+
72
+ d.run(default_tag: "test") do
73
+ data.each do |record|
74
+ d.feed(time, record)
75
+ end
76
+ end
77
+ 3.times do |i|
78
+ record = client.get
79
+ assert_equal "td-agent", record[0]
80
+ assert_equal "\"2011-01-02T22:14:15+0900\",\"#{data[i][:message]}\"\n", record[1]
81
+ end
82
+ end
83
+
84
+ def test_format_json
85
+ ENV['TZ'] = 'Asia/Tokyo'
86
+
87
+ d = create_driver(
88
+ %[ bind 127.0.0.1
89
+ port 1883
90
+ format json
91
+ time_type string
92
+ time_format %Y-%m-%dT%H:%M:%S%z
93
+ fields time,message]
94
+ )
95
+
96
+ client = sub_client
97
+ time = event_time("2011-01-02 13:14:15 UTC")
98
+ data = [
99
+ {tag: "tag1", message: "#{time},hello world" },
100
+ {tag: "tag2", message: "#{time},hello to you to" },
101
+ {tag: "tag3", message: "#{time}," },
102
+ ]
103
+
104
+ d.run(default_tag: "test") do
105
+ data.each do |record|
106
+ d.feed(time, record)
107
+ end
108
+ end
109
+ 3.times do |i|
110
+ record = client.get
111
+ assert_equal "td-agent", record[0]
112
+ assert_equal "{\"tag\":\"#{data[i][:tag]}\",\
113
+ \"message\":\"#{data[i][:message]}\",\
114
+ \"time\":\"2011-01-02T22:14:15+0900\"}\n", record[1]
115
+ end
116
+ end
117
+ end
118
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mqtt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuuna Kurita
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-18 00:00:00.000000000 Z
11
+ date: 2017-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mqtt
@@ -111,6 +111,7 @@ files:
111
111
  - lib/fluent/plugin/out_mqtt.rb
112
112
  - test/helper.rb
113
113
  - test/plugin/test_in_mqtt.rb
114
+ - test/plugin/test_out_mqtt.rb
114
115
  homepage: http://github.com/yuuna/fluent-plugin-mqtt
115
116
  licenses:
116
117
  - MIT
@@ -131,10 +132,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
132
  version: '0'
132
133
  requirements: []
133
134
  rubyforge_project:
134
- rubygems_version: 2.5.1
135
+ rubygems_version: 2.6.11
135
136
  signing_key:
136
137
  specification_version: 4
137
138
  summary: fluentd input plugin for mqtt server
138
139
  test_files:
139
140
  - test/helper.rb
140
141
  - test/plugin/test_in_mqtt.rb
142
+ - test/plugin/test_out_mqtt.rb