logstash-mixin-zeromq 2.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 581a303492a25d46f0bd462e8cddf2464d2cea18
4
+ data.tar.gz: 460addf350a60201f1230e14c9450fcca928fb2f
5
+ SHA512:
6
+ metadata.gz: 01251b1a3cf3e13d59939e2f3bbe79b8139177c92777664845dd18e73747d588cece9c2402492864f7c16e4f9ad6c2a1674c9e8e83c166122e3d6528ee47953a
7
+ data.tar.gz: 4cfd55e56dc3623912e5ddb5502159553e7b79347f1ecab4b86e57beefad84d14c1a342263299b0606996e9d0648e6f841d11fd5ab041e04c00d2d463f045e74
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ ## 2.0.0
2
+ - Initial release, mixin functions moved from logstash-output-zeromq, logstash-input-zeromq and logstash-filter-zeromq
data/CONTRIBUTORS ADDED
@@ -0,0 +1,16 @@
1
+ The following is a list of people who have contributed ideas, code, bug
2
+ reports, or in general have helped logstash along its way.
3
+
4
+ Contributors:
5
+ * Jordan Sissel (jordansissel)
6
+ * Richard Pijnenburg (electrical)
7
+ * Lucas Bremgartner (breml)
8
+ * Pere Urbón (purbon)
9
+ * Colin Surprenant (colinsurprenant)
10
+ * Brice Figureau (masterzen)
11
+ * John E. Vincent (lusis)
12
+
13
+ Note: If you've sent us patches, bug reports, or otherwise contributed to
14
+ Logstash, and you aren't on the list above and want to be, please let us know
15
+ and we'll make sure you're here. Contributions from folks like you are what make
16
+ open source awesome.
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2012–2015 Elasticsearch <http://www.elastic.co>
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/NOTICE.TXT ADDED
@@ -0,0 +1,5 @@
1
+ Elasticsearch
2
+ Copyright 2012-2015 Elasticsearch
3
+
4
+ This product includes software developed by The Apache Software
5
+ Foundation (http://www.apache.org/).
data/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # logstash-mixin-zeromq
2
+
3
+ [![Build Status](https://travis-ci.org/logstash-plugins/logstash-mixin-zeromq.svg?branch=master)](https://travis-ci.org/logstash-plugins/logstash-mixin-zeromq)
4
+
5
+ This is a mixin library to share code for zeromq input, output and filter Logstash plugins.
6
+
7
+ This code is designed internal use by Logstash plugins.
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ require 'ffi-rzmq'
3
+ require "logstash/namespace"
4
+
5
+ module LogStash::PluginMixins::ZeroMQ
6
+ # LOGSTASH-400
7
+ # see https://github.com/chuckremes/ffi-rzmq/blob/master/lib/ffi-rzmq/socket.rb#L93-117
8
+ STRING_OPTS = %w{IDENTITY SUBSCRIBE UNSUBSCRIBE}
9
+
10
+ def context
11
+ @context ||= ZMQ::Context.new
12
+ end
13
+
14
+ def setup(socket, address)
15
+ if server?
16
+ error_check(socket.bind(address), "binding to #{address}")
17
+ else
18
+ error_check(socket.connect(address), "connecting to #{address}")
19
+ end
20
+ @logger.info("0mq: #{server? ? 'connected' : 'bound'}", :address => address)
21
+ end
22
+
23
+ def error_check(rc, doing)
24
+ unless ZMQ::Util.resultcode_ok?(rc)
25
+ @logger.error("ZeroMQ error while #{doing}", { :error_code => rc })
26
+ raise "ZeroMQ Error while #{doing}"
27
+ end
28
+ end # def error_check
29
+
30
+ def setopts(socket, options)
31
+ options.each do |opt,value|
32
+ sockopt = opt.split('::')[1]
33
+ option = ZMQ.const_defined?(sockopt) ? ZMQ.const_get(sockopt) : ZMQ.const_missing(sockopt)
34
+ unless STRING_OPTS.include?(sockopt)
35
+ begin
36
+ Float(value)
37
+ value = value.to_i
38
+ rescue ArgumentError
39
+ raise "#{sockopt} requires a numeric value. #{value} is not numeric"
40
+ end
41
+ end # end unless
42
+ error_check(socket.setsockopt(option, value),
43
+ "while setting #{opt} == #{value}")
44
+ end # end each
45
+ end # end setopts
46
+ end # module LogStash::PluginMixins::ZeroMQ
@@ -0,0 +1,26 @@
1
+ Gem::Specification.new do |s|
2
+
3
+ s.name = 'logstash-mixin-zeromq'
4
+ s.version = '2.0.0'
5
+ s.licenses = ['Apache License (2.0)']
6
+ s.summary = "Mixin to share code for zeromq input, output and filter"
7
+ s.description = "This gem contains mixin functions, used by 0MQ logstash plugins. This gem is not a stand-alone program"
8
+ s.authors = ["Elastic"]
9
+ s.email = 'info@elastic.co'
10
+ s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
11
+ s.require_paths = ["lib"]
12
+
13
+ # Files
14
+ s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
15
+
16
+ # Tests
17
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
+
19
+ # Gem dependencies
20
+ s.add_runtime_dependency "logstash-core", ">= 2.0.0", "< 3.0.0"
21
+
22
+ s.add_runtime_dependency 'ffi-rzmq', '~> 2.0.4'
23
+
24
+ s.add_development_dependency 'logstash-devutils'
25
+ s.add_development_dependency 'logstash-codec-plain'
26
+ end
@@ -0,0 +1,95 @@
1
+ # encoding: utf-8
2
+ require "logstash/devutils/rspec/spec_helper"
3
+ require 'logstash/plugin_mixins/zeromq'
4
+
5
+ class Dummy < LogStash::Inputs::Base
6
+ attr_accessor :mode
7
+
8
+ include LogStash::PluginMixins::ZeroMQ
9
+ def server?
10
+ @mode == "server"
11
+ end
12
+ end
13
+
14
+ describe LogStash::PluginMixins::ZeroMQ do
15
+ let(:basic_config) { {} }
16
+ let(:impl) {
17
+ d = Dummy.new(basic_config)
18
+ d.mode = "server"
19
+ d
20
+ }
21
+
22
+ it "should initialize with no extra settings" do
23
+ expect {
24
+ impl
25
+ }.not_to raise_error
26
+ end
27
+
28
+ it "should return a ZMQ context" do
29
+ expect(impl.context).to be_a ZMQ::Context
30
+ end
31
+
32
+ context "when setup" do
33
+ let(:socket) { context = ZMQ::Context.new; context.socket(ZMQ::REQ) }
34
+ let(:port) { rand(1000)+1025 }
35
+ after do
36
+ socket.close
37
+ end
38
+
39
+ context "a server" do
40
+ it "should setup a server, bind to address without error" do
41
+ expect { impl.setup(socket, "tcp://127.0.0.1:#{port}") }.to_not raise_error
42
+ end
43
+ end
44
+
45
+ context "a client" do
46
+ let(:impl_client) {
47
+ d = Dummy.new(basic_config)
48
+ d.mode = "client"
49
+ d
50
+ }
51
+
52
+ it "should setup a client, connecting to address without error" do
53
+ expect { impl_client.setup(socket, "tcp://127.0.0.1:#{port}") }.to_not raise_error
54
+ end
55
+ end
56
+ end
57
+
58
+ context "when error_check" do
59
+ it "should not raise an error for return code 0 or greater" do
60
+ expect { impl.error_check(0, "test return values" ) }.to_not raise_error
61
+ expect { impl.error_check(1, "test return values" ) }.to_not raise_error
62
+ end
63
+ it "should raise an error for return code below 0" do
64
+ expect { impl.error_check(-1, "test return values" ) }.to raise_error
65
+ expect { impl.error_check(-999, "test return values" ) }.to raise_error
66
+ end
67
+ end
68
+
69
+ context "when socketopts" do
70
+ let(:socket) { context = ZMQ::Context.new; context.socket(ZMQ::REQ) }
71
+ after do
72
+ socket.close
73
+ end
74
+
75
+ it "should set SNDHWM to numeric value without error" do
76
+ expect { impl.setopts(socket, { "ZMQ::SNDHWM" => "50" } ) }.to_not raise_error
77
+ end
78
+ it "should raise an error if set SNDHWM to a non numeric value" do
79
+ expect { impl.setopts(socket, { "ZMQ::SNDHWM" => "foo" } ) }.to raise_error
80
+ end
81
+ it "should raise an error for unknown ZMQ option" do
82
+ expect { impl.setopts(socket, { "ZMQ::UNKNOWNOPT" => "foo" } ) }.to raise_error
83
+ end
84
+ it "should set IDENTITY to string value without error" do
85
+ expect { impl.setopts(socket, { "ZMQ::IDENTITY" => "my_named_queue" } ) }.to_not raise_error
86
+ end
87
+ it "should raise an error for a wrong formated ZMQ option" do
88
+ expect { impl.setopts(socket, { "ZMQ..SNDHWM" => "50" } ) }.to raise_error
89
+ end
90
+ it "should set multiple options" do
91
+ expect { impl.setopts(socket, { "ZMQ::SNDHWM" => "50", "ZMQ::SNDBUF" => "50" } ) }.to_not raise_error
92
+ end
93
+
94
+ end
95
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-mixin-zeromq
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Elastic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 2.0.0
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ name: logstash-core
23
+ prerelease: false
24
+ type: :runtime
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: 2.0.4
39
+ name: ffi-rzmq
40
+ prerelease: false
41
+ type: :runtime
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 2.0.4
47
+ - !ruby/object:Gem::Dependency
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ name: logstash-devutils
54
+ prerelease: false
55
+ type: :development
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ name: logstash-codec-plain
68
+ prerelease: false
69
+ type: :development
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ description: This gem contains mixin functions, used by 0MQ logstash plugins. This gem is not a stand-alone program
76
+ email: info@elastic.co
77
+ executables: []
78
+ extensions: []
79
+ extra_rdoc_files: []
80
+ files:
81
+ - CHANGELOG.md
82
+ - CONTRIBUTORS
83
+ - Gemfile
84
+ - LICENSE
85
+ - NOTICE.TXT
86
+ - README.md
87
+ - lib/logstash/plugin_mixins/zeromq.rb
88
+ - logstash-util-zeromq.gemspec
89
+ - spec/plugin_mixins/zeromq_spec.rb
90
+ homepage: http://www.elastic.co/guide/en/logstash/current/index.html
91
+ licenses:
92
+ - Apache License (2.0)
93
+ metadata: {}
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.4.8
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: Mixin to share code for zeromq input, output and filter
114
+ test_files:
115
+ - spec/plugin_mixins/zeromq_spec.rb