logstash-filter-fingerprint 3.4.4 → 3.5.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: 67ab2a8c642f61df85825d8de9f0cf7c6a1cf05b01b32ceffea1776ea4ebce66
4
- data.tar.gz: 7af0a15fc8e0b686a263f2828919fd7da1fb5627fa86cb4f82a7b0a361c16b20
3
+ metadata.gz: cab2034c16ba3a10e1e9c54f1c647e41656231297b12b8a0071aa2e2993f1c7b
4
+ data.tar.gz: abba4c27fe2388d5ee2f153f64b700ab92f8916804846e18d2b8b4a538f63bb3
5
5
  SHA512:
6
- metadata.gz: 23ded7513caf3a42ae83a921e535a0498132ddfa0b1fd4f992991abe1f9f910f9c1d4df475edb9c37677f1d9b59ebdd6442171794f58e91eb52e4d58a0052ac9
7
- data.tar.gz: c0b36f667d92ff883b7e2507bbea40d6e9a3d0b52155c7a1342b435aa7bd144675684212092059f5bba20bcff64d08ce50f74eefa5762e1e41f772aafbb8c4dd
6
+ metadata.gz: 574c5ac68d60513c4b4ac55bd7f6c2a6a1c986fdfa6135c56ee551dcd7ac2a119cb08ac42e1636eb19414e1b91141c72849c775df09cb9ef8ad110de1bbb0583
7
+ data.tar.gz: f807ec6c96c7d239be51ecd6244f6ba57c4c322968e0055a2d3dbe7e1fccec3d0b8e102917dff2ae439a24fac4197c18b30a3255d1226ba566831ded2d303d46
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 3.5.0
2
+ - Fix fingerprint instability for Hash and Array field values caused by JRuby 10 changing `Hash#inspect` formatting [#79](https://github.com/logstash-plugins/logstash-filter-fingerprint/pull/79)
3
+
1
4
  ## 3.4.4
2
5
  - Fix, eagerly load OpenSSL classes ot avoid uninitialized constant error [#76](https://github.com/logstash-plugins/logstash-filter-fingerprint/pull/76)
3
6
 
@@ -160,12 +160,12 @@ class LogStash::Filters::Fingerprint < LogStash::Filters::Base
160
160
  if @concatenate_all_fields
161
161
  deep_sort_hashes(event.to_hash).each do |k,v|
162
162
  # Force encoding to UTF-8 to get around https://github.com/jruby/jruby/issues/6748
163
- to_string << "|#{k}|#{v}".force_encoding("UTF-8")
163
+ to_string << "|#{k}|#{to_canonical_value(v)}".force_encoding("UTF-8")
164
164
  end
165
165
  else
166
166
  @source.sort.each do |k|
167
167
  # Force encoding to UTF-8 to get around https://github.com/jruby/jruby/issues/6748
168
- to_string << "|#{k}|#{deep_sort_hashes(event.get(k))}".force_encoding("UTF-8")
168
+ to_string << "|#{k}|#{to_canonical_value(event.get(k))}".force_encoding("UTF-8")
169
169
  end
170
170
  end
171
171
  to_string << "|"
@@ -175,9 +175,9 @@ class LogStash::Filters::Fingerprint < LogStash::Filters::Base
175
175
  @source.each do |field|
176
176
  next unless event.include?(field)
177
177
  if event.get(field).is_a?(Array)
178
- event.set(@target, event.get(field).collect { |v| fingerprint(deep_sort_hashes(v)) })
178
+ event.set(@target, event.get(field).collect { |v| fingerprint(to_canonical_value(v)) })
179
179
  else
180
- event.set(@target, fingerprint(deep_sort_hashes(event.get(field))))
180
+ event.set(@target, fingerprint(to_canonical_value(event.get(field))))
181
181
  end
182
182
  end
183
183
  end
@@ -201,6 +201,22 @@ class LogStash::Filters::Fingerprint < LogStash::Filters::Base
201
201
  end
202
202
  end
203
203
 
204
+ # Returns a canonical representation of the given object for fingerprinting.
205
+ # For Hashes and Arrays, produces a pipe-delimited string that is
206
+ # independent of Hash#inspect formatting (which changed in JRuby 10).
207
+ # Scalars pass through unchanged to preserve type-aware fingerprinting
208
+ # (e.g., MURMUR3 uses int64_hash for Integers vs str_hash for Strings).
209
+ def to_canonical_value(object)
210
+ case object
211
+ when Hash
212
+ object.sort.map { |k, v| "#{to_canonical_value(k)}|#{to_canonical_value(v)}" }.join("|")
213
+ when Array
214
+ object.map { |e| to_canonical_value(e) }.join("|")
215
+ else
216
+ object
217
+ end
218
+ end
219
+
204
220
  def fingerprint_ipv4_network(ip_string)
205
221
  # in JRuby 1.7.11 outputs as US-ASCII
206
222
  IPAddr.new(ip_string).mask(@key.value.to_i).to_s.force_encoding(Encoding::UTF_8)
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-filter-fingerprint'
4
- s.version = '3.4.4'
4
+ s.version = '3.5.0'
5
5
  s.licenses = ['Apache-2.0']
6
6
  s.summary = "Fingerprints fields by replacing values with a consistent hash"
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"
@@ -261,7 +261,7 @@ describe LogStash::Filters::Fingerprint, :ecs_compatibility_support, :aggregate_
261
261
  let(:config) { super().merge("concatenate_sources" => true) }
262
262
  it "fingerprints the value of concatenated key/pairs" do
263
263
  # SHA1 of "|field1|inner_key|🂡|1|2|field2|🂡|"
264
- expect(fingerprint).to eq("d74f41841c7cdc793a97c218d2ff18064a5f1950")
264
+ expect(fingerprint).to eq("d2a1c14e0c9ef137d67114db23b3f2fdbcc90d08")
265
265
  end
266
266
  end
267
267
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-fingerprint
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.4
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-03-19 00:00:00.000000000 Z
10
+ date: 2026-03-31 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
  - - ">="
@@ -19,9 +19,8 @@ dependencies:
19
19
  - - "<="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '2.99'
22
- name: logstash-core-plugin-api
23
- prerelease: false
24
22
  type: :runtime
23
+ prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ">="
@@ -31,42 +30,42 @@ dependencies:
31
30
  - !ruby/object:Gem::Version
32
31
  version: '2.99'
33
32
  - !ruby/object:Gem::Dependency
33
+ name: murmurhash3
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - '='
37
37
  - !ruby/object:Gem::Version
38
38
  version: 0.1.6
39
- name: murmurhash3
40
- prerelease: false
41
39
  type: :runtime
40
+ prerelease: false
42
41
  version_requirements: !ruby/object:Gem::Requirement
43
42
  requirements:
44
43
  - - '='
45
44
  - !ruby/object:Gem::Version
46
45
  version: 0.1.6
47
46
  - !ruby/object:Gem::Dependency
47
+ name: logstash-devutils
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  requirements:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: '0'
53
- name: logstash-devutils
54
- prerelease: false
55
53
  type: :development
54
+ prerelease: false
56
55
  version_requirements: !ruby/object:Gem::Requirement
57
56
  requirements:
58
57
  - - ">="
59
58
  - !ruby/object:Gem::Version
60
59
  version: '0'
61
60
  - !ruby/object:Gem::Dependency
61
+ name: logstash-mixin-ecs_compatibility_support
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
66
  version: '1.2'
67
- name: logstash-mixin-ecs_compatibility_support
68
- prerelease: false
69
67
  type: :runtime
68
+ prerelease: false
70
69
  version_requirements: !ruby/object:Gem::Requirement
71
70
  requirements:
72
71
  - - "~>"
@@ -96,7 +95,6 @@ licenses:
96
95
  metadata:
97
96
  logstash_plugin: 'true'
98
97
  logstash_group: filter
99
- post_install_message:
100
98
  rdoc_options: []
101
99
  require_paths:
102
100
  - lib
@@ -111,8 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
109
  - !ruby/object:Gem::Version
112
110
  version: '0'
113
111
  requirements: []
114
- rubygems_version: 3.2.33
115
- signing_key:
112
+ rubygems_version: 3.6.3
116
113
  specification_version: 4
117
114
  summary: Fingerprints fields by replacing values with a consistent hash
118
115
  test_files: