fluent-plugin-fluent-plugin-json-size-limit 0.1.23 → 0.1.24

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: 4b4d094242ef2410fa297a2fadb82c44807935689eadf364a8940ba7e7a140e8
4
- data.tar.gz: f4e3e2f1b7876e722eadfaafc5263c219cd187976cd28e07ced5ec40e72e31e1
3
+ metadata.gz: 20e10aae10321603fa97bf64f44a8c5aaece831e988ed7f14be0799b328f13cb
4
+ data.tar.gz: a29af8031f826c2b4873ba3b976569b2f66fb62d9b2471dc7619f7198ff3204d
5
5
  SHA512:
6
- metadata.gz: 874c65a8b41398c2f0a1aac400a3db41010dcbd80faacdfe0e9c95ea126bb851973aa023243e071119931706c78fa45d1b4a04738326933961665d1b87d6fff2
7
- data.tar.gz: 3fa3adb2888eee31e26d8c3c03c70a7287aa11af61347eaa8f9f763f48505a4d19423697b0e8dfbc342127dc311220cb1e57d4447065450c3edc6de622557371
6
+ metadata.gz: '0795d0a432657db02bc710c6a6df44c92ed03048a4fc7b84511b3bc78a9b3871f9fdfaa49faa0a99fd2dd2a846a84a0cd7e717a4abbf443ce0265dd69a38510b'
7
+ data.tar.gz: dcf06ae947ded1e2b08250b4d4c81187e68a8dc6bd218ac76904b798d0dcf54ffec692b3ea6a974a8131e283b3abbc02baf2b4fd6af7b88a1835367ab6a8c869
@@ -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.23"
6
+ spec.version = "0.1.24"
7
7
  spec.authors = ["Mykola Panin"]
8
8
  spec.email = ["mykola.panin@creatoriq.com"]
9
9
 
@@ -38,22 +38,30 @@ module Fluent
38
38
 
39
39
  private
40
40
 
41
- def reduce_size(obj, target_size, depth = 0)
42
- return if obj.to_json.bytesize <= target_size || depth > 20
43
-
44
- if obj.is_a?(Hash)
45
- obj.each do |key, value|
46
- if value.is_a?(String)
47
- new_length = [value.length * (0.5 - depth * 0.05), 0].max
48
- obj[key] = value[0...new_length]
49
- elsif value.is_a?(Hash) || value.is_a?(Array)
50
- reduce_size(value, target_size, depth + 1)
51
- end
52
-
53
- break if obj.to_json.bytesize <= target_size
41
+ def reduce_size(obj, target_size)
42
+ attempts = 0
43
+ while obj.to_json.bytesize > target_size && attempts < 100
44
+ excess_size = obj.to_json.bytesize - target_size
45
+ if obj.is_a?(Hash)
46
+ reduce_hash(obj, excess_size)
47
+ elsif obj.is_a?(Array)
48
+ obj.each { |element| reduce_size(element, target_size) }
49
+ end
50
+ attempts += 1
51
+ end
52
+ end
53
+
54
+ def reduce_hash(hash_obj, excess_size)
55
+ hash_obj.each do |key, value|
56
+ break if hash_obj.to_json.bytesize <= target_size
57
+
58
+ if value.is_a?(String)
59
+ reduction_amount = (value.length.to_f / hash_obj.to_json.bytesize) * excess_size
60
+ new_length = [value.length - reduction_amount, 0].max
61
+ hash_obj[key] = value[0...new_length]
62
+ elsif value.is_a?(Hash) || value.is_a?(Array)
63
+ reduce_size(value, target_size)
54
64
  end
55
- elsif obj.is_a?(Array)
56
- obj.each { |element| reduce_size(element, target_size, depth + 1) }
57
65
  end
58
66
  end
59
67
  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.23
4
+ version: 0.1.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mykola Panin