logstash-input-snmp 0.1.0.beta1 → 0.1.0.beta2

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: d344864bfc29473393a8d06527a52b5a606efcb8384ce300751898be6daec7ca
4
- data.tar.gz: 3fdf527c93de3d59a6f7c3f20e07e3bfc02d893706b649d2ee7c5e310097e7d0
3
+ metadata.gz: 5599c9705618d89025096ef93521fc9af9c3459b34e57e1dabe3b697918ffca1
4
+ data.tar.gz: 3b86026c9b6239f0628408d39926a757d7308c0d72b6fdf6a5742f2cc2cc2c1b
5
5
  SHA512:
6
- metadata.gz: 8d2dc6418f15151c5ade6a900fb28f352020c78e9b95b579b9d8a594f84f539e6bb65570c074f41d9b7ed4c5ba96c6ffac5a745512094af74cb2f3860e0cc277
7
- data.tar.gz: 827ed778277f612c1e99982bd8a039d99fcc87b9221f7b26e400c1a672d1b2cf12c21e4a83f4a32ca208a619db9ae31a8fac468d249a3b8e2ee47c6f76bc5a76
6
+ metadata.gz: c03af9c1da2efbbdccff38d322ed7b8f15331cca3de4b987d22145c2b150d1c93a65035a664d88a245c89e0461ba3a89236a429b3d806cc996503ecce55fa60a
7
+ data.tar.gz: da07ed21485a35b58b915f974003ad747c3ff6d4a36ed1b6ccb07d3f8066e7910ed826e8ff5f63454f2fb4af5cc663aceb8755f18959f35d016bc19e137e46a2
@@ -1,3 +1,6 @@
1
+ ## 0.1.0.beta2
2
+ - add host info in metadata and host field, https://github.com/logstash-plugins/logstash-input-snmp/pull/7
3
+
1
4
  ## 0.1.0.beta1
2
5
  - First beta version
3
6
 
@@ -53,6 +53,9 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
53
53
  # The default, `30`, means poll each host every 30second.
54
54
  config :interval, :validate => :number, :default => 30
55
55
 
56
+ # Add the default "host" field to the event.
57
+ config :add_field, :validate => :hash, :default => { "host" => "%{[@metadata][host_address]}" }
58
+
56
59
  def register
57
60
  validate_oids!
58
61
  validate_hosts!
@@ -71,10 +74,19 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
71
74
  retries = host["retries"] || 2
72
75
  timeout = host["timeout"] || 1000
73
76
 
77
+ host_details = host_name.match(HOST_REGEX)
78
+ raise(LogStash::ConfigurationError, "invalid format for host option '#{host_name}'") unless host_details
79
+ raise(LogStash::ConfigurationError, "only the udp protocol is supported for now") unless host_details[:host_protocol].to_s =~ /udp/i
80
+
74
81
  definition = {
75
82
  :client => LogStash::SnmpClient.new(host_name, community, version, retries, timeout, mib),
76
83
  :get => Array(get),
77
84
  :walk => Array(walk),
85
+
86
+ :host_protocol => host_details[:host_protocol],
87
+ :host_address => host_details[:host_address],
88
+ :host_port => host_details[:host_port],
89
+ :host_community => community,
78
90
  }
79
91
  @client_definitions << definition
80
92
  end
@@ -104,6 +116,14 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
104
116
  end
105
117
 
106
118
  unless result.empty?
119
+ metadata = {
120
+ "host_protocol" => definition[:host_protocol],
121
+ "host_address" => definition[:host_address],
122
+ "host_port" => definition[:host_port],
123
+ "host_community" => definition[:host_community],
124
+ }
125
+ result["@metadata"] = metadata
126
+
107
127
  event = LogStash::Event.new(result)
108
128
  decorate(event)
109
129
  queue << event
@@ -120,7 +140,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
120
140
  private
121
141
 
122
142
  OID_REGEX = /^\.?([0-9\.]+)$/
123
- HOST_REGEX = /^(udp|tcp):.+\/\d+$/i
143
+ HOST_REGEX = /^(?<host_protocol>udp|tcp):(?<host_address>.+)\/(?<host_port>\d+)$/i
124
144
 
125
145
  def validate_oids!
126
146
  @get = Array(@get).map do |oid|
@@ -149,10 +169,6 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
149
169
 
150
170
  @hosts.each do |host|
151
171
  raise(LogStash::ConfigurationError, "each host definition must have a \"host\" option") if !host.is_a?(Hash) || host["host"].nil?
152
- unless host["host"] =~ HOST_REGEX
153
- raise(LogStash::ConfigurationError, "invalid host option format")
154
- end
155
- raise(LogStash::ConfigurationError, "tcp is not yet supported, only udp") if $1 =~ /tcp/i
156
172
  end
157
173
  end
158
174
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-snmp'
3
- s.version = '0.1.0.beta1'
3
+ s.version = '0.1.0.beta2'
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"
@@ -82,4 +82,45 @@ describe LogStash::Inputs::Snmp do
82
82
  end
83
83
  end
84
84
  end
85
+
86
+ context "@metadata" do
87
+ before do
88
+ expect(LogStash::SnmpClient).to receive(:new).and_return(mock_client)
89
+ expect(mock_client).to receive(:get).and_return({"foo" => "bar"})
90
+ end
91
+
92
+ it "shoud add @metadata fields and add default host field" do
93
+ config = <<-CONFIG
94
+ input {
95
+ snmp {
96
+ get => ["1.3.6.1.2.1.1.1.0"]
97
+ hosts => [{host => "udp:127.0.0.1/161" community => "public"}]
98
+ }
99
+ }
100
+ CONFIG
101
+ event = input(config) { |_, queue| queue.pop }
102
+
103
+ expect(event.get("[@metadata][host_protocol]")).to eq("udp")
104
+ expect(event.get("[@metadata][host_address]")).to eq("127.0.0.1")
105
+ expect(event.get("[@metadata][host_port]")).to eq("161")
106
+ expect(event.get("[@metadata][host_community]")).to eq("public")
107
+ expect(event.get("host")).to eq("127.0.0.1")
108
+ end
109
+
110
+ it "shoud add custom host field" do
111
+ config = <<-CONFIG
112
+ input {
113
+ snmp {
114
+ get => ["1.3.6.1.2.1.1.1.0"]
115
+ hosts => [{host => "udp:127.0.0.1/161" community => "public"}]
116
+ add_field => { host => "%{[@metadata][host_protocol]}:%{[@metadata][host_address]}/%{[@metadata][host_port]},%{[@metadata][host_community]}" }
117
+ }
118
+ }
119
+ CONFIG
120
+ event = input(config) { |_, queue| queue.pop }
121
+
122
+ expect(event.get("host")).to eq("udp:127.0.0.1/161,public")
123
+ end
124
+ end
85
125
  end
126
+
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: 0.1.0.beta1
4
+ version: 0.1.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elasticsearch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-11 00:00:00.000000000 Z
11
+ date: 2018-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement