fluent-plugin-fluent-plugin-json-size-limit 0.1.16 → 0.1.17

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: 101a8797e2c88b1200807388e3f970a636444d1ac8822b0eec251f3d6483b362
4
- data.tar.gz: 988af4fe02e3fd6e83ecf19351885638e528a6e074817dd3a5cd4c6b532d1f17
3
+ metadata.gz: be537cc111d37698e89d70b879e7188880ff47e9d271413c8bc71a96e11ced89
4
+ data.tar.gz: 0d063b8c88de22b7ab1f9aeeeba7367dffc8149165cb268f0889d023b26fbcb7
5
5
  SHA512:
6
- metadata.gz: d2e1f5bb268ec0c9f98f68c0d415eb9ffc96d0e60177505959542b293d45879d71775dfdc8a7f88f9f40980bb6881b3983ad69a4ca38662a0fe07011a301e7a6
7
- data.tar.gz: e2cf6fd32e0cfdec8a391803f468b8534f76142fc230b1daa534b9b6ae17ddc322fac3c48a77e124767d6c6df16c66360b91c39b3f7ec363dd8653624b936033
6
+ metadata.gz: c52de0d0a0aef5001d4cfa8eb1cd80ef4b145db0f3ca2347506721400c4ead8eec5381c49549cf3c9105338a356e29639f89b5061e2aca0485f43fbaae511fa3
7
+ data.tar.gz: faf75d84fa049f2688cca7d633112519a4a9af57dc20b6971101425fdbf67e93c9a74a03e34e9731ed21780df487c5fdee0797679ddd532270f1893c99ea75d2
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-fluent-plugin-json-size-limit"
6
- spec.version = "0.1.16"
6
+ spec.version = "0.1.17"
7
7
  spec.authors = ["Mykola Panin"]
8
8
  spec.email = ["mykola.panin@creatoriq.com"]
9
9
 
@@ -29,37 +29,37 @@ module Fluent
29
29
 
30
30
  def filter(tag, time, record)
31
31
  original_size = record.to_json.bytesize
32
- json_str = record.to_json
32
+ reduce_size(record, @max_size)
33
+ final_size = record.to_json.bytesize
33
34
 
34
- if json_str.bytesize > @max_size
35
- attempts = 0
36
- while json_str.bytesize > @max_size && attempts < 10
37
- reduced = false
38
- sorted_fields = record.sort_by { |k, v| v.to_s.length }.reverse
35
+ log.debug "Reduced record size from #{original_size} to #{final_size} bytes" if original_size != final_size
36
+ record
37
+ end
38
+
39
+ private
39
40
 
40
- sorted_fields.each do |key, value|
41
- next unless value.is_a?(String) && value.length > 10
41
+ def reduce_size(obj, target_size)
42
+ json_str = obj.to_json
43
+ return if json_str.bytesize <= target_size
42
44
 
43
- current_size = json_str.bytesize
44
- excess_size = current_size - @max_size
45
+ if obj.is_a?(Hash)
46
+ sorted_fields = obj.sort_by { |_, v| v.to_s.length }.reverse
47
+ sorted_fields.each do |key, value|
48
+ current_size = json_str.bytesize
49
+ excess_size = current_size - target_size
45
50
 
46
- if excess_size > 0
47
- new_length = [value.length - excess_size, 0].max
48
- record[key] = value[0...new_length]
49
- json_str = record.to_json
50
- reduced = true
51
- end
51
+ if value.is_a?(String) && value.length > 10
52
+ new_length = [value.length - excess_size, 0].max
53
+ obj[key] = value[0...new_length]
54
+ elsif value.is_a?(Hash) || value.is_a?(Array)
55
+ reduce_size(value, target_size)
52
56
  end
53
57
 
54
- break unless reduced
55
- attempts += 1
58
+ break if obj.to_json.bytesize <= target_size
56
59
  end
57
-
58
- final_size = json_str.bytesize
59
- log.debug "Reduced record size from #{original_size} to #{final_size} bytes" if original_size != final_size
60
+ elsif obj.is_a?(Array)
61
+ obj.each { |element| reduce_size(element, target_size) }
60
62
  end
61
-
62
- record
63
63
  end
64
64
  end
65
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-fluent-plugin-json-size-limit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mykola Panin