logstash-input-genjdbc 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e219d2a3354070fc2d7efc12bf8ae55b1d143899
4
+ data.tar.gz: 781b742fc40750ab302a795f5c33686cd83a675e
5
+ SHA512:
6
+ metadata.gz: deec50c999c1dfeb7e32d38b8c4ee7e9418b6c41c625a2d6a8cda4321201ade5426c27e72672f8d6ae6fef08bcb9de4b02a4e445fe2e5fddd42a8a61e2e325d5
7
+ data.tar.gz: 9b8fcc90609cb79bdafcf4cb40f1e787b3759299180a277351f0b1bb65a122a16c018f81c23c03a107f69230687fb153b673942102cd1bd4b680f3917473cf05
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 IBM <http://www.ibm.com>
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/README.md ADDED
@@ -0,0 +1,197 @@
1
+ <html>
2
+ <head>
3
+ <meta charset="UTF-8">
4
+ <title>Input genjdbc</title>
5
+ <link rel="stylesheet" href="http://logstash.net/style.css">
6
+ </head>
7
+ <body>
8
+ <div class="container">
9
+
10
+ <div id="content_right">
11
+ <!--main content goes here, yo!-->
12
+
13
+ <h2>genjdbc</h2>
14
+ <h3>Milestone: <a href="http://logstash.net/docs/1.4.2/plugin-milestones">1</a></h3>
15
+ <h3> Synopsis </h3>
16
+ Connects to datasources using JDBC driver, executes a select query and for each record returned, emits an event.
17
+ <p>
18
+ <pre><code>input {
19
+ genjdbc {
20
+ <a href="#jdbcHost">jdbcHost</a> => ... # string (required)
21
+ <a href="#jdbcPort">jdbcPort</a> => ... # string (required)
22
+ <a href="#jdbcDBName">jdbcDBName</a> => ... # string (required)
23
+ <a href="#jdbcTargetDB">jdbcTargetDB</a> => ... # string (required)
24
+ <a href="#jdbcDriverPath">jdbcDriverPath</a> => ... # string (required)
25
+ <a href="#jdbcUser">jdbcUser</a> => ... # string (required)
26
+ <a href="#jdbcPassword">jdbcPassword</a> => ... # string (required)
27
+ <a href="#jdbcSQLQuery">jdbcSQLQuery</a> => ... # string (required)
28
+ <a href="#jdbcURL">jdbcURL</a> => ... # string (optional)
29
+ <a href="#jdbcTimeField">jdbcTimeField</a> => ... # string (optional)
30
+ <a href="#jdbcPollInterval">jdbcPollInterval</a> => ... # number (optional), default: 60
31
+ <a href="#jdbcCollectionStartTime">jdbcCollectionStartTime</a> => ... # string (optional)
32
+ <a href="#jdbcPStoreFile">jdbcPStoreFile</a> => ... # string (optional)
33
+ }
34
+ }
35
+ </code></pre>
36
+ <h3> Details </h3>
37
+ <p>
38
+ This plugin takes basic JDBC configuration information, an SQL query and some timing control. It then runs that queryr (with some additional timing information applied) in a loop, emitting events corresponding to each row in the returned table. For example
39
+ </p>
40
+ <pre><code>
41
+ genjdbc {
42
+ jdbcHost => 'X.X.X.X'
43
+ jdbcPort => '50000'
44
+ jdbcTargetDB => 'db2'
45
+ jdbcDBName =>'MYDB'
46
+ jdbcUser => 'myuser'
47
+ jdbcPassword => 'mypasswd'
48
+ jdbcDriverPath => '/path/to/my/driver/db2jcc4.jar'
49
+ jdbcSQLQuery => 'select * from DT_ALARM_HIST where SUPPRESSED_DESC is null'
50
+ jdbcTimeField => 'TSTAMP'
51
+ jdbcPStoreFile => './test.pstore'
52
+ jdbcCollectionStartTime => '2015-01-01 00:00:00.000'
53
+ }
54
+ </code></pre>
55
+ <p>
56
+ In the above example. the query will have <code>where 'TSTAMP' >= currentTime'</code> appended to it. <code>currentTime</code> is an internal variable maintained by the plugin which will be incremented on each loop with the timestamp of the last record returned from the query.
57
+ </p>
58
+ <h4>
59
+ <a name="jdbcHost">jdbcHost</a>
60
+ </h4>
61
+ <ul>
62
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
63
+ <li> There is no default for this setting </li>
64
+ </ul>
65
+ <p>jdbc host name. Used to form jdbc url</p>
66
+ <h4>
67
+ <a name="jdbcPort">jdbcPort</a>
68
+ </h4>
69
+ <ul>
70
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
71
+ <li> There is no default for this setting </li>
72
+ </ul>
73
+ <p>
74
+ jdbc port number. Used to form jdbc url
75
+ </p>
76
+ <h4><a name="jdbcDBName">jdbcDBName</a></h4>
77
+ <ul>
78
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
79
+ <li> The default value is "" </li>
80
+ </ul>
81
+ <p>
82
+ Name of database on server / schema name. Used to form jdbc url
83
+ </p>
84
+ <h4><a name="jdbcTargetDB">jdbcTargetDB</a></h4>
85
+ <ul>
86
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
87
+ <li> There is no default value for this item</li>
88
+ </ul>
89
+ <p>
90
+ Target DB name(vendor). used to select appropriate JDBC format.
91
+ Supported types
92
+ <li>postgresql </li>
93
+ <li>oracle</li>
94
+ <li>db2</li>
95
+ <li>mysql</li>
96
+ <li>derby</li>
97
+ <li>mssql</li>
98
+ </p>
99
+ <h4><a name="jdbcDriverPath">jdbcDriverPath</a></h4>
100
+ <ul>
101
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
102
+ <li> There is no default value for this item </li>
103
+ </ul>
104
+ <p>
105
+ path to jdbc driver
106
+ </p>
107
+ <h4><a name="jdbcUser">jdbcUser</a></h4>
108
+ <ul>
109
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
110
+ <li> There is no default value for this item </li>
111
+ </ul>
112
+ <p>
113
+ jdbc user name. Used to form jdbc url
114
+ </p>
115
+ <h4><a name="jdbcPassword">jdbcPassword</a></h4>
116
+ <ul>
117
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
118
+ <li> There is no default value for this item </li>
119
+ </ul>
120
+ <p>
121
+ jdbc password. Used to form jdbc url
122
+ </p>
123
+ <h4><a name="jdbcSQLQuery">jdbcSQLQuery</a></h4>
124
+ <ul>
125
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
126
+ <li> There is no default value for this item </li>
127
+ </ul>
128
+ <p>
129
+ SQL query to execute or the path of a text file which contains the query to execute.
130
+ </p>
131
+ <p><code>jdbcSQLQuery => "select * from myTable"</code><p>
132
+ In the latter case, prefix the filename with 'file:' e.g.
133
+ <p><code>jdbcSQLQuery => "file:/path/to/my/query.txt"</code></p>
134
+
135
+ <h4><a name="jdbcURL">jdbcURL</a></h4>
136
+ <ul>
137
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
138
+ <li> There is no default value for this item </li>
139
+ </ul>
140
+ <p>
141
+ jdbc URL - explicitly set the jdbc URL string. Overrides all other URL component settings (e.g jdbcHost, jdbcPort)
142
+ </p>
143
+ <h4><a name="jdbcTimeField">jdbcTimeField</a></h4>
144
+ <ul>
145
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
146
+ <li> There is no default value for this item </li>
147
+ </ul>
148
+ <p>
149
+ Name of the table column which contains timestamp information. This string will be used in the automatically generated SQL query as part of the <code>where</code> clause.
150
+ </p>
151
+ <h4><a name="jdbcPollInterval">jdbcPollInterval</a></h4>
152
+ <ul>
153
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#Number">Number</a> </li>
154
+ <li> 60 </li>
155
+ </ul>
156
+ <p>
157
+ The number of seconds to wait between query loops. A query loop executes the query, waits for a response, processes the response ( by emitting events). Once these steps are completed, the plugin will wait the specified amount of time before starting again and invoking the query.
158
+ </p>
159
+ <h4><a name="jdbcCollectionStartTime">jdbcCollectionStartTime</a></h4>
160
+ <ul>
161
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
162
+ <li> There is no default value for this item </li>
163
+ </ul>
164
+ <p>
165
+ This is a timestamp expressed as a string e.g. <code>'2015-01-01 00:00:00.000'</code>. It will be used in direct comparison operations against the specified <code>jdbcTimeField</code> so the precise format depends on the database and the nature of the time column referenced.
166
+ </p>
167
+ <h4><a name="jdbcPStoreFile">jdbcPStoreFile</a></h4>
168
+ <ul>
169
+ <li> Value type is <a href="http://logstash.net/docs/1.4.2/configuration#string">String</a> </li>
170
+ <li> There is no default value for this item </li>
171
+ </ul>
172
+ <p>
173
+ The pathname of a file which is used to maintain state for this operator. It is useful to be able to specify this as you may have multiple <code>genjdbc</code> plugins.
174
+ </p>
175
+ <hr>
176
+ </div>
177
+ <div class="clear">
178
+ </div>
179
+ </div>
180
+ </div>
181
+ <!--closes main container div-->
182
+ <div class="clear">
183
+ </div>
184
+ <div class="footer">
185
+ <p>
186
+ Hello! I'm your friendly footer. If you're actually reading this, I'm impressed.
187
+ </p>
188
+ </div>
189
+ <noscript>
190
+ <div style="display:inline;">
191
+ <img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/985891458/?value=0&amp;guid=ON&amp;script=0"/>
192
+ </div>
193
+ </noscript>
194
+ <script src="/js/patch.js?1.4.2"></script>
195
+ </body>
196
+ </html>
197
+
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "logstash/devutils/rake"
@@ -0,0 +1,232 @@
1
+ # Date 06 July 2015 09:00:00 GMT
2
+ # Logstash Generic JDBC Input PlugIn
3
+ # Authors: Stuart Tuck & Rob McKeown
4
+ #
5
+ # This is a community contributed content pack and no explicit support, guarantee or warranties
6
+ # are provided by IBM nor the contributor. Feel free to engage the community on the ITOAdev
7
+ # forum if you need help!
8
+ #
9
+ # encoding: utf-8
10
+ require "logstash/inputs/base"
11
+ require "logstash/namespace"
12
+ require "java"
13
+ require "rubygems"
14
+ require "pstore"
15
+
16
+ # This Input Plug Is Intended to Read Events from a JDBC url
17
+ #
18
+ # Like stdin and file inputs, each row returned from the remote system
19
+ # is assumed to result in one line of output.
20
+ #
21
+ class LogStash::Inputs::Genjdbc < LogStash::Inputs::Base
22
+ config_name "genjdbc"
23
+
24
+ default :codec, "plain"
25
+
26
+ # Configuration Parameters of the remote instance
27
+ config :jdbcHost, :validate => :string, :required => true
28
+ config :jdbcPort, :validate => :string, :required => true
29
+ config :jdbcDBName, :validate => :string, :required => true
30
+ config :jdbcTargetDB, :validate => :string, :required => true
31
+ config :jdbcDriverPath, :validate => :string, :required => true
32
+ config :jdbcUser, :validate => :string, :required => true
33
+ config :jdbcPassword, :validate => :string, :required => true
34
+ config :jdbcSQLQuery, :validate => :string, :required => true
35
+ config :jdbcURL, :validate => :string, :required => false
36
+ config :jdbcTimeField, :validate => :string, :required => false
37
+ config :jdbcPollInterval, :validate => :number, :required => false, :default => 60
38
+ config :jdbcCollectionStartTime, :validate => :string, :required => false
39
+ config :jdbcPStoreFile, :validate => :string, :required => false, :default => "genjdbc.pstore"
40
+
41
+ # The 'read' timeout in seconds. If a particular connection is idle for
42
+ # more than this timeout period, we will assume it is dead and close it.
43
+ # ToDo: Implement more awareness of connection state.
44
+ # If you never want to timeout, use -1.
45
+ #config :data_timeout, :validate => :number, :default => -1
46
+
47
+ def initialize(*args)
48
+ super(*args)
49
+ end # def initialize
50
+
51
+ public
52
+ def register
53
+ @logger.info("Starting JDBC input", :address => "#{@jdbcHost}")
54
+ end # def register
55
+
56
+ public
57
+ def run(queue)
58
+ require 'java'
59
+ require 'date'
60
+ require @jdbcDriverPath
61
+
62
+ # Load the Driver Manager Classes required to create/operate sql connection
63
+ java_import java.sql.DriverManager
64
+ java_import java.sql.Connection
65
+ import java.lang.System
66
+
67
+
68
+ # Database Selection
69
+ # ----------------------------------------------------------------------------------------------------------
70
+ if @jdbcTargetDB == "postgresql"
71
+ driver = org.postgresql.Driver.new
72
+ driverurl = "jdbc:postgresql://"+@jdbcHost+":"+@jdbcPort+"/"+@jdbcDBName
73
+ # Spec. jdbc:postgresql://<server>:<5432>/<database_name>
74
+ end
75
+ if @jdbcTargetDB == "oracle"
76
+ driver = Java::oracle.jdbc.driver.OracleDriver.new
77
+ driverurl = 'jdbc:oracle:thin:@'+@jdbcHost+':'+@jdbcPort+':'+@jdbcDBName
78
+ # Spec. jdbc:oracle:thin:@<server>[:<1521>]:<database_name>
79
+ end
80
+ if @jdbcTargetDB == "db2"
81
+ driver = Java::com.ibm.db2.jcc.DB2Driver.new
82
+ driverurl = "jdbc:db2://"+@jdbcHost+":"+@jdbcPort+"/"+@jdbcDBName
83
+ # Spec. jdbc:db2://<server>:<6789>/<db-name>
84
+ end
85
+ if @jdbcTargetDB == "mysql"
86
+ driver = com.mysql.jdbc.Driver.new
87
+ driverurl = "jdbc:mysql://"+@jdbcHost+":"+@jdbcPort+"/"+@jdbcDBName+"?profileSQL=true"
88
+ # Spec. jdbc:mysql://<hostname>[,<failoverhost>][<:3306>]/<dbname>[?<param1>=<value1>][&<param2>=<value2>]
89
+ end
90
+ if @jdbcTargetDB == "derby"
91
+ driver = org.apache.derby.jdbc.ClientDriver.new
92
+ driverurl = "jdbc:mysql://"+@jdbcHost+":"+@jdbcPort+"/"+@jdbcDBName
93
+ # Spec. jdbc:derby://<server>[:<port>]/<databaseName>[;<URL attribute>=<value>]
94
+ end
95
+ if @jdbcTargetDB == "mssql"
96
+ driver = com.microsoft.sqlserver.jdbc.SQLServerDriver.new
97
+ driverurl = "jdbc:sqlserver://"+@jdbcHost+":"+@jdbcPort+";databaseName="+@jdbcDBName
98
+ # Spec. jdbc:sqlserver://<server_name>:1433;databaseName=<db_name>
99
+ end
100
+
101
+
102
+ # Check the jdbcURL setting to see if there is an override, and use constructed URL if not.
103
+ if jdbcURL.nil?
104
+ @jdbcURL = driverurl
105
+ end
106
+
107
+ # Set the connection properties
108
+ props = java.util.Properties.new
109
+ props.setProperty("user",@jdbcUser)
110
+ props.setProperty("password",@jdbcPassword)
111
+
112
+ # Create a new connection to the jdbc URL, using the connection properties
113
+ @logger.info("Creating Connection to JDBC URL", :address => "#{@jdbcURL}")
114
+ conn = driver.connect(@jdbcURL,props)
115
+
116
+ # Prepare the store where we'll track most recent timestamp
117
+ store = PStore.new(@jdbcPStoreFile)
118
+
119
+ # Set a start time
120
+ lastEvent = store.transaction { store.fetch(:lastEvent,DateTime.now) }
121
+ # If set, make an override from the config..
122
+ if !@jdbcCollectionStartTime.nil?
123
+ lastEvent = DateTime.parse @jdbcCollectionStartTime
124
+ end
125
+
126
+ # Read query from file if so configured
127
+ if @jdbcSQLQuery.start_with? "file:"
128
+ queryFilename = @jdbcSQLQuery
129
+ queryFilename.slice! "file:"
130
+ queryFile = File.open(queryFilename,"rb")
131
+ originalQuery = queryFile.read
132
+ queryFile.close
133
+ else
134
+ originalQuery = @jdbcSQLQuery
135
+ end
136
+
137
+ # Main Loop
138
+ while true
139
+
140
+ # Debug : puts "lastEvent : "+lastEvent.to_s
141
+ jdbclastEvent = lastEvent.strftime("%Y-%m-%d %H:%M:%S.%L")
142
+ currentTime = jdbclastEvent
143
+
144
+ stmt = conn.create_statement
145
+
146
+ # If query explicity refers to CURRENTTIME, then use that directly
147
+ if originalQuery.include? "%{CURRENTTIME}"
148
+ escapedQuery = originalQuery.gsub("%{CURRENTTIME}",currentTime)
149
+ else
150
+ # if not, we'll implicity assemble query
151
+ # Suggest removing this option completely and making it explicity
152
+ # Escape sql query provided from config file
153
+ begin
154
+ if originalQuery.include? " where " then
155
+ escapedQuery = originalQuery + " and "+@jdbcTimeField+" > '" + jdbclastEvent + "'" + " order by " +@jdbcTimeField
156
+ else
157
+ escapedQuery = originalQuery + " where "+@jdbcTimeField+" > '" + jdbclastEvent + "'" + " order by " +@jdbcTimeField
158
+ end
159
+ end
160
+ end
161
+
162
+
163
+ escapedQuery = escapedQuery.gsub(/\\\"/,"\"")
164
+
165
+ @logger.info("Running Query : ", :query => "#{escapedQuery}")
166
+
167
+ # Execute Query Statement
168
+ rs = stmt.executeQuery(escapedQuery)
169
+
170
+ rsmd = rs.getMetaData();
171
+ columnCount = rsmd.getColumnCount()
172
+
173
+ while (rs.next) do
174
+ event = LogStash::Event.new()
175
+ event["jdbchost"] = @jdbcHost
176
+
177
+ for i in 1..columnCount
178
+ columnName = rsmd.getColumnName(i)
179
+ value = rs.getString(columnName)
180
+
181
+ # Debug (find out columntype for each object)
182
+ #columnType = rsmd.getColumnTypeName(i)
183
+ #puts "Column Type is : "+(columnType)
184
+
185
+ if value.nil?
186
+ #substitute "" for <nil> returned by DB
187
+ value = ""
188
+ end
189
+ event[columnName] = value
190
+
191
+ # Check the column to set the latest time field
192
+ if columnName == @jdbcTimeField
193
+ # debug: puts "Time Column is : "+columnName
194
+ eventTime = DateTime.parse value
195
+ # debug: puts "Date Parsed is : "+eventTime.to_s
196
+ if eventTime > lastEvent
197
+ lastEvent = eventTime
198
+ store.transaction do store[:lastEvent] = lastEvent end
199
+ end
200
+ end
201
+
202
+ end # for
203
+
204
+ # Todo, check how many rows collected .. rowcount++
205
+ decorate(event)
206
+ queue << event
207
+
208
+ end
209
+
210
+ rs.close
211
+ stmt.close
212
+
213
+ # Now need to sleep for interval
214
+ @logger.info("Sleeping for ", :interval_seconds => "#{@jdbcPollInterval}")
215
+ sleep(@jdbcPollInterval)
216
+ # zzzzzZZZZ
217
+
218
+ end # While true (end loop)
219
+
220
+ rescue LogStash::ShutdownSignal
221
+ # nothing to do
222
+ ensure
223
+ # Close the JDBC connection
224
+ @logger.info("Closing Connection to JDBC URL", :address => "#{@jdbcURL}")
225
+ conn.close() rescue nil
226
+ end # def run
227
+
228
+ def teardown
229
+ @interrupted = true
230
+ end # def teardown
231
+
232
+ end # class LogStash::Inputs::Genjdbc
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'logstash-input-genjdbc'
3
+ s.version = '0.1.1'
4
+ s.licenses = ['Apache License (2.0)']
5
+ s.summary = "This example input streams a string at a definable interval."
6
+ s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
7
+ s.authors = ["Rob Mckeown, Stuart Tuck"]
8
+ s.email = 'rmckeown@us.ibm.com'
9
+ s.homepage = "https://github.com/IBM-ITOAdev/logstash-input-genjdbc"
10
+ s.require_paths = ["lib"]
11
+
12
+ # Files
13
+ s.files = `git ls-files`.split($\)
14
+ # Tests
15
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
16
+
17
+ # Special flag to let us know this is actually a logstash plugin
18
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
19
+
20
+ # Gem dependencies
21
+ s.add_runtime_dependency "logstash-core", '>= 1.4.0', '< 2.0.0'
22
+ s.add_runtime_dependency 'logstash-codec-plain'
23
+
24
+ s.add_development_dependency 'logstash-devutils'
25
+ end
@@ -0,0 +1 @@
1
+ require "logstash/devutils/rspec/spec_helper"
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-input-genjdbc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Rob Mckeown, Stuart Tuck
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-02 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: 1.4.0
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.0
23
+ requirement: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: 1.4.0
28
+ - - <
29
+ - !ruby/object:Gem::Version
30
+ version: 2.0.0
31
+ prerelease: false
32
+ type: :runtime
33
+ - !ruby/object:Gem::Dependency
34
+ name: logstash-codec-plain
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirement: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ prerelease: false
46
+ type: :runtime
47
+ - !ruby/object:Gem::Dependency
48
+ name: logstash-devutils
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ prerelease: false
60
+ type: :development
61
+ description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
62
+ email: rmckeown@us.ibm.com
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - Gemfile
68
+ - LICENSE
69
+ - README.md
70
+ - Rakefile
71
+ - lib/logstash/inputs/genjdbc.rb
72
+ - logstash-input-genjdbc.gemspec
73
+ - spec/inputs/genjdbc_spec.rb
74
+ homepage: https://github.com/IBM-ITOAdev/logstash-input-genjdbc
75
+ licenses:
76
+ - Apache License (2.0)
77
+ metadata:
78
+ logstash_plugin: 'true'
79
+ logstash_group: input
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.1.9
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: This example input streams a string at a definable interval.
100
+ test_files:
101
+ - spec/inputs/genjdbc_spec.rb