fluent-plugin-fluent-plugin-json-size-limit 0.1.22 → 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: f8113de72521243b0a40d79166525582b0bbe0ab03e62a279a1f4a438e6e6cf9
4
- data.tar.gz: e979523af4ae24a153bee176d7f3ba07dd5d98712d977f638b84171d875c955d
3
+ metadata.gz: 20e10aae10321603fa97bf64f44a8c5aaece831e988ed7f14be0799b328f13cb
4
+ data.tar.gz: a29af8031f826c2b4873ba3b976569b2f66fb62d9b2471dc7619f7198ff3204d
5
5
  SHA512:
6
- metadata.gz: a4025bbda9bf50409b032244f0b50211ad2a3eb6d44d47c054af3804811f680f3b8998a8170f6065e4fc7b139dc39d0a610c1375dd11f4fd32c81c8999dc06d9
7
- data.tar.gz: d4392c92ea0bae5a5904baa42d9d9f708d7accd2c9fffab9df3b57a3044bc9363083bff9ec6739a3058ef2d1173d063c80eee2fe0f66260bf597ddc6b403af94
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.22"
6
+ spec.version = "0.1.24"
7
7
  spec.authors = ["Mykola Panin"]
8
8
  spec.email = ["mykola.panin@creatoriq.com"]
9
9
 
@@ -39,24 +39,31 @@ module Fluent
39
39
  private
40
40
 
41
41
  def reduce_size(obj, target_size)
42
- return if obj.to_json.bytesize <= target_size
43
-
44
- if obj.is_a?(Hash)
45
- obj.each do |key, value|
46
- break if obj.to_json.bytesize <= target_size
47
-
48
- if value.is_a?(String)
49
- new_length = [value.length / 2, 0].max
50
- obj[key] = value[0...new_length]
51
- elsif value.is_a?(Hash) || value.is_a?(Array)
52
- reduce_size(value, target_size)
53
- end
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) }
57
65
  end
58
66
  end
59
67
  end
60
68
  end
61
69
  end
62
-
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.22
4
+ version: 0.1.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mykola Panin