logstash-filter-phpipam 0.5.1 → 0.7.0

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: c59a75c38c05ad39dff02abca85f6cd80984335f72e054f1f1fa89dccca96f5a
4
- data.tar.gz: f4d8722f7726151514c5a0bb02afcdb11c01b59ec892ee0ab7452699263d6d5f
3
+ metadata.gz: 86ccd5f712ea9d516d35656b23461458aef1dbcad3ccb2abb1b9317608b5666a
4
+ data.tar.gz: 0df24f83330d1d6805bcfeac7e3a74b99ca40c40fd4302658bd12a73dcb3a31e
5
5
  SHA512:
6
- metadata.gz: 6c771f8f94a30d0ec188d2378c8906d0c3d02a0a62886375ec6ef5a2d3bba43532c2fcc1deb851e3976eddca29cb9d177ecf2a4be62af1ad670a59c24b694d51
7
- data.tar.gz: ff3fe80c111102e8356232559bf7feec7bff26cdedbc3f8bc6bc285dcb65295228f3caf16da60541523726709cd6b9759a1f7d9ce100ead4d6204628dd04924d
6
+ metadata.gz: 3e926b71dbc4607835193539b8ee1c2ca7ec9f3b0065d6f36a88a3b2475f0898074f8c8b82d875604ee6a76a247aef562acdfe9c3a147733ce9fcdf96b99fa2d
7
+ data.tar.gz: a7a04639bfd827461d0522eb33b86d8931bc1d0bc992d0b420771251c59b894f5b09c68ff450c146a0ab9f533b03a3654c284010a63d290c72c4e412c3afcad4
@@ -23,7 +23,13 @@ class LogStash::Filters::Phpipam < LogStash::Filters::Base
23
23
  config :password, validate: :string, default: ''
24
24
 
25
25
  # Whether to use authentication or not
26
- config :auth, validate: :boolean, required: true, default: true
26
+ config :auth, validate: :boolean, default: true
27
+
28
+ # Whether to use caching or not
29
+ config :cache, validate: :boolean, default: true
30
+
31
+ # Which file to use as cache storage. Should be placed on a tmpfs volume for maximum performance
32
+ config :cache_path, validate: :string, default: '/tmp/logstash-filter-phpipam.json'
27
33
 
28
34
  # IP-address field to look up
29
35
  config :source, validate: :string, required: true
@@ -46,8 +52,9 @@ class LogStash::Filters::Phpipam < LogStash::Filters::Base
46
52
 
47
53
  return unless valid_ip?(ip, event)
48
54
 
49
- # Get data from phpIPAM
50
- event_data = phpipam_data(ip)
55
+ # Get data from cache or phpIPAM if not in cache
56
+ event_data = search_cache(ip)
57
+ event_data = phpipam_data(ip) if event_data.is_a?(FalseClass)
51
58
 
52
59
  return if !event_data['error'].nil? && event_data['error']
53
60
 
@@ -63,7 +70,7 @@ class LogStash::Filters::Phpipam < LogStash::Filters::Base
63
70
  # @param target: the target to normalize
64
71
  # @return [string]
65
72
  def normalize_target(target)
66
- target = "[#{target}]" if target && target !~ %r{^\[[^\[\]]+\]$}
73
+ target = "[#{target}]" if target !~ %r{^\[[^\[\]]+\]$}
67
74
  target
68
75
  end
69
76
 
@@ -87,7 +94,6 @@ class LogStash::Filters::Phpipam < LogStash::Filters::Base
87
94
  # Sends a GET method REST request.
88
95
  # @param method: which HTTP method to use (POST, GET)
89
96
  # @param url_path: path to connect to
90
- # @param basic_auth: whether to use basic_auth or not
91
97
  # @return [hash]
92
98
  def send_rest_request(method, url_path)
93
99
  @logger.debug? && @logger.debug('Sending request', host: @host, path: url_path)
@@ -190,7 +196,42 @@ class LogStash::Filters::Phpipam < LogStash::Filters::Base
190
196
  base['vlan']['description'] = vlan_data['description'] unless nil_or_empty?(vlan_data['description'])
191
197
  end
192
198
 
199
+ # Cache it for future needs
200
+ cache_data(base)
201
+
193
202
  # all your base are belong to us
194
203
  base
195
204
  end
205
+
206
+ # Caches data (if possible)
207
+ # @param data: the data to cache
208
+ # @return [void]
209
+ def cache_data(data)
210
+ data = data.to_json
211
+
212
+ File.open(@cache_path, 'a') do |file|
213
+ file.write(data + "\n")
214
+ @logger.debug? && @logger.debug('Cached data', data: data)
215
+ rescue StandardError
216
+ @logger.debug? && @logger.debug('Cache file is not writable, skipping caching of data', data: data, cache_file: @cache_path)
217
+ break
218
+ end
219
+ end
220
+
221
+ # Seaches the cache file for the IP.
222
+ # Returns a hash if the IP was found, else false
223
+ # @param ip: The IP-address to search for
224
+ # @return [hash/bool]
225
+ def search_cache(ip)
226
+ @logger.debug? && @logger.debug('Searching cache...', ip: ip)
227
+
228
+ return false unless File.exist?(@cache_path)
229
+
230
+ File.foreach(@cache_path) do |line|
231
+ line = JSON.parse(line)
232
+ return line if line['ip']['address'] == ip
233
+ end
234
+
235
+ false
236
+ end
196
237
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'logstash-filter-phpipam'
5
- s.version = '0.5.1'
5
+ s.version = '0.7.0'
6
6
  s.licenses = ['Apache-2.0']
7
7
  s.summary = 'A Logstash filter that returns results from phpIPAM'
8
8
  s.description = 'A Logstash filter that looks up an IP-address, and returns results from phpIPAM'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-phpipam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - magnuslarsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-31 00:00:00.000000000 Z
11
+ date: 2019-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core-plugin-api