fluent-plugin-fluent-plugin-json-size-limit 0.1.15 → 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: 40f924059fcbebb4396efc9f677ffe7dd8b2d846a6b408c27023c604f5ac4eb7
4
- data.tar.gz: 1f4ff05c3488fd48d1aacb5f1bf6f8087bb90d65e342f8569ca2590c2282594d
3
+ metadata.gz: be537cc111d37698e89d70b879e7188880ff47e9d271413c8bc71a96e11ced89
4
+ data.tar.gz: 0d063b8c88de22b7ab1f9aeeeba7367dffc8149165cb268f0889d023b26fbcb7
5
5
  SHA512:
6
- metadata.gz: 118f7e2a31f67b792ad4b0470be2a783e4dcfa6a15330d6cf6af074e7f3fe3dac7ff0e6057edc0f425bd73bce5b7ca2d2b6f2162e58e3d400e6ebaa1ea2e255d
7
- data.tar.gz: 01e25d11c7efea63c48d34e95b6ebba689d7793568c5910a2395212284a69a25c8706322579ed58f86fb8399f20afe997f8c52c66f7f9cbbb6de46183e09051c
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.15"
6
+ spec.version = "0.1.17"
7
7
  spec.authors = ["Mykola Panin"]
8
8
  spec.email = ["mykola.panin@creatoriq.com"]
9
9
 
@@ -29,29 +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
- 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
36
38
 
37
- sorted_fields.each do |key, value|
38
- next unless value.is_a?(String) && value.length > 10
39
+ private
40
+
41
+ def reduce_size(obj, target_size)
42
+ json_str = obj.to_json
43
+ return if json_str.bytesize <= target_size
39
44
 
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|
40
48
  current_size = json_str.bytesize
41
- excess_size = current_size - @max_size
49
+ excess_size = current_size - target_size
42
50
 
43
- new_length = [value.length - excess_size, 0].max
44
- record[key] = value[0...new_length]
45
- json_str = record.to_json
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)
56
+ end
46
57
 
47
- break if json_str.bytesize <= @max_size
58
+ break if obj.to_json.bytesize <= target_size
48
59
  end
49
-
50
- final_size = json_str.bytesize
51
- log.debug "Reduced record size from #{original_size} to #{final_size} bytes"
60
+ elsif obj.is_a?(Array)
61
+ obj.each { |element| reduce_size(element, target_size) }
52
62
  end
53
-
54
- record
55
63
  end
56
64
  end
57
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.15
4
+ version: 0.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mykola Panin