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

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: b0e9b320a7350dc13269f72a2ff8f2c4a99040cd3a0b181dab88adc633ca503c
4
+ data.tar.gz: '04654296b53a8bd31319b747b9a070f79a3245ac19d510f5a7fb858014d0f43a'
5
5
  SHA512:
6
- metadata.gz: 874c65a8b41398c2f0a1aac400a3db41010dcbd80faacdfe0e9c95ea126bb851973aa023243e071119931706c78fa45d1b4a04738326933961665d1b87d6fff2
7
- data.tar.gz: 3fa3adb2888eee31e26d8c3c03c70a7287aa11af61347eaa8f9f763f48505a4d19423697b0e8dfbc342127dc311220cb1e57d4447065450c3edc6de622557371
6
+ metadata.gz: 91c2e0697c2944367ef3fdae15283ae4341854e1e85c14a7e0454a6b39da502338e53b28b1761547150144a39a782ca2f9850f0cd3d79ed3d45a027dfd9604db
7
+ data.tar.gz: 7844533169a7e2b1fb0efcb8c0f02d99233ce2187b48eaf20bbe1402c4620150fc013837e468fd789c43d7dd6f46d98b6943c1a76c6beed9235185a21a3dfda0
@@ -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.26"
7
7
  spec.authors = ["Mykola Panin"]
8
8
  spec.email = ["mykola.panin@creatoriq.com"]
9
9
 
@@ -38,24 +38,45 @@ 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
41
+ def reduce_size(obj, target_size)
42
+ attempts = 0
43
+ while obj.to_json.bytesize > target_size && attempts < 100
44
+ perform_reduction(obj, target_size)
45
+ attempts += 1
46
+ end
47
+ end
48
+
49
+ def perform_reduction(obj, target_size)
50
+ excess_size = obj.to_json.bytesize - target_size
43
51
 
44
52
  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
54
- end
53
+ reduce_hash(obj, excess_size)
55
54
  elsif obj.is_a?(Array)
56
- obj.each { |element| reduce_size(element, target_size, depth + 1) }
55
+ reduce_array(obj, target_size)
57
56
  end
58
57
  end
58
+
59
+ def reduce_hash(hash_obj, excess_size)
60
+ hash_obj.each do |key, value|
61
+ if value.is_a?(String)
62
+ reduce_string(hash_obj, key, value, excess_size)
63
+ elsif value.is_a?(Hash) || value.is_a?(Array)
64
+ reduce_size(value, excess_size)
65
+ end
66
+ end
67
+ end
68
+
69
+ def reduce_array(array_obj, target_size)
70
+ array_obj.each do |element|
71
+ reduce_size(element, target_size) if element.is_a?(Hash) || element.is_a?(Array)
72
+ end
73
+ end
74
+
75
+ def reduce_string(hash_obj, key, value, excess_size)
76
+ reduction_amount = (value.length.to_f / hash_obj.to_json.bytesize) * excess_size
77
+ new_length = [value.length - reduction_amount, 0].max
78
+ hash_obj[key] = value[0...new_length]
79
+ end
59
80
  end
60
81
  end
61
82
  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.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mykola Panin