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

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: 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