logstash-input-azureeventhub 0.9.5-java

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: 28e1da54f720c2d11303e4a4c28dcec2332814bc
4
+ data.tar.gz: 3e43bdce6632c8b822b556b166f7558bbabaaccc
5
+ SHA512:
6
+ metadata.gz: 27c5b6bd3740836cabeecac6e9ba9eaf240f83ca17e11ac2fda95b65839a48737a71b4ce6e4a37eef854066ccfad6ba59310255ec63e23fc9db27b15427548f8
7
+ data.tar.gz: 9d187d4ba4cdd1579cd80fafac81cf6df45b7f6295276946702652ade9619dc2db07ebdc24438a3b50309c615497b723b12cd1c67dad0853c75c8bdba6466b07
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ ## 2016.05.03
2
+ * Fixed the jar dependency problem. Now installing the plugin by using the "plugin" or "logstash-plugin" (for newer versions of Logstash) should automatically download and jar files needed.
3
+ * Fixed the default value of *time_since_epoch_millis* to use UTC time to match the SelectorFilter.
4
+ * Made the plugin to respect Logstash shutdown signal.
5
+ * Updated the *logstash-core* runtime dependency requirement to '~> 2.0'.
6
+ * Updated the *logstash-devutils* development dependency requirement to '>= 0.0.16'
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,17 @@
1
+
2
+ Copyright (c) Microsoft. All rights reserved.
3
+ Microsoft would like to thank its contributors, a list
4
+ of whom are at http://aka.ms/entlib-contributors
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License"); you
7
+ may not use this file except in compliance with the License. You may
8
+ obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
+ implied. See the License for the specific language governing permissions
16
+ and limitations under the License.
17
+
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Logstash input plugin for data from Event Hubs
2
+
3
+ ## Summary
4
+ This plugin reads data from specified Azure Event Hubs.
5
+
6
+ ## Installation
7
+ You can install this plugin using the Logstash "plugin" or "logstash-plugin" (for newer versions of Logstash) command:
8
+ ```sh
9
+ logstash-plugin install logstash-input-azureeventhub
10
+ ```
11
+ For more information, see Logstash reference [Working with plugins](https://www.elastic.co/guide/en/logstash/current/working-with-plugins.html).
12
+
13
+ ## Configuration
14
+ ### Required Parameters
15
+ __*key*__
16
+
17
+ The shared access key to the target event hub.
18
+
19
+ __*username*__
20
+
21
+ The name of the shared access policy.
22
+
23
+ __*namespace*__
24
+
25
+ Event Hub namespace.
26
+
27
+ __*eventhub*__
28
+
29
+ Event Hub name.
30
+
31
+ __*partitions*__
32
+
33
+ Partition count of the target event hub.
34
+
35
+ ### Optional Parameters
36
+ __*domain*__
37
+
38
+ Domain of the target Event Hub. Default value is "servicebus.windows.net".
39
+
40
+ __*port*__
41
+
42
+ Port of the target Event Hub. Default value is 5671.
43
+
44
+ __*receive_credits*__
45
+
46
+ The credit number to limit the number of messages to receive in a processing cycle. Default value is 1000.
47
+
48
+ __*consumer_group*__
49
+
50
+ Name of the consumer group. Default value is "$default".
51
+
52
+ __*time_since_epoch_millis*__
53
+
54
+ Specifies the point of time after which the messages are received. Default value is the time when this plugin is initialized:
55
+ ```ruby
56
+ Time.now.utc.to_i * 1000
57
+ ```
58
+ __*thread_wait_sec*__
59
+
60
+ Specifies the time (in seconds) to wait before another try if no message was received.
61
+
62
+ ### Examples
63
+ ```
64
+ input
65
+ {
66
+ azurewadeventhub
67
+ {
68
+ key => "VGhpcyBpcyBhIGZha2Uga2V5Lg=="
69
+ username => "receivepolicy"
70
+ namespace => "mysbns"
71
+ eventhub => "myeventhub"
72
+ partitions => 4
73
+ }
74
+ }
75
+ ```
76
+
77
+ ## More information
78
+ The source code of this plugin is hosted in GitHub repo [Microsoft Azure Diagnostics with ELK](https://github.com/Azure/azure-diagnostics-tools). We welcome you to provide feedback and/or contribute to the project.
79
+
80
+ Please also see [Analyze Diagnostics Data with ELK template](https://github.com/Azure/azure-quickstart-templates/tree/master/diagnostics-with-elk) for quick deployment of ELK to Azure.
@@ -0,0 +1,159 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+
5
+ require "securerandom"
6
+ require "open-uri"
7
+ require "thread"
8
+
9
+ require Dir[ File.dirname(__FILE__) + "/../../*_jars.rb" ].first
10
+
11
+ # Reads events from Azure event-hub
12
+ class LogStash::Inputs::Azureeventhub < LogStash::Inputs::Base
13
+
14
+ config_name "azureeventhub"
15
+ milestone 1
16
+
17
+ default :codec, "json"
18
+
19
+ config :key, :validate => :string
20
+ config :username, :validate => :string
21
+ config :namespace, :validate => :string
22
+ config :domain, :validate => :string, :default => "servicebus.windows.net"
23
+ config :port, :validate => :number, :default => 5671
24
+ config :receive_credits, :validate => :number, :default => 1000
25
+
26
+ config :eventhub, :validate => :string
27
+ config :partitions, :validate => :number
28
+ config :consumer_group, :validate => :string, :default => "$default"
29
+
30
+ config :time_since_epoch_millis, :validate => :number, :default => Time.now.utc.to_i * 1000
31
+ config :thread_wait_sec, :validate => :number, :default => 5
32
+
33
+
34
+ def initialize(*args)
35
+ super(*args)
36
+ end # def initialize
37
+
38
+ public
39
+ def register
40
+ end # def register
41
+
42
+ def get_pay_load(message)
43
+ return nil if not message
44
+ message.getPayload().each do |section|
45
+ if section.java_kind_of? org::apache::qpid::amqp_1_0::type::messaging::Data or section.java_kind_of? org::apache::qpid::amqp_1_0::type::messaging::AmqpValue
46
+ return section.getValue().to_s
47
+ end
48
+ end
49
+ return nil
50
+ end
51
+
52
+ def process(output_queue, receiver, partition)
53
+ while !stop?
54
+ begin
55
+ msg = receiver.receive(10)
56
+ if msg
57
+ codec.decode(get_pay_load(msg)) do |event|
58
+ output_queue << event
59
+ end
60
+ receiver.acknowledge(msg)
61
+ else
62
+ @logger.debug(" " + partition.to_s.rjust(2,"0") + " --- " + "No message")
63
+ sleep(@thread_wait_sec)
64
+ end
65
+ rescue LogStash::ShutdownSignal => e
66
+ raise e
67
+ rescue org::apache::qpid::amqp_1_0::client::ConnectionErrorException => e
68
+ raise e
69
+ rescue => e
70
+ @logger.error(" " + partition.to_s.rjust(2,"0") + " --- " + "Oh My, An error occurred.", :exception => e)
71
+ end
72
+ end # process
73
+ end # process
74
+
75
+ def process_partition(output_queue, partition)
76
+ while !stop?
77
+ begin
78
+ filter = SelectorFilter.new "amqp.annotation.x-opt-enqueuedtimeutc > '" + @time_since_epoch_millis.to_s + "'"
79
+ filters = { org::apache::qpid::amqp_1_0::type::Symbol.valueOf("apache.org:selector-filter:string") => filter }
80
+
81
+ host = @namespace + "." + @domain
82
+ connection = org::apache::qpid::amqp_1_0::client::Connection.new(host, @port, @username, @key, host, true)
83
+ connection.getEndpoint().getDescribedTypeRegistry().register(filter.java_class, WriterFactory.new)
84
+ receiveSession = connection.createSession()
85
+ receiver = receiveSession.createReceiver(@eventhub + "/ConsumerGroups/" + @consumer_group + "/Partitions/" + partition.to_s, org::apache::qpid::amqp_1_0::client::AcknowledgeMode::ALO, "eventhubs-receiver-link-" + partition.to_s, false, filters, nil)
86
+ receiver.setCredit(org::apache::qpid::amqp_1_0::type::UnsignedInteger.valueOf(@receive_credits), true)
87
+ process(output_queue,receiver,partition)
88
+ rescue org::apache::qpid::amqp_1_0::client::ConnectionErrorException => e
89
+ @logger.debug(" " + partition.to_s.rjust(2,"0") + " --- " + "resetting connection")
90
+ @time_since_epoch_millis = Time.now.utc.to_i * 1000
91
+ end
92
+ end
93
+ rescue LogStash::ShutdownSignal => e
94
+ receiver.close()
95
+ raise e
96
+ rescue => e
97
+ @logger.error(" " + partition.to_s.rjust(2,"0") + " --- Oh My, An error occurred.", :exception => e)
98
+ end # process
99
+
100
+ public
101
+ def run(output_queue)
102
+ threads = []
103
+ (0..(@partitions-1)).each do |p_id|
104
+ threads << Thread.new { process_partition(output_queue, p_id) }
105
+ end
106
+ threads.each { |thr| thr.join }
107
+ end # def run
108
+
109
+ public
110
+ def teardown
111
+ end # def teardown
112
+ end # class LogStash::Inputs::Azureeventhub
113
+
114
+
115
+ class SelectorFilter
116
+ include org::apache::qpid::amqp_1_0::type::messaging::Filter
117
+
118
+ def initialize(value)
119
+ @value = value
120
+ end
121
+
122
+ def getValue
123
+ return @value
124
+ end
125
+
126
+ def toString
127
+ return @value
128
+ end
129
+ end
130
+
131
+ class SelectorFilterWriter < org::apache::qpid::amqp_1_0::codec::AbstractDescribedTypeWriter
132
+ def initialize(registry)
133
+ super(registry)
134
+ end
135
+
136
+ def onSetValue(value)
137
+ @value = value
138
+ end
139
+
140
+ def clear
141
+ @value = nil
142
+ end
143
+
144
+ def getDescriptor
145
+ return org::apache::qpid::amqp_1_0::type::UnsignedLong.valueOf(83483426826);
146
+ end
147
+
148
+ def createDescribedWriter
149
+ return getRegistry().getValueWriter(@value.getValue());
150
+ end
151
+ end
152
+
153
+ class WriterFactory
154
+ include org::apache::qpid::amqp_1_0::codec::ValueWriter::Factory
155
+
156
+ def newInstance(registry)
157
+ return SelectorFilterWriter.new registry
158
+ end
159
+ end
@@ -0,0 +1,32 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'logstash-input-azureeventhub'
3
+ s.version = '0.9.5'
4
+ s.platform = "java"
5
+ s.licenses = ['Apache License (2.0)']
6
+ s.summary = "This plugin collects data from Azure Event Hubs."
7
+ s.description = "This gem is a Logstash plugin. It reads data from Azure Event Hubs."
8
+ s.authors = ["Microsoft Corporation"]
9
+ s.email = 'azdiag@microsoft.com'
10
+ s.homepage = "https://github.com/Azure/azure-diagnostics-tools"
11
+ s.require_paths = ["lib"]
12
+
13
+ # Files
14
+ s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','Gemfile','LICENSE']
15
+ # Tests
16
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
17
+
18
+ # Special flag to let us know this is actually a logstash plugin
19
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
20
+
21
+ # Gem dependencies
22
+ s.add_runtime_dependency 'logstash-core', '~> 2.0'
23
+ s.add_runtime_dependency 'azure', '~> 0.7.1'
24
+ s.add_development_dependency 'logstash-devutils', '>= 0.0.16'
25
+
26
+ #Jar dependencies
27
+ s.requirements << "jar 'org.apache.qpid:qpid-amqp-1-0-common', '0.32'"
28
+ s.requirements << "jar 'org.apache.qpid:qpid-amqp-1-0-client-jms', '0.32'"
29
+ s.requirements << "jar 'org.apache.qpid:qpid-client', '0.32'"
30
+ s.requirements << "jar 'org.apache.geronimo.specs:geronimo-jms_1.1_spec', '1.1.1'"
31
+ s.add_runtime_dependency 'jar-dependencies', '~> 0.3.2'
32
+ end
@@ -0,0 +1 @@
1
+ require "logstash/devutils/rspec/spec_helper"
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-input-azureeventhub
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.5
5
+ platform: java
6
+ authors:
7
+ - Microsoft Corporation
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: logstash-core
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - "~>"
23
+ - !ruby/object:Gem::Version
24
+ version: '2.0'
25
+ prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: azure
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.7.1
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: 0.7.1
39
+ prerelease: false
40
+ type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: logstash-devutils
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.16
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.0.16
53
+ prerelease: false
54
+ type: :development
55
+ - !ruby/object:Gem::Dependency
56
+ name: jar-dependencies
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.3.2
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: 0.3.2
67
+ prerelease: false
68
+ type: :runtime
69
+ description: This gem is a Logstash plugin. It reads data from Azure Event Hubs.
70
+ email: azdiag@microsoft.com
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - CHANGELOG.md
76
+ - Gemfile
77
+ - LICENSE
78
+ - README.md
79
+ - lib/logstash/inputs/azureeventhub.rb
80
+ - logstash-input-azureeventhub.gemspec
81
+ - spec/inputs/azureeventhub_spec.rb
82
+ homepage: https://github.com/Azure/azure-diagnostics-tools
83
+ licenses:
84
+ - Apache License (2.0)
85
+ metadata:
86
+ logstash_plugin: 'true'
87
+ logstash_group: input
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements:
103
+ - jar 'org.apache.qpid:qpid-amqp-1-0-common', '0.32'
104
+ - jar 'org.apache.qpid:qpid-amqp-1-0-client-jms', '0.32'
105
+ - jar 'org.apache.qpid:qpid-client', '0.32'
106
+ - jar 'org.apache.geronimo.specs:geronimo-jms_1.1_spec', '1.1.1'
107
+ rubyforge_project:
108
+ rubygems_version: 2.4.8
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: This plugin collects data from Azure Event Hubs.
112
+ test_files:
113
+ - spec/inputs/azureeventhub_spec.rb