fluent-plugin-nng 1.0.1 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 108c6b67534c09aa347bcdf7b7b1732b54565b06f595561efba8099cf48d1995
4
- data.tar.gz: 7d31085434f55dd27f8b0458747eae7b27f323bfe51c29b8c7f5b5c88f2cc7e3
3
+ metadata.gz: 1c5c435130e3492dd738080d8bef6858d645bee96b5f8abc16b4cca29fc8d5a4
4
+ data.tar.gz: a133ffe2e408bfbeb0886ec86465e1a0ff899c4967ba6c65c0f165236bbc763a
5
5
  SHA512:
6
- metadata.gz: 964127e6dc4caa03e3d4d7a0b82be262796ceef8b1a23681efb9f8b406eccd85921dc0ab6bfee7db99b75464ca0cc41700d0161c25714ada46f31acfc15e4a85
7
- data.tar.gz: 1ace1f867e1101e69dc9208eaf3d02c1094c361a527bda6bd5000e2a3b444506fe405a01084ed9206036b17787aa5696a150002045c818b446b57c1a8b2390be
6
+ metadata.gz: 5957f996cec955b679a209e2cf79e16037925f8ee376a320e41848822601eaffa642ef2c0d641cd0d2700805ca03182714fbb36b0a03bd70e8f2ae23a6a1d3f6
7
+ data.tar.gz: ed805f39f85932eb52d3028a4782ef241c112f1f88fff0ac195d52dfc720d00e321a9ff57bef088efb4fcc2321f41b922234fef5cbec0dd64cf87230cae5659c
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'fluent-plugin-nng'
6
- spec.version = '1.0.1'
6
+ spec.version = '1.0.2'
7
7
  spec.authors = ['whotwagner']
8
8
  spec.email = ['code@feedyourhead.at']
9
9
 
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'bundler', '~> 2.6.9'
25
25
  spec.add_development_dependency 'rake', '~> 13.3.1'
26
26
  spec.add_development_dependency 'test-unit', '~> 3.6.7'
27
+ spec.add_development_dependency 'mocha', '~> 3.1.0'
27
28
  spec.add_runtime_dependency 'nng', '~> 1.0.1'
28
29
  spec.add_runtime_dependency "fluentd", [">= 0.14.10", "< 2"]
29
30
  end
@@ -27,18 +27,26 @@ module Fluent
27
27
  config_param :uri, :string, default: 'tcp://127.0.0.1:5555'
28
28
  config_param :recv_timeout, :float, default: 1.0
29
29
  config_param :tag, :string, default: 'nng.input'
30
+ # TLS-Settings
31
+ config_param :cert, :string, default: nil
32
+ config_param :key, :string, secret: true, default: nil
33
+ config_param :ca, :string, default: nil
34
+ config_param :verify, :bool, default: false
35
+ config_param :server_name, :string, default: nil
30
36
 
31
37
  def configure(conf)
38
+ compat_parameters_convert(conf, :parser)
39
+ super
40
+
32
41
  if @uri !~ /\A#{URI::RFC2396_PARSER.make_regexp(['tcp', 'ipc', 'inproc', 'ws', 'tls+tcp'])}\z/
33
42
  raise Fluent::ConfigError, 'uri must be one of: tcp:// ipc:// inproc:// ws:// or tls+tcp://'
34
43
  end
35
44
 
36
- compat_parameters_convert(conf, :parser)
37
45
  parser_config = conf.elements('parse').first
38
46
  unless parser_config
39
- raise Fluent::ConfigError, "<parse> section is required."
47
+ raise Fluent::ConfigError, '<parse> section is required.'
40
48
  end
41
- super
49
+
42
50
  log.info "parser: #{parser_config}"
43
51
  @parser = parser_create(conf: parser_config)
44
52
  end
@@ -56,7 +64,7 @@ module Fluent
56
64
  File.exist?(uri.path) && File.delete(uri.path)
57
65
  end
58
66
  @socket = NNG::Socket::Pair0.new
59
- @socket.listen(@uri)
67
+ @socket.listen(@uri, cert: @cert, key: @key, ca: @ca, verify: @verify, server_name: @server_name)
60
68
  @socket.recv_timeout = @recv_timeout
61
69
  end
62
70
 
@@ -67,13 +75,14 @@ module Fluent
67
75
  end
68
76
 
69
77
  def run
