logstash-codec-netflow 4.3.1 → 4.3.3

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: 1977177c31346ff62addb2a2140b21adcf35d1becf6c995604e16f91e1998d94
4
- data.tar.gz: f448694fb80229e0257dc48f2c3200d8d19d21055a9e17057488c81d8fce2a84
3
+ metadata.gz: 1077f3fabf491578e56f3bdf62833fcc57fa84e7a45339a86041d0d3cab20ea9
4
+ data.tar.gz: 483b793cab3301353f7631cba07eb82e6a560b62c9656cc0e718ef0286cc61ab
5
5
  SHA512:
6
- metadata.gz: 87bb8f9f6cf7070f786225e7557552873c7f9be274a18cf97d14e213dbd898c1b6c91bc4008cc57221e1911206ae1f839680b09219a207c57c74ae7d9c996dc3
7
- data.tar.gz: 4963f7cf398aaf8552805f14f3be1b6423316a9880340edd226caaa591ae84f76fcb2db714b2da686964551b0d6a97928c1fe3e5c238b9da2893f2d6b6370e1d
6
+ metadata.gz: 67390c9542344deb69f6d862de01458e06d11932ecad4afc6ad824bc4d22abf22188786d309738294d7b311e688acebe0735d6ab8a5007f52cf8852acc5745cd
7
+ data.tar.gz: b0ef1675c310fec9dd98ac6db3e8088c62feaa230a6a368d640b67c8ee25f2970edba1d52c49d8d3d619be38894a27f141f7c9c15cf554584210c7c3ffe2b44e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 4.3.3
2
+ - Fix NoMethodError when decode fails. [214](https://github.com/logstash-plugins/logstash-codec-netflow/pull/214)
3
+
4
+ ## 4.3.2
5
+ - Updates the milliseconds rounding for IPFIX start/end milliseconds fields.
6
+ - Fix the test to run on Logstash 8 with microseconds precision. [#206](https://github.com/logstash-plugins/logstash-codec-netflow/pull/206)
7
+
1
8
  ## 4.3.1
2
9
  - Fixed unable to initialize the plugin with Logstash 8.10+ [#205](https://github.com/logstash-plugins/logstash-codec-netflow/pull/205)
3
10
 
@@ -88,16 +88,32 @@ class LogStash::Codecs::Netflow < LogStash::Codecs::Base
88
88
  if header.version == 5
89
89
  flowset = Netflow5PDU.read(payload)
90
90
  flowset.records.each do |record|
91
- yield(decode_netflow5(flowset, record))
91
+ begin
92
+ yield(decode_netflow5(flowset, record))
93
+ rescue BinData::ValidityError, IOError => e
94
+ @logger.warn("Invalid Netflow v5 record (#{e})")
95
+ if @logger.debug?
96
+ @logger.debug("Netflow v5 decode error", :flow_seq_num => flowset.flow_seq_num)
97
+ end
98
+ end
92
99
  end
93
100
  elsif header.version == 9
94
101
  # BinData::trace_reading do
95
102
  flowset = Netflow9PDU.read(payload)
96
103
  flowset.records.each do |record|
97
- if metadata != nil
98
- decode_netflow9(flowset, record, metadata).each{|event| yield(event)}
99
- else
100
- decode_netflow9(flowset, record).each{|event| yield(event)}
104
+ begin
105
+ if metadata != nil
106
+ decode_netflow9(flowset, record, metadata).each{|event| yield(event)}
107
+ else
108
+ decode_netflow9(flowset, record).each{|event| yield(event)}
109
+ end
110
+ rescue BinData::ValidityError, IOError => e
111
+ @logger.warn("Invalid Netflow v9 record (#{e})")
112
+ if @logger.debug?
113
+ host = metadata ? metadata["host"] : nil
114
+ port = metadata ? metadata["port"] : nil
115
+ @logger.debug("Netflow v9 decode error", :source_id => flowset.source_id, :flowset_id => record.flowset_id, :host => host, :port => port)
116
+ end
101
117
  end
102
118
  # end
103
119
  end
@@ -105,7 +121,14 @@ class LogStash::Codecs::Netflow < LogStash::Codecs::Base
105
121
  # BinData::trace_reading do
106
122
  flowset = IpfixPDU.read(payload)
107
123
  flowset.records.each do |record|
108
- decode_ipfix(flowset, record).each { |event| yield(event) }
124
+ begin
125
+ decode_ipfix(flowset, record).each { |event| yield(event) }
126
+ rescue BinData::ValidityError, IOError => e
127
+ @logger.warn("Invalid IPFIX record (#{e})")
128
+ if @logger.debug?
129
+ @logger.debug("IPFIX decode error", :observation_domain_id => flowset.observation_domain_id, :flowset_id => record.flowset_id)
130
+ end
131
+ end
109
132
  end
110
133
  # end
111
134
  else
@@ -151,8 +174,6 @@ class LogStash::Codecs::Netflow < LogStash::Codecs::Base
151
174
  end
152
175
 
153
176
  event_factory.new_event(event)
154
- rescue BinData::ValidityError, IOError => e
155
- @logger.warn("Invalid netflow packet received (#{e})")
156
177
  end
157
178
 
158
179
  def decode_netflow9(flowset, record, metadata = nil)
@@ -280,8 +301,6 @@ class LogStash::Codecs::Netflow < LogStash::Codecs::Base
280
301
  end
281
302
 
282
303
  events
283
- rescue BinData::ValidityError, IOError => e
284
- @logger.warn("Invalid netflow packet received (#{e})")
285
304
  end
286
305
 
287
306
  def decode_ipfix(flowset, record)
@@ -343,7 +362,13 @@ class LogStash::Codecs::Netflow < LogStash::Codecs::Base
343
362
  when /^flow(?:Start|End)(Milli|Micro|Nano)seconds$/
344
363
  case $1
345
364
  when 'Milli'
346
- event[@target][k.to_s] = LogStash::Timestamp.at(v.snapshot.to_f / 1_000).to_iso8601
365
+ secs = v.snapshot.to_i / 1000
366
+ micros = (v.snapshot.to_i % 1000) * 1000
367
+ # Use the 2 args Timestamp.at to avoid the precision under milliseconds. Doing math division (like /1000 on a float)
368
+ # could introduce error in representation that makes 0.192 millis to be expressed like 0.192000001 nanoseconds,
369
+ # so here we cut to millis, but there is a rounding when representing to to_iso8601, so 191998 micros becomes
370
+ # 192 millis in LogStash 8 while in previous versions it appears truncated like 191.
371
+ event[@target][k.to_s] = LogStash::Timestamp.at(secs, micros).to_iso8601
347
372
  when 'Micro', 'Nano'
348
373
  # For now we'll stick to assuming ntp timestamps,
349
374
  # Netscaler implementation may be buggy though:
@@ -365,8 +390,6 @@ class LogStash::Codecs::Netflow < LogStash::Codecs::Base
365
390
  end
366
391
 
367
392
  events
368
- rescue BinData::ValidityError => e
369
- @logger.warn("Invalid IPFIX packet received (#{e})")
370
393
  end
371
394
 
372
395
  def load_definitions(defaults, extra)
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-codec-netflow'
4
- s.version = '4.3.1'
4
+ s.version = '4.3.3'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Reads Netflow v5, Netflow v9 and IPFIX data"
7
7
  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"
@@ -17,6 +17,11 @@ describe LogStash::Codecs::Netflow do
17
17
  end
18
18
  end
19
19
 
20
+ let(:is_LS_8) do
21
+ logstash_version = Gem::Version.create(LOGSTASH_CORE_VERSION)
22
+ Gem::Requirement.create('>= 8.0').satisfied_by?(logstash_version)
23
+ end
24
+
20
25
  ### NETFLOW v5
21
26
 
22
27
  context "Netflow 5 valid 01" do
@@ -28,11 +33,13 @@ describe LogStash::Codecs::Netflow do
28
33
  data << IO.read(File.join(File.dirname(__FILE__), "netflow5.dat"), :mode => "rb")
29
34
  end
30
35
 
36
+ let(:micros) { is_LS_8 ? "328" : "" }
37
+
31
38
  let(:json_events) do
32
39
  events = []
33
40
  events << <<-END
34
41
  {
35
- "@timestamp": "2015-05-02T18:38:08.280Z",
42
+ "@timestamp": "2015-05-02T18:38:08.280#{micros}Z",
36
43
  "netflow": {
37
44
  "version": 5,
38
45
  "flow_seq_num": 0,
@@ -48,8 +55,8 @@ describe LogStash::Codecs::Netflow do
48
55
  "output_snmp": 0,
49
56
  "in_pkts": 5,
50
57
  "in_bytes": 230,
51
- "first_switched": "2015-06-21T11:40:52.194Z",
52
- "last_switched": "2015-05-02T18:38:08.476Z",
58
+ "first_switched": "2015-06-21T11:40:52.194#{micros}Z",
59
+ "last_switched": "2015-05-02T18:38:08.476#{micros}Z",
53
60
  "l4_src_port": 54435,
54
61
  "l4_dst_port": 22,
55
62
  "tcp_flags": 16,
@@ -66,7 +73,7 @@ describe LogStash::Codecs::Netflow do
66
73
 
67
74
  events << <<-END
68
75
  {
69
- "@timestamp": "2015-05-02T18:38:08.280Z",
76
+ "@timestamp": "2015-05-02T18:38:08.280#{micros}Z",
70
77
  "netflow": {
71
78
  "version": 5,
72
79
  "flow_seq_num": 0,
@@ -82,8 +89,8 @@ describe LogStash::Codecs::Netflow do
82
89
  "output_snmp": 0,
83
90
  "in_pkts": 4,
84
91
  "in_bytes": 304,
85
- "first_switched": "2015-06-21T11:40:52.194Z",
86
- "last_switched": "2015-05-02T18:38:08.476Z",
92
+ "first_switched": "2015-06-21T11:40:52.194#{micros}Z",
93
+ "last_switched": "2015-05-02T18:38:08.476#{micros}Z",
87
94
  "l4_src_port": 22,
88
95
  "l4_dst_port": 54435,
89
96
  "tcp_flags": 24,
@@ -835,11 +842,13 @@ describe LogStash::Codecs::Netflow do
835
842
  packets << IO.read(File.join(File.dirname(__FILE__), "netflow5_test_microtik.dat"), :mode => "rb")
836
843
  end
837
844
 
845
+ let(:micros) { is_LS_8 ? "932" : "" }
846
+
838
847
  let(:json_events) do
839
848
  events = []
840
849
  events << <<-END
841
850
  {
842
- "@timestamp": "2016-07-21T13:51:57.514Z",
851
+ "@timestamp": "2016-07-21T13:51:57.514#{micros}Z",
843
852
  "netflow": {
844
853
  "version": 5,
845
854
  "flow_seq_num": 8140050,
@@ -855,8 +864,8 @@ describe LogStash::Codecs::Netflow do
855
864
  "output_snmp": 46,
856
865
  "in_pkts": 13,
857
866
  "in_bytes": 11442,
858
- "first_switched": "2016-07-21T13:51:42.254Z",
859
- "last_switched": "2016-07-21T13:51:42.254Z",
867
+ "first_switched": "2016-07-21T13:51:42.254#{micros}Z",
868
+ "last_switched": "2016-07-21T13:51:42.254#{micros}Z",
860
869
  "l4_src_port": 80,
861
870
  "l4_dst_port": 51826,
862
871
  "tcp_flags": 82,
@@ -1330,7 +1339,7 @@ describe LogStash::Codecs::Netflow do
1330
1339
  "ixiaDstLongitude": 100.33540344238281,
1331
1340
  "ixiaHttpUserAgent": "",
1332
1341
  "ixiaDeviceName": "unknown",
1333
- "flowStartMilliseconds": "2018-10-25T12:24:19.881Z",
1342
+ "flowStartMilliseconds": "2018-10-25T12:24:19.882Z",
1334
1343
  "destinationIPv4Address": "202.170.60.247",
1335
1344
  "ixiaDeviceId": 0,
1336
1345
  "ixiaL7AppName": "unknown",
@@ -2029,6 +2038,9 @@ describe LogStash::Codecs::Netflow do
2029
2038
  data << IO.read(File.join(File.dirname(__FILE__), "ipfix_test_netscaler_data.dat"), :mode => "rb")
2030
2039
  end
2031
2040
 
2041
+ # in LS 8 the precision is up to nanos in LS 7 is up to millis
2042
+ let(:nanos) { is_LS_8 ? "128468" : "" }
2043
+
2032
2044
  let(:json_events) do
2033
2045
  events = []
2034
2046
  events << <<-END
@@ -2038,7 +2050,7 @@ describe LogStash::Codecs::Netflow do
2038
2050
  "netscalerHttpReqUserAgent": "Mozilla/5.0 (Commodore 64; kobo.com) Gecko/20100101 Firefox/75.0",
2039
2051
  "destinationTransportPort": 443,
2040
2052
  "netscalerHttpReqCookie": "beer=123456789abcdefghijklmnopqrstuvw; AnotherCookie=1234567890abcdefghijklmnopqr; Shameless.Plug=Thankyou.Rakuten.Kobo.Inc.For.Allowing.me.time.to.work.on.this.and.contribute.back.to.the.community; Padding=aaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbccccccccccccccddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffgggggggggggggggggggggggghhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkklllllllllllllllmmmmmmmmmm; more=less; GJquote=There.is.no.spoon; GarrySays=Nice!!; LastPadding=aaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccdddddddddddeeeeeeee",
2041
- "flowEndMicroseconds": "2016-11-11T12:09:19.000Z",
2053
+ "flowEndMicroseconds": "2016-11-11T12:09:19.000#{nanos}Z",
2042
2054
  "netscalerHttpReqUrl": "/aa/bb/ccccc/ddddddddddddddddddddddddd",
2043
2055
  "sourceIPv4Address": "192.168.0.1",
2044
2056
  "netscalerHttpReqMethod": "GET",
@@ -2057,7 +2069,7 @@ describe LogStash::Codecs::Netflow do
2057
2069
  "netscalerHttpReqVia": "1.1 akamai.net(ghost) (AkamaiGHost)",
2058
2070
  "netscalerConnectionId": 14460661,
2059
2071
  "tcpControlBits": 24,
2060
- "flowStartMicroseconds": "2016-11-11T12:09:19.000Z",
2072
+ "flowStartMicroseconds": "2016-11-11T12:09:19.000#{nanos}Z",
2061
2073
  "ingressInterface": 8,
2062
2074
  "version": 10,
2063
2075
  "packetDeltaCount": 2,
@@ -2085,7 +2097,6 @@ describe LogStash::Codecs::Netflow do
2085
2097
  expect(decode[0].get("[netflow][version]")).to eq(10)
2086
2098
  expect(decode[0].get("[netflow][sourceIPv4Address]")).to eq('192.168.0.1')
2087
2099
  expect(decode[0].get("[netflow][destinationIPv4Address]")).to eq('10.0.0.1')
2088
- expect(decode[0].get("[netflow][flowEndMicroseconds]")).to eq('2016-11-11T12:09:19.000Z')
2089
2100
  expect(decode[0].get("[netflow][netscalerConnectionId]")).to eq(14460661)
2090
2101
  expect(decode[1].get("[netflow][version]")).to eq(10)
2091
2102
  expect(decode[1].get("[netflow][flowId]")).to eq(14460662)
@@ -2097,6 +2108,16 @@ describe LogStash::Codecs::Netflow do
2097
2108
  expect(decode[2].get("[netflow][netscalerHttpReqXForwardedFor]")).to eq('11.222.33.255')
2098
2109
  end
2099
2110
 
2111
+ if Gem::Requirement.create('>= 8.0').satisfied_by?(Gem::Version.create(LOGSTASH_CORE_VERSION))
2112
+ it "should decode raw data decoding flowEndMicroseconds with nano precision" do
2113
+ expect(decode[0].get("[netflow][flowEndMicroseconds]")).to eq('2016-11-11T12:09:19.000127768Z')
2114
+ end
2115
+ else
2116
+ it "should decode raw data decoding flowEndMicroseconds with millis precision" do
2117
+ expect(decode[0].get("[netflow][flowEndMicroseconds]")).to eq('2016-11-11T12:09:19.000Z')
2118
+ end
2119
+ end
2120
+
2100
2121
  it "should decode variable length fields" do
2101
2122
  expect(decode[2].get("[netflow][netscalerHttpReqUrl]")).to eq('/aa/bb/ccccc/ddddddddddddddddddddddddd')
2102
2123
  expect(decode[2].get("[netflow][netscalerHttpReqHost]")).to eq('www.kobo.com')
@@ -2962,7 +2983,7 @@ describe LogStash::Codecs::Netflow do
2962
2983
  "tcpSequenceNumber": 340533701,
2963
2984
  "silkAppLabel": 0,
2964
2985
  "sourceTransportPort": 63499,
2965
- "flowEndMilliseconds": "2016-12-25T12:58:34.346Z",
2986
+ "flowEndMilliseconds": "2016-12-25T12:58:34.347Z",
2966
2987
  "flowAttributes": 0,
2967
2988
  "destinationIPv4Address": "172.16.32.215",
2968
2989
  "octetTotalCount": 172,
@@ -3065,6 +3086,11 @@ end
3065
3086
 
3066
3087
  # New subject with config, ordered testing since we need caching before data processing
3067
3088
  describe LogStash::Codecs::Netflow, 'configured with template caching', :order => :defined do
3089
+ let(:is_LS_8) do
3090
+ logstash_version = Gem::Version.create(LOGSTASH_CORE_VERSION)
3091
+ Gem::Requirement.create('>= 8.0').satisfied_by?(logstash_version)
3092
+ end
3093
+
3068
3094
  context "IPFIX Netscaler with variable length fields" do
3069
3095
  subject do
3070
3096
  LogStash::Codecs::Netflow.new(cache_config).tap do |codec|
@@ -3171,10 +3197,13 @@ describe LogStash::Codecs::Netflow, 'configured with template caching', :order =
3171
3197
  expect(JSON.parse(File.read("#{tmp_dir}/ipfix_templates.cache"))).to eq(JSON.parse(cached_templates))
3172
3198
  end
3173
3199
 
3200
+ # in LS 8 the precision is up to nanos in LS 7 is up to millis
3201
+ let(:nanos) { is_LS_8 ? "127768" : "" }
3202
+
3174
3203
  it "should decode raw data based on cached templates" do
3175
3204
  expect(decode.size).to eq(3)
3176
3205
  expect(decode[0].get("[netflow][version]")).to eq(10)
3177
- expect(decode[0].get("[netflow][flowEndMicroseconds]")).to eq('2016-11-11T12:09:19.000Z')
3206
+ expect(decode[0].get("[netflow][flowEndMicroseconds]")).to eq("2016-11-11T12:09:19.000#{nanos}Z")
3178
3207
  expect(decode[0].get("[netflow][netscalerConnectionId]")).to eq(14460661)
3179
3208
  expect(decode[1].get("[netflow][version]")).to eq(10)
3180
3209
  expect(decode[1].get("[netflow][observationPointId]")).to eq(167954698)
@@ -3215,7 +3244,6 @@ describe LogStash::Codecs::Netflow, 'configured with include_flowset_id for ipfi
3215
3244
  it "should decode raw data" do
3216
3245
  expect(decode.size).to eq(3)
3217
3246
  expect(decode[0].get("[netflow][version]")).to eq(10)
3218
- expect(decode[0].get("[netflow][flowEndMicroseconds]")).to eq('2016-11-11T12:09:19.000Z')
3219
3247
  expect(decode[0].get("[netflow][netscalerConnectionId]")).to eq(14460661)
3220
3248
  expect(decode[1].get("[netflow][version]")).to eq(10)
3221
3249
  expect(decode[1].get("[netflow][observationPointId]")).to eq(167954698)
@@ -3224,6 +3252,16 @@ describe LogStash::Codecs::Netflow, 'configured with include_flowset_id for ipfi
3224
3252
  expect(decode[2].get("[netflow][netscalerAppUnitNameAppId]")).to eq(239927296)
3225
3253
  end
3226
3254
 
3255
+ if Gem::Requirement.create('>= 8.0').satisfied_by?(Gem::Version.create(LOGSTASH_CORE_VERSION))
3256
+ it "should decode raw data decoding flowEndMicroseconds with nano precision" do
3257
+ expect(decode[0].get("[netflow][flowEndMicroseconds]")).to eq('2016-11-11T12:09:19.000127768Z')
3258
+ end
3259
+ else
3260
+ it "should decode raw data decoding flowEndMicroseconds with millis precision" do
3261
+ expect(decode[0].get("[netflow][flowEndMicroseconds]")).to eq('2016-11-11T12:09:19.000Z')
3262
+ end
3263
+ end
3264
+
3227
3265
  it "should include flowset_id" do
3228
3266
  expect(decode[0].get("[netflow][flowset_id]")).to eq(258)
3229
3267
  expect(decode[1].get("[netflow][flowset_id]")).to eq(257)
metadata CHANGED
@@ -1,66 +1,65 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-codec-netflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.1
4
+ version: 4.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-12-14 00:00:00.000000000 Z
10
+ date: 2026-01-21 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
13
+ name: logstash-core-plugin-api
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
18
  version: '2.0'
19
- name: logstash-core-plugin-api
20
- prerelease: false
21
19
  type: :runtime
20
+ prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
25
  version: '2.0'
27
26
  - !ruby/object:Gem::Dependency
27
+ name: logstash-mixin-event_support
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '1.0'
33
- name: logstash-mixin-event_support
34
- prerelease: false
35
33
  type: :runtime
34
+ prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
39
  version: '1.0'
41
40
  - !ruby/object:Gem::Dependency
41
+ name: bindata
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 1.5.0
47
- name: bindata
48
- prerelease: false
49
47
  type: :runtime
48
+ prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - ">="
53
52
  - !ruby/object:Gem::Version
54
53
  version: 1.5.0
55
54
  - !ruby/object:Gem::Dependency
55
+ name: logstash-devutils
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: 1.0.0
61
- name: logstash-devutils
62
- prerelease: false
63
61
  type: :development
62
+ prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
66
65
  - - ">="
@@ -200,7 +199,6 @@ licenses:
200
199
  metadata:
201
200
  logstash_plugin: 'true'
202
201
  logstash_group: codec
203
- post_install_message:
204
202
  rdoc_options: []
205
203
  require_paths:
206
204
  - lib
@@ -215,8 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
213
  - !ruby/object:Gem::Version
216
214
  version: '0'
217
215
  requirements: []
218
- rubygems_version: 3.2.33
219
- signing_key:
216
+ rubygems_version: 3.6.3
220
217
  specification_version: 4
221
218
  summary: Reads Netflow v5, Netflow v9 and IPFIX data
222
219
  test_files: