fluent-plugin-fluent-plugin-json-size-limit 0.1.23 → 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: 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