70
- log.info "start looping.."
78
+ log.info 'Start listening..'
71
79
  loop do
72
80
  msg = nil
73
81
  until msg
74
82
  if @stop
75
83
  return
76
84
  end
85
+
77
86
  begin
78
87
  msg = @socket.receive
79
88
  rescue Timeout::Error
@@ -85,19 +94,18 @@ module Fluent
85
94
  router.emit(@tag, time || Fluent::Engine.now, record)
86
95
  end
87
96
  end
88
-
89
97
  end
90
98
 
91
99
  def stop
92
- log.info "Stopping.."
100
+ log.info 'Stopping..'
93
101
  @stop = true
94
102
  super
95
103
  end
96
104
 
97
105
  def shutdown
98
- log.info "Initiate shutdown"
106
+ log.info 'Initiate shutdown'
99
107
  if @socket
100
- log.info "stopping nng-socket"
108
+ log.info 'stopping nng-socket'
101
109
  @socket.close
102
110
  end
103
111
  super
@@ -1,6 +1,6 @@
1
1
  require 'fluent/plugin/output'
2
2
  require 'nng'
3
-
3
+ require 'uri'
4
4
 
5
5
  module Fluent::Plugin
6
6
  class NngOutput < Fluent::Plugin::Output
@@ -11,6 +11,12 @@ module Fluent::Plugin
11
11
  config_param :uri, :string, default: 'tcp://127.0.0.1:5559'
12
12
  config_param :max_retry, :integer, default: 100
13
13
  config_param :retry_time, :integer, default: 5
14
+ # TLS-Settings
15
+ config_param :cert, :string, default: nil
16
+ config_param :key, :string, secret: true, default: nil
17
+ config_param :ca, :string, default: nil
18
+ config_param :verify, :bool, default: nil # needs to be nil!
19
+ config_param :server_name, :string, default: nil
14
20
 
15
21
  config_section :format do
16
22
  config_set_default :@type, 'json'
@@ -19,20 +25,21 @@ module Fluent::Plugin
19
25
  def initialize
20
26
  super
21
27
  @formatter = nil
22
- log.info 'Initializing'
28
+ log.debug 'Initializing'
23
29
  end
24
30
 
25
31
  def configure(conf)
26
- log.info "configuring.."
32
+ log.debug 'configuring..'
27
33
  compat_parameters_convert(conf, :formatter, :inject)
34
+ super
35
+
28
36
  if @uri !~ /\A#{URI::RFC2396_PARSER.make_regexp(['tcp', 'ipc', 'inproc', 'ws', 'tls+tcp'])}\z/
29
37
  raise Fluent::ConfigError, 'uri must be one of: tcp:// ipc:// inproc:// ws:// or tls+tcp://'
30
38
  end
31
39
 
32
- super
33
- log.info "Creating formatter"
40
+ log.info 'Creating formatter'
34
41
  @formatter = formatter_create
35
- log.info "Formatter loaded"
42
+ log.info 'Formatter loaded'
36
43
  end
37
44
 
38
45
  def start
@@ -50,15 +57,16 @@ module Fluent::Plugin
50
57
  try = 0
51
58
 
52
59
  begin
53
- @socket.dial(@uri)
60
+ @socket.dial(@uri, cert: @cert, key: @key, ca: @ca, verify: @verify, server_name: @server_name)
54
61
  rescue => e
55
62
  log.error(e)
56
- log.info("Retry in 5sec")
63
+ log.info("Retry in #{@retry_time} sec")
57
64
  sleep(@retry_time)
58
65
  try += 1
59
66
  if @max_retry > 0 && try >= @max_retry
60
67
  raise Fluent::UnrecoverableError, e.message
61
68
  end
69
+
62
70
  retry
63
71
  end
64
72
  end
@@ -69,7 +77,7 @@ module Fluent::Plugin
69
77
  end
70
78
 
71
79
  def shutdown
72
- log.info("Shutdown socket")
80
+ log.info('Shutdown socket')
73
81
  @socket.close
74
82
  super()
75
83
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-nng
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - whotwagner
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-04-29 00:00:00.000000000 Z
10
+ date: 2026-06-01 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bundler
@@ -51,6 +51,20 @@ dependencies:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: 3.6.7
54
+ - !ruby/object:Gem::Dependency
55
+ name: mocha
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 3.1.0
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 3.1.0
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: nng
56
70
  requirement: !ruby/object:Gem::Requirement
