logstash-input-snmp 1.2.4 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb5609c18eaaec9aeef2b6061112def84acb1f2057d90bd507a785dcf452ccd4
4
- data.tar.gz: 60bc0983f862f184d6b17b6e64c31c333998468d54610397b3ce4f1ed64e8163
3
+ metadata.gz: 4bcb5f73151249317b6f7b36c028a3f863e7d4a88ba6da977fbc88d255355364
4
+ data.tar.gz: 85ef765af5f93aefb92a8f40d9738101ada3b5173bb9b4b8de3d4ec21a406578
5
5
  SHA512:
6
- metadata.gz: 0d34c2e4575a756c34dfa4680bfed5f003787aeaee5cd5a73d8408eb76dce677c540e8437d778b0875ec5c1f75677322d3dfb6d2a10f85572479c1da28e8e8a7
7
- data.tar.gz: f53c711c10cc10d51b4a9919e9b0c3624176df89bc79116cb394ee10ab15266e8a61f8907346c670e9d959f2cce1c387586850dd98c9b3135d1b20a434863131
6
+ metadata.gz: 423f10e23a58b04a72c47d70beb06053dedc8d07e1ec1e36c835ca783c6791bb6ccd12d701d3e50bd4ebe173185a4240ae21a93c36d7ecdf38bf4e2ae6d58f25
7
+ data.tar.gz: f452759e6c453d088b002721ae1520b1c22291e16ff609d8f308e57c3e9aa9dc29b008c809a9a6a76e76b00e68c0399fc96b63f23dc066aa403a682f19712f2e
data/CHANGELOG.md CHANGED
@@ -1,11 +1,23 @@
1
+ ## 1.2.8
2
+ - Fixed interval handling to only sleep off the _remainder_ of the interval (if any), and to log a helpful warning when crawling the hosts takes longer than the configured interval [#61](https://github.com/logstash-plugins/logstash-input-snmp/issues/61)
3
+
4
+ ## 1.2.7
5
+ - Added integration tests to ensure SNMP server and IPv6 connections [#87](https://github.com/logstash-plugins/logstash-input-snmp/pull/87)
6
+
7
+ ## 1.2.6
8
+ - Docs: example on setting IPv6 hosts [#89](https://github.com/logstash-plugins/logstash-input-snmp/pull/89)
9
+
10
+ ## 1.2.5
11
+ - Updated snmp4j library to v2.8.4 [#86](https://github.com/logstash-plugins/logstash-input-snmp/pull/86)
12
+
1
13
  ## 1.2.4
2
- - Fixed: support SNMPv3 multiple identical security name with different credentials [#84](https://github.com/logstash-plugins/logstash-input-snmp/pull/84)
14
+ - Fixed: support SNMPv3 multiple identical security name with different credentials [#84](https://github.com/logstash-plugins/logstash-input-snmp/pull/84)
3
15
 
4
16
  ## 1.2.3
5
- - Fixed: multithreading problem when using multiple snmp inputs with multiple v3 credentials [#80](https://github.com/logstash-plugins/logstash-input-snmp/pull/80)
17
+ - Fixed: multithreading problem when using multiple snmp inputs with multiple v3 credentials [#80](https://github.com/logstash-plugins/logstash-input-snmp/pull/80)
6
18
 
7
19
  ## 1.2.2
8
- - Refactor: scope and review java_imports [#72](https://github.com/logstash-plugins/logstash-input-snmp/pull/72)
20
+ - Refactor: scope and review java_imports [#72](https://github.com/logstash-plugins/logstash-input-snmp/pull/72)
9
21
 
10
22
  ## 1.2.1
11
23
  - Fixed GAUGE32 integer overflow [#65](https://github.com/logstash-plugins/logstash-input-snmp/pull/65)
data/docs/index.asciidoc CHANGED
@@ -147,10 +147,23 @@ input {
147
147
  }
148
148
  -----
149
149
 
150
+ *Specifying IPv6 hosts*
151
+
152
+ [source,ruby]
153
+ -----
154
+ input {
155
+ snmp {
156
+ get => ["1.3.6.1.2.1.1.1.0"]
157
+ hosts => [{host => "udp:[::1]/161" community => "public"}, {host => "udp:[2001:db8::2:1]/161" community => "private"}]
158
+ }
159
+ }
160
+ -----
161
+
150
162
  [id="plugins-{type}s-{plugin}-interval"]
151
163
  ===== `interval`
152
164
 
153
165
  The `interval` option specifies the polling interval in seconds.
166
+ If polling all configured hosts takes longer than this interval, a warning will be emitted to the logs.
154
167
 
155
168
  * Value type is <<number,number>>
156
169
  * Default value is `30`
@@ -17,7 +17,7 @@ module LogStash
17
17
 
18
18
  def initialize(protocol, address, port, community, version, retries, timeout, mib)
19
19
  super(protocol, address, port, retries, timeout, mib)
20
- raise(SnmpClientError, "SnmpClient is expecting verison '1' or '2c'") unless ["1", "2c"].include?(version.to_s)
20
+ raise(SnmpClientError, "SnmpClient is expecting version '1' or '2c'") unless ["1", "2c"].include?(version.to_s)
21
21
 
22
22
  @snmp = Snmp.new(create_transport(protocol))
23
23
  @snmp.listen
@@ -161,9 +161,9 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
161
161
  end
162
162
 
163
163
  def run(queue)
164
- # for now a naive single threaded poller which sleeps for the given interval between
164
+ # for now a naive single threaded poller which sleeps off the remaining interval between
165
165
  # each run. each run polls all the defined hosts for the get and walk options.
166
- while !stop?
166
+ stoppable_interval_runner.every(@interval, "polling hosts") do
167
167
  @client_definitions.each do |definition|
168
168
  result = {}
169
169
  if !definition[:get].empty?
@@ -207,11 +207,13 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
207
207
  queue << event
208
208
  end
209
209
  end
210
-
211
- Stud.stoppable_sleep(@interval) { stop? }
212
210
  end
213
211
  end
214
212
 
213
+ def stoppable_interval_runner
214
+ StoppableIntervalRunner.new(self)
215
+ end
216
+
215
217
  def close
216
218
  @client_definitions.each do |definition|
217
219
  begin
@@ -222,6 +224,9 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
222
224
  end
223
225
  end
224
226
 
227
+ def stop
228
+ end
229
+
225
230
  private
226
231
 
227
232
  OID_REGEX = /^\.?([0-9\.]+)$/
@@ -295,4 +300,45 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
295
300
  def validate_strip!
296
301
  raise(LogStash::ConfigurationError, "you can not specify both oid_root_skip and oid_path_length") if @oid_root_skip > 0 and @oid_path_length > 0
297
302
  end
303
+
304
+ ##
305
+ # The StoppableIntervalRunner is capable of running a block of code at a
306
+ # repeating interval, while respecting the stop condition of the plugin.
307
+ class StoppableIntervalRunner
308
+ ##
309
+ # @param plugin [#logger,#stop?]
310
+ def initialize(plugin)
311
+ @plugin = plugin
312
+ end
313
+
314
+ ##
315
+ # Runs the provided block repeatedly using the provided interval.
316
+ # After executing the block, the remainder of the interval if any is slept off
317
+ # using an interruptible sleep.
318
+ # If no time remains, a warning is emitted to the logs.
319
+ #
320
+ # @param interval_seconds [Integer,Float]
321
+ # @param desc [String] (default: "operation"): a description to use when logging
322
+ # @yield
323
+ def every(interval_seconds, desc="operation", &block)
324
+ until @plugin.stop?
325
+ start_time = Time.now
326
+
327
+ yield
328
+
329
+ duration_seconds = Time.now - start_time
330
+ if duration_seconds >= interval_seconds
331
+ @plugin.logger.warn("#{desc} took longer than the configured interval", :interval_seconds => interval_seconds, :duration_seconds => duration_seconds.round(3))
332
+ else
333
+ remaining_interval = interval_seconds - duration_seconds
334
+ sleep(remaining_interval)
335
+ end
336
+ end
337
+ end
338
+
339
+ # @api private
340
+ def sleep(duration)
341
+ Stud.stoppable_sleep(duration) { @plugin.stop? }
342
+ end
343
+ end
298
344
  end
@@ -1,4 +1,4 @@
1
1
  # AUTOGENERATED BY THE GRADLE SCRIPT. DO NOT EDIT.
2
2
 
3
3
  require 'jar_dependencies'
4
- require_jar('org.snmp4j', 'snmp4j', '2.5.11')
4
+ require_jar('org.snmp4j', 'snmp4j', '2.8.4')
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-snmp'
3
- s.version = '1.2.4'
3
+ s.version = '1.2.8'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = "SNMP input plugin"
6
6
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -0,0 +1,203 @@
1
+ require "logstash/devutils/rspec/spec_helper"
2
+ require "logstash/inputs/snmp"
3
+
4
+ describe LogStash::Inputs::Snmp do
5
+ let(:config) { {"get" => ["1.3.6.1.2.1.1.1.0", "1.3.6.1.2.1.1.3.0", "1.3.6.1.2.1.1.5.0"]} }
6
+ let(:plugin) { LogStash::Inputs::Snmp.new(config)}
7
+
8
+ shared_examples "snmp plugin return single event" do
9
+ it "should have OID value" do
10
+ plugin.register
11
+ queue = []
12
+ stop_plugin_after_seconds(plugin)
13
+ plugin.run(queue)
14
+ plugin.close
15
+ event = queue.pop
16
+
17
+ expect(event).to be_a(LogStash::Event)
18
+ expect(event.get("iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.sysUpTimeInstance")).to be_a Integer
19
+ expect(event.get("iso.org.dod.internet.mgmt.mib-2.system.sysName.0")).to be_a String
20
+ expect(event.get("iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0")).to be_a String
21
+ end
22
+ end
23
+
24
+ shared_examples "snmp plugin return one udp event and one tcp event" do |config|
25
+ it "should have one udp from snmp1 and one tcp from snmp2" do
26
+ events = input(config) { |_, queue| 2.times.collect { queue.pop } }
27
+ udp = 0; tcp = 0
28
+ events.each { |event|
29
+ if event.get("[@metadata][host_protocol]") == "udp"
30
+ udp += 1
31
+ expect(event.get("[@metadata][host_protocol]")).to eq("udp")
32
+ expect(event.get("[@metadata][host_address]")).to eq("snmp1")
33
+ expect(event.get("[@metadata][host_port]")).to eq("161")
34
+ else
35
+ tcp += 1
36
+ expect(event.get("[@metadata][host_protocol]")).to eq("tcp")
37
+ expect(event.get("[@metadata][host_address]")).to eq("snmp2")
38
+ expect(event.get("[@metadata][host_port]")).to eq("162")
39
+ end
40
+ }
41
+ expect(udp).to eq(1)
42
+ expect(tcp).to eq(1)
43
+ end
44
+ end
45
+
46
+ describe "against single snmp server with snmpv2 and udp", :integration => true do
47
+ let(:config) { super().merge({"hosts" => [{"host" => "udp:snmp1/161", "community" => "public"}]})}
48
+ it_behaves_like "snmp plugin return single event"
49
+ end
50
+
51
+ describe "against single server with snmpv3 and tcp", :integration => true do
52
+ let(:config) { super().merge({
53
+ "hosts" => [{"host" => "tcp:snmp1/161", "version" => "3"}],
54
+ "security_name" => "user_1",
55
+ "auth_protocol" => "sha",
56
+ "auth_pass" => "STrP@SSPhr@sE",
57
+ "priv_protocol" => "aes",
58
+ "priv_pass" => "STr0ngP@SSWRD161",
59
+ "security_level" => "authPriv"
60
+ })}
61
+
62
+ it_behaves_like "snmp plugin return single event"
63
+ end
64
+
65
+ describe "invalid user against snmpv3 server", :integration => true do
66
+ let(:config) { super().merge({
67
+ "hosts" => [{"host" => "tcp:snmp1/161", "version" => "3"}],
68
+ "security_name" => "user_2",
69
+ "auth_protocol" => "sha",
70
+ "auth_pass" => "STrP@SSPhr@sE",
71
+ "priv_protocol" => "aes",
72
+ "priv_pass" => "STr0ngP@SSWRD161",
73
+ "security_level" => "authPriv"
74
+ })}
75
+
76
+ it "should have error log" do
77
+ expect(plugin.logger).to receive(:error).once
78
+ plugin.register
79
+ queue = []
80
+ stop_plugin_after_seconds(plugin)
81
+ plugin.run(queue)
82
+ plugin.close
83
+ end
84
+ end
85
+
86
+ describe "single input plugin on single server with snmpv2 and mix of udp and tcp", :integration => true do
87
+ let(:config) { super().merge({"hosts" => [{"host" => "udp:snmp1/161", "community" => "public"}, {"host" => "tcp:snmp1/161", "community" => "public"}]})}
88
+ it "should return two events " do
89
+ plugin.register
90
+ queue = []
91
+ stop_plugin_after_seconds(plugin)
92
+ plugin.run(queue)
93
+ plugin.close
94
+
95
+ host_cnt_snmp1 = queue.select {|event| event.get("host") == "snmp1"}.size
96
+ expect(queue.size).to eq(2)
97
+ expect(host_cnt_snmp1).to eq(2)
98
+ end
99
+ end
100
+
101
+ describe "single input plugin on multiple udp hosts", :integration => true do
102
+ let(:config) { super().merge({"hosts" => [{"host" => "udp:snmp1/161", "community" => "public"}, {"host" => "udp:snmp2/162", "community" => "public"}]})}
103
+ it "should return two events, one per host" do
104
+ plugin.register
105
+ queue = []
106
+ stop_plugin_after_seconds(plugin)
107
+ plugin.run(queue)
108
+ plugin.close
109
+
110
+ hosts = queue.map { |event| event.get("host") }.sort
111
+ expect(queue.size).to eq(2)
112
+ expect(hosts).to eq(["snmp1", "snmp2"])
113
+ end
114
+ end
115
+
116
+ describe "multiple pipelines and mix of udp tcp hosts", :integration => true do
117
+ let(:config) { {"get" => ["1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:snmp1/161", "community" => "public"}]} }
118
+ let(:config2) { {"get" => ["1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "tcp:snmp2/162", "community" => "public"}]} }
119
+ let(:plugin) { LogStash::Inputs::Snmp.new(config)}
120
+ let(:plugin2) { LogStash::Inputs::Snmp.new(config2)}
121
+
122
+ it "should return two events, one per host" do
123
+ plugin.register
124
+ plugin2.register
125
+ queue = []
126
+ queue2 = []
127
+ t = Thread.new {
128
+ stop_plugin_after_seconds(plugin)
129
+ plugin.run(queue)
130
+ }
131
+ t2 = Thread.new {
132
+ stop_plugin_after_seconds(plugin2)
133
+ plugin2.run(queue2)
134
+ }
135
+ t.join(2100)
136
+ t2.join(2100)
137
+ plugin.close
138
+ plugin2.close
139
+
140
+ hosts = [queue.pop, queue2.pop].map { |event| event.get("host") }.sort
141
+ expect(hosts).to eq(["snmp1", "snmp2"])
142
+ end
143
+ end
144
+
145
+ describe "multiple plugin inputs and mix of udp tcp hosts", :integration => true do
146
+ config = <<-CONFIG
147
+ input {
148
+ snmp {
149
+ get => ["1.3.6.1.2.1.1.1.0"]
150
+ hosts => [{host => "udp:snmp1/161" community => "public"}]
151
+ }
152
+ snmp {
153
+ get => ["1.3.6.1.2.1.1.1.0"]
154
+ hosts => [{host => "tcp:snmp2/162" community => "public"}]
155
+ }
156
+ }
157
+ CONFIG
158
+
159
+ it_behaves_like "snmp plugin return one udp event and one tcp event", config
160
+ end
161
+
162
+ describe "two plugins on different hosts with snmpv3 with same security name with different credentials and mix of udp and tcp", :integration => true do
163
+ config = <<-CONFIG
164
+ input {
165
+ snmp {
166
+ get => ["1.3.6.1.2.1.1.1.0"]
167
+ hosts => [{host => "udp:snmp1/161" version => "3"}]
168
+ security_name => "user_1"
169
+ auth_protocol => "sha"
170
+ auth_pass => "STrP@SSPhr@sE"
171
+ priv_protocol => "aes"
172
+ priv_pass => "STr0ngP@SSWRD161"
173
+ security_level => "authPriv"
174
+ }
175
+ snmp {
176
+ get => ["1.3.6.1.2.1.1.1.0"]
177
+ hosts => [{host => "tcp:snmp2/162" version => "3"}]
178
+ security_name => "user_1"
179
+ auth_protocol => "sha"
180
+ auth_pass => "STrP@SSPhr@sE"
181
+ priv_protocol => "aes"
182
+ priv_pass => "STr0ngP@SSWRD162"
183
+ security_level => "authPriv"
184
+ }
185
+ }
186
+ CONFIG
187
+
188
+ it_behaves_like "snmp plugin return one udp event and one tcp event", config
189
+ end
190
+
191
+ describe "single host with tcp over ipv6", :integration => true do
192
+ let(:config) { super().merge({"hosts" => [{"host" => "tcp:[2001:3984:3989::161]/161"}]})}
193
+ it_behaves_like "snmp plugin return single event"
194
+ end
195
+
196
+ def stop_plugin_after_seconds(plugin)
197
+ Thread.new{
198
+ sleep(2)
199
+ plugin.do_stop
200
+ }
201
+ end
202
+
203
+ end
File without changes
@@ -70,6 +70,10 @@ describe LogStash::Inputs::Snmp do
70
70
  {"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "1"}]},
71
71
  {"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "2c"}]},
72
72
  {"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3"}], "security_name" => "v3user"},
73
+
74
+ {"get" => ["1.0"], "hosts" => [{"host" => "udp:[::1]/16100"}]},
75
+ {"get" => ["1.0"], "hosts" => [{"host" => "udp:[2001:db8:0:1:1:1:1:1]/16100"}]},
76
+ {"get" => ["1.0"], "hosts" => [{"host" => "udp:[2001:db8::2:1]/161"}]},
73
77
  ]
74
78
  }
75
79
 
@@ -105,7 +109,7 @@ describe LogStash::Inputs::Snmp do
105
109
  let(:valid_configs) {
106
110
  [
107
111
  {"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3"}], "security_name" => "ciscov3", "auth_protocol" => "sha", "auth_pass" => "myshapass", "priv_protocol" => "aes", "priv_pass" => "myprivpass", "security_level" => "authNoPriv"},
108
- {"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3"}], "security_name" => "dellv3", "auth_protocol" => "md5", "auth_pass" => "myshapass", "priv_protocol" => "3des", "priv_pass" => "myprivpass", "security_level" => "authNoPriv"}
112
+ {"get" => ["1.0"], "hosts" => [{"host" => "udp:[2001:db8:0:1:1:1:1:1]/1610", "version" => "3"}], "security_name" => "dellv3", "auth_protocol" => "md5", "auth_pass" => "myshapass", "priv_protocol" => "3des", "priv_pass" => "myprivpass", "security_level" => "authNoPriv"}
109
113
  ]
110
114
  }
111
115
 
@@ -167,5 +171,95 @@ describe LogStash::Inputs::Snmp do
167
171
  expect(event.get("host")).to eq("udp:127.0.0.1/161,public")
168
172
  end
169
173
  end
174
+
175
+ context "StoppableIntervalRunner" do
176
+ let(:stop_holder) { Struct.new(:value).new(false) }
177
+
178
+ before(:each) do
179
+ allow(plugin).to receive(:stop?) { stop_holder.value }
180
+ end
181
+
182
+ let(:plugin) do
183
+ double("Plugin").tap do |dbl|
184
+ allow(dbl).to receive(:logger).and_return(double("Logger").as_null_object)
185
+ allow(dbl).to receive(:stop?) { stop_holder.value }
186
+ end
187
+ end
188
+
189
+ subject(:interval_runner) { LogStash::Inputs::Snmp::StoppableIntervalRunner.new(plugin) }
190
+
191
+ context "#every" do
192
+ context "when the plugin is stopped" do
193
+ let(:interval_seconds) { 2 }
194
+ it 'does not yield the block' do
195
+ stop_holder.value = true
196
+ expect { |yielder| interval_runner.every(interval_seconds, &yielder) }.to_not yield_control
197
+ end
198
+ end
199
+
200
+ context "when the yield takes shorter than the interval" do
201
+ let(:duration_seconds) { 1 }
202
+ let(:interval_seconds) { 2 }
203
+
204
+ it 'sleeps off the remainder' do
205
+ allow(interval_runner).to receive(:sleep).and_call_original
206
+
207
+ interval_runner.every(interval_seconds) do
208
+ Kernel::sleep(duration_seconds) # non-stoppable
209
+ stop_holder.value = true # prevent re-runs
210
+ end
211
+
212
+ expect(interval_runner).to have_received(:sleep).with(a_value_within(0.1).of(1))
213
+ end
214
+ end
215
+
216
+ context "when the yield takes longer than the interval" do
217
+ let(:duration_seconds) { 2 }
218
+ let(:interval_seconds) { 1 }
219
+
220
+ it 'logs a warning to the plugin' do
221
+ allow(interval_runner).to receive(:sleep).and_call_original
222
+
223
+ interval_runner.every(interval_seconds) do
224
+ Kernel::sleep(duration_seconds) # non-stoppable
225
+ stop_holder.value = true # prevent re-runs
226
+ end
227
+
228
+ expect(interval_runner).to_not have_received(:sleep)
229
+
230
+ expect(plugin.logger).to have_received(:warn).with(a_string_including("took longer"), a_hash_including(:interval_seconds => interval_seconds, :duration_seconds => a_value_within(0.1).of(duration_seconds)))
231
+ end
232
+ end
233
+
234
+ it 'runs regularly until the plugin is stopped' do
235
+ timestamps = []
236
+
237
+ thread = Thread.new do
238
+ interval_runner.every(1) do
239
+ timestamps << Time.now
240
+ Kernel::sleep(Random::rand(0.8))
241
+ end
242
+ end
243
+
244
+ Kernel::sleep(5)
245
+ expect(thread).to be_alive
246
+
247
+ stop_holder.value = true
248
+ Kernel::sleep(1)
249
+
250
+ aggregate_failures do
251
+ expect(thread).to_not be_alive
252
+ expect(timestamps.count).to be_within(1).of(5)
253
+
254
+ timestamps.each_cons(2) do |previous, current|
255
+ # ensure each start time is very close to 1s after the previous.
256
+ expect(current - previous).to be_within(0.05).of(1)
257
+ end
258
+
259
+ thread.kill if thread.alive?
260
+ end
261
+ end
262
+ end
263
+ end
170
264
  end
171
265
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-snmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elasticsearch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-20 00:00:00.000000000 Z
11
+ date: 2021-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -414,10 +414,13 @@ files:
414
414
  - logstash-input-snmp.gemspec
415
415
  - spec/fixtures/RFC1213-MIB.dic
416
416
  - spec/fixtures/collision.dic
417
+ - spec/inputs/integration/it_spec.rb
417
418
  - spec/inputs/snmp/base_client_spec.rb
419
+ - spec/inputs/snmp/interval_runner_spec.rb
418
420
  - spec/inputs/snmp/mib_spec.rb
419
421
  - spec/inputs/snmp_spec.rb
420
422
  - vendor/jar-dependencies/org/snmp4j/snmp4j/2.5.11/snmp4j-2.5.11.jar
423
+ - vendor/jar-dependencies/org/snmp4j/snmp4j/2.8.4/snmp4j-2.8.4.jar
421
424
  homepage: http://www.elastic.co/guide/en/logstash/current/index.html
422
425
  licenses:
423
426
  - Apache-2.0
@@ -440,14 +443,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
440
443
  - !ruby/object:Gem::Version
441
444
  version: '0'
442
445
  requirements: []
443
- rubyforge_project:
444
- rubygems_version: 2.6.13
446
+ rubygems_version: 3.1.6
445
447
  signing_key:
446
448
  specification_version: 4
447
449
  summary: SNMP input plugin
448
450
  test_files:
449
451
  - spec/fixtures/RFC1213-MIB.dic
450
452
  - spec/fixtures/collision.dic
453
+ - spec/inputs/integration/it_spec.rb
451
454
  - spec/inputs/snmp/base_client_spec.rb
455
+ - spec/inputs/snmp/interval_runner_spec.rb
452
456
  - spec/inputs/snmp/mib_spec.rb
453
457
  - spec/inputs/snmp_spec.rb