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

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: be537cc111d37698e89d70b879e7188880ff47e9d271413c8bc71a96e11ced89
4
+ data.tar.gz: 0d063b8c88de22b7ab1f9aeeeba7367dffc8149165cb268f0889d023b26fbcb7
5
5
  SHA512:
6
- metadata.gz: d2e1f5bb268ec0c9f98f68c0d415eb9ffc96d0e60177505959542b293d45879d71775dfdc8a7f88f9f40980bb6881b3983ad69a4ca38662a0fe07011a301e7a6
7
- data.tar.gz: e2cf6fd32e0cfdec8a391803f468b8534f76142fc230b1daa534b9b6ae17ddc322fac3c48a77e124767d6c6df16c66360b91c39b3f7ec363dd8653624b936033
6
+ metadata.gz: c52de0d0a0aef5001d4cfa8eb1cd80ef4b145db0f3ca2347506721400c4ead8eec5381c49549cf3c9105338a356e29639f89b5061e2aca0485f43fbaae511fa3
7
+ data.tar.gz: faf75d84fa049f2688cca7d633112519a4a9af57dc20b6971101425fdbf67e93c9a74a03e34e9731ed21780df487c5fdee0797679ddd532270f1893c99ea75d2
@@ -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.17"
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 > 10
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.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mykola Panin