@@ -92,7 +106,6 @@ executables: []
92
106
  extensions: []
93
107
  extra_rdoc_files: []
94
108
  files:
95
- - "-la"
96
109
  - LICENSE
97
110
  - README.md
98
111
  - Rakefile
data/-la DELETED
@@ -1,231 +0,0 @@
1
-
2
- Δ README.md
3
- ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
4
-
5
- ───────────────────────────────────────────────────────────────────────────────────────┐
6
- • 19: parses the data using the fluentd-plugin [fluent-plugin-parser-protobuf](https:/ │
7
- ───────────────────────────────────────────────────────────────────────────────────────┘
8
-
9
- ```
10
- <source>
11
-  @type nng
12
-  @type nng_in
13
-  @id input_nng
14
-  <parse>
15
-  @type protobuf
16
-
17
- ───────────────────────────────────────────────────────────────────────────────────────┐
18
- • 28: parses the data using the fluentd-plugin [fluent-plugin-parser-protobuf](https:/ │
19
- ───────────────────────────────────────────────────────────────────────────────────────┘
20
-  protobuf_version protobuf3
21
-  </parse>
22
-  uri tcp://127.0.0.1:5557
23
-  tag nng.*
24
- </source>
25
-
26
- <match nng.**>
27
-
28
- ───────────────────────────────────────────────────────────────────────────────────────┐
29
- • 55: using the detectmate `LogSchema` using [fluent-plugin-detectmate](https://github │
30
- ───────────────────────────────────────────────────────────────────────────────────────┘
31
- </source>
32
-
33
- <match nng.**>
34
-  @type nng
35
-  @type nng_out
36
-  uri tcp://127.0.0.1:5557
37
-  <inject>
38
-  hostname_key hostname
39
-
40
- Δ fluent-plugin-nng.gemspec
41
- ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
42
-
43
- ─────────────────────────────────────────────────────────────┐
44
- • 3: $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) │
45
- ─────────────────────────────────────────────────────────────┘
46
-
47
- Gem::Specification.new do |spec|
48
-  spec.name = "fluent-plugin-nng"
49
-  spec.version = "0.1.1"
50
-  spec.version = "1.0.0"
51
-  spec.authors = ["whotwagner"]
52
-  spec.email = ["code@feedyourhead.at"]
53
-
54
-
55
- ───────────────────────────────────────┐
56
- • 21: Gem::Specification.new do |spec| │
57
- ───────────────────────────────────────┘
58
-  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
59
-  spec.require_paths = ["lib"]
60
-
61
-  spec.add_development_dependency "bundler", "~> 2.6.9"
62
-  spec.add_development_dependency "rake", "~> 13.3.1"
63
-  spec.add_development_dependency "test-unit", "~> 3.6.7"
64
-  spec.add_runtime_dependency "nng-ruby", "~> 1.0.1"
65
-  spec.add_development_dependency 'bundler', '~> 2.6.9'
66
-  spec.add_development_dependency 'rake', '~> 13.3.1'
67
-  spec.add_development_dependency 'test-unit', '~> 3.6.7'
68
-  spec.add_runtime_dependency 'nng', '~> 1.0.1'
69
-  spec.add_runtime_dependency "fluentd", [">= 0.14.10", "< 2"]
70
- end
71
-
72
- Δ lib/fluent/plugin/in_nng.rb
73
- ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
74
-
75
- ──────┐
76
- • 15: │
77
- ──────┘
78
-
79
- require 'fluent/plugin/input'
80
- require 'nng'
81
- require 'uri'
82
-
83
- module Fluent
84
-  module Plugin
85
-  class NngInput < Fluent::Plugin::Input
86
-  Fluent::Plugin.register_input('nng', self)
87
-  Fluent::Plugin.register_input('nng_in', self)
88
-
89
-  helpers :parser, :compat_parameters
90
-  helpers :parser, :compat_parameters, :thread
91
-
92
-  config_param :uri, :string, default: 'tcp://127.0.0.1:5555'
93
-  config_param :recv_timeout, :float, default: 1.0
94
-  config_param :tag, :string, default: 'nng.input'
95
-
96
-  def configure(conf)
97
-  if @uri !~ /\A#{URI::RFC2396_PARSER.make_regexp(['tcp', 'ipc', 'inproc', 'ws', 'tls+tcp'])}\z/
98
-
99
- ────────────────────┐
100
- • 55: module Fluent │
101
- ────────────────────┘
102
-  if uri.scheme == 'ipc'
103
-  File.exist?(uri.path) && File.delete(uri.path)
104
-  end
105
-  @socket = NNG::Socket.new(:pair0)
106
-  @socket = NNG::Socket::Pair0.new
107
-  @socket.listen(@uri)
108
-  @socket.recv_timeout = 5000
109
-  @socket.recv_timeout = @recv_timeout
110
-  end
111
-
112
-  def start
113
-  super
114
-  listen
115
-  run
116
-  thread_create(:nng_input_run, &method(:run))
117
-  end
118
-
119
-  def run
120
-  log.info "start looping.."
121
-  loop do
122
-  begin
123
-   msg = nil
124
-   until msg
125
-   if @stop
126
-   return
127
-  end
128
-  begin
129
-  msg = @socket.recv
130
-  rescue NNG::Error
131
-  next
132
-  end
133
-  msg = nil
134
-  until msg
135
-  if @stop
136
-  return
137
-  end
138
-  tag = "nng.input"
139
-  @parser.parse(msg) do |time, record|
140
-  router.emit(tag, time, record)
141
-  begin
142
-  msg = @socket.receive
143
-  rescue Timeout::Error
144
-  sleep 0.01
145
-  next
146
-  end
147
-  rescue NNG::Error => e
148
-  log.warn "Error in processing message.", :error_class => e.class, :error => e
149
-  end
150
-  @parser.parse(msg) do |time, record|
151
-  router.emit(@tag, time || Fluent::Engine.now, record)
152
-  end
153
-  end
154
-
155
-
156
- Δ lib/fluent/plugin/out_nng.rb
157
- ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
158
-
159
- ───────────────────┐
160
- • 4: require 'nng' │
161
- ───────────────────┘
162
-
163
- module Fluent::Plugin
164
-  class NngOutput < Fluent::Plugin::Output
165
-  Fluent::Plugin.register_output('nng', self)
166
-  Fluent::Plugin.register_output('nng_out', self)
167
-
168
-  helpers :formatter, :inject, :compat_parameters
169
-
170
-  config_param :uri, :string, default: 'tcp://127.0.0.1:5559'
171
-  config_param :max_retry, :integer, default: 1000
172
-  config_param :max_retry, :integer, default: 100
173
-  config_param :retry_time, :integer, default: 5
174
-
175
-  config_section :format do
176
-  config_set_default :@type, 'json'
177
-
178
- ────────────────────────────┐
179
- • 19: module Fluent::Plugin │
180
- ────────────────────────────┘
181
-  def initialize
182
-  super
183
-  @formatter = nil
184
-  log.info 'Initializing'
185
-  end
186
-
187
-  def configure(conf)
188
-  log.info "configuring.."
189
-  compat_parameters_convert(conf, :formatter, :inject)
190
-  if @uri !~ /\A#{URI::RFC2396_PARSER.make_regexp(['tcp', 'ipc', 'inproc', 'ws', 'tls+tcp'])}\z/
191
-  raise Fluent::ConfigError, 'uri must be one of: tcp:// ipc:// inproc:// ws:// or tls+tcp://'
192
-  end
193
-
194
-  super
195
-  log.info "Creating formatter"
196
-  @formatter = formatter_create
197
-  log.info "Formatter loaded"
198
-  end
199
-
200
-  def start
201
-  super
202
-  log.info "Starting listener at: #{@uri}"
203
-  log.info "Initiating connection to: #{@uri}"
204
-  connect
205
-  end
206
-
207
-
208
- ────────────────────────────┐
209
- • 46: module Fluent::Plugin │
210
- ────────────────────────────┘
211
-  end
212
-
213
-  def connect
214
-  @socket = NNG::Socket.new(:pair0)
215
-  @socket = NNG::Socket::Pair0.new
216
-  try = 0
217
-
218
-  begin
219
-  @socket.dial(@uri)
220
-  rescue NNG::Error => e
221
-  rescue => e
222
-  log.error(e)
223
-  log.info("Retry in 5sec")
224
-  sleep(5)
225
-  sleep(@retry_time)
226
-  try += 1
227
-  if try >= @max_retry
228
-  if @max_retry > 0 && try >= @max_retry
229
-  raise Fluent::UnrecoverableError, e.message
230
-  end
231
-  retry