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

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