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

Sign up to get free protection for your applications and to get access to all the features.
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