fluent-plugin-fluent-plugin-json-size-limit 0.1.16 → 0.1.18

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: 101a8797e2c88b1200807388e3f970a636444d1ac8822b0eec251f3d6483b362
4
- data.tar.gz: 988af4fe02e3fd6e83ecf19351885638e528a6e074817dd3a5cd4c6b532d1f17
3
+ metadata.gz: b20e7aa472449c2322e56536598b8243e1cc6260f9e222738ca188fc4769ad5b
4
+ data.tar.gz: c98e3364c07dc89f08e07079ff2b8b9929f3038c04bdb1955a40a5151579875c
5
5
  SHA512:
6
- metadata.gz: d2e1f5bb268ec0c9f98f68c0d415eb9ffc96d0e60177505959542b293d45879d71775dfdc8a7f88f9f40980bb6881b3983ad69a4ca38662a0fe07011a301e7a6
7
- data.tar.gz: e2cf6fd32e0cfdec8a391803f468b8534f76142fc230b1daa534b9b6ae17ddc322fac3c48a77e124767d6c6df16c66360b91c39b3f7ec363dd8653624b936033
6
+ metadata.gz: 4e0959207364b9fb3b96473c0aa1f194953526e95ba8374659714dae394f9622368aa6a63270a87a7c61d9b4f12952def4136111ddf9b3cceeef88e4da843753
7
+ data.tar.gz: 4f49bd24b9d9e3d7e45f969073dfd1ca2be683903a7c5fa606d9fad81060da0d8f51271351748688e3959cc63ed0f3c7eca7e16d81301f8d7d53c0519fb4e0d4
@@ -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.16"
6
+ spec.version = "0.1.18"
7
7
  spec.authors = ["Mykola Panin"]
8
8
  spec.email = ["mykola.panin@creatoriq.com"]
9
9
 
@@ -29,37 +29,37 @@ module Fluent
29
29
 
30
30
  def filter(tag, time, record)
31
31
  original_size = record.to_json.bytesize
32
- json_str = record.to_json
32
+ reduce_size(record, @max_size)
33
+ final_size = record.to_json.bytesize
33
34
 
34
- if json_str.bytesize > @max_size
35
- attempts = 0
36
- while json_str.bytesize > @max_size && attempts < 10
37
- reduced = false
38
- sorted_fields = record.sort_by { |k, v| v.to_s.length }.reverse
35
+ log.debug "Reduced record size from #{original_size} to #{final_size} bytes" if original_size != final_size
36
+ record
37
+ end
38
+
39
+ private
39
40
 
40
- sorted_fields.each do |key, value|
41
- next unless value.is_a?(String) && value.length > 10
41
+ def reduce_size(obj, target_size)
42
+ json_str = obj.to_json
43
+ return if json_str.bytesize <= target_size
42
44
 
43
- current_size = json_str.bytesize
44
- excess_size = current_size - @max_size
45
+ if obj.is_a?(Hash)
46
+ sorted_fields = obj.sort_by { |_, v| v.to_s.length }.reverse
47
+ sorted_fields.each do |key, value|
48
+ current_size = json_str.bytesize
49
+ excess_size = current_size - target_size
45
50
 
46
- if excess_size > 0
47
- new_length = [value.length - excess_size, 0].max
48
- record[key] = value[0...new_length]
49
- json_str = record.to_json
50
- reduced = true
51
- end
51
+ if value.is_a?(String) && value.length > 20
52
+ new_length = [value.length - excess_size, 0].max
53
+ obj[key] = value[0...new_length]
54
+ elsif value.is_a?(Hash) || value.is_a?(Array)
55
+ reduce_size(value, target_size)
52
56
  end
53
57
 
54
- break unless reduced
55
- attempts += 1
58
+ break if obj.to_json.bytesize <= target_size
56
59
  end
57
-
58
- final_size = json_str.bytesize
59
- log.debug "Reduced record size from #{original_size} to #{final_size} bytes" if original_size != final_size
60
+ elsif obj.is_a?(Array)
61
+ obj.each { |element| reduce_size(element, target_size) }
60
62
  end
61
-
62
- record
63
63
  end
64
64
  end
65
65
  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.16
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mykola Panin