libhoney 1.14.0 → 1.14.1

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: acad70fa5327549aaf1faca4fff6eeab79cdc72e7bab0cd3b6eb44fad49f2333
4
- data.tar.gz: 15fb1bdfaa6770ebe836764217a24f7f4410a38096409b7c3c64b775b4116349
3
+ metadata.gz: 2373830c8e1db77f91d3246c8e0f70f014d18f3ddf385f7a47eaff425e5750df
4
+ data.tar.gz: a40a3eef2910a08fad7c23302ad15ed42764e9dea1dce589a4f75473ed7a4adb
5
5
  SHA512:
6
- metadata.gz: e7a813d6e5b8a0f25f70f3e978a9b9a42e169f62d9b740829e784cf4f92c48531800fc93b69aa8f1aee4f6acebef0f648405db66418ca38e39c46042d02214d8
7
- data.tar.gz: 4d764b9c4bfb0b244bb5bf97275730b77c5e70d7720bfeac2cac39ae5d2a858b9fe5ed935379a08ee77a827b29262f787c9fd8ad1ae5ae529efa20fa8a03626e
6
+ metadata.gz: 47d18ab9a49b10f8277508048eaf0736ca36547918181c02b94d8ea7a5c6c2e9c068b63972446cc90a0e1adc4c6a4f900671e6644d869798f687b019356233f3
7
+ data.tar.gz: f356d9b7428041fa5e6fbfaafded29b4c84aa78eaecbc61f04a9472162a796d9934d3c1912d60182cbb8696dc4d77e3c2d4fc1642f5d7c11017802625ea4f4d3
@@ -19,7 +19,7 @@ Metrics/ClassLength:
19
19
  - test/*
20
20
 
21
21
  Metrics/MethodLength:
22
- Max: 25
22
+ Max: 40
23
23
  Exclude:
24
24
  - lib/libhoney/transmission.rb
25
25
  - test/*
@@ -14,17 +14,17 @@ Lint/HandleExceptions:
14
14
 
15
15
  # Offense count: 7
16
16
  Metrics/AbcSize:
17
- Max: 35
17
+ Max: 40
18
18
 
19
19
  # Offense count: 1
20
20
  # Configuration parameters: CountComments, ExcludedMethods.
21
21
  # ExcludedMethods: refine
22
22
  Metrics/BlockLength:
23
- Max: 27
23
+ Max: 30
24
24
 
25
25
  # Offense count: 2
26
26
  Metrics/CyclomaticComplexity:
27
- Max: 8
27
+ Max: 12
28
28
 
29
29
  # Offense count: 2
30
30
  # Configuration parameters: CountKeywordArgs.
@@ -33,4 +33,4 @@ Metrics/ParameterLists:
33
33
 
34
34
  # Offense count: 1
35
35
  Metrics/PerceivedComplexity:
36
- Max: 8
36
+ Max: 10
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- libhoney (1.14.0)
4
+ libhoney (1.14.1)
5
5
  addressable (~> 2.0)
6
6
  http (>= 2.0, < 5.0)
7
7
 
@@ -17,16 +17,21 @@ GEM
17
17
  safe_yaml (~> 1.0.0)
18
18
  domain_name (0.5.20190701)
19
19
  unf (>= 0.0.5, < 1.0.0)
20
+ ffi (1.11.2)
21
+ ffi-compiler (1.0.1)
22
+ ffi (>= 1.0.0)
23
+ rake
20
24
  hashdiff (1.0.0)
21
- http (4.1.1)
25
+ http (4.2.0)
22
26
  addressable (~> 2.3)
23
27
  http-cookie (~> 1.0)
24
28
  http-form_data (~> 2.0)
25
- http_parser.rb (~> 0.6.0)
29
+ http-parser (~> 1.2.0)
26
30
  http-cookie (1.0.3)
27
31
  domain_name (~> 0.5)
28
32
  http-form_data (2.1.1)
29
- http_parser.rb (0.6.0)
33
+ http-parser (1.2.1)
34
+ ffi-compiler (>= 1.0, < 2.0)
30
35
  jaro_winkler (1.5.3)
31
36
  minitest (5.11.3)
32
37
  multi_json (1.13.1)
@@ -0,0 +1,62 @@
1
+ module Libhoney
2
+ module Cleaner
3
+ ENCODING_OPTIONS = { invalid: :replace, undef: :replace }.freeze
4
+ RECURSION = '[RECURSION]'.freeze
5
+ RAISED = '[RAISED]'.freeze
6
+
7
+ # Cleans an object for converting to JSON. Checks for recursion,
8
+ # exceptions generated, and non UTF8 encoded strings.
9
+ # @param data the data to clean
10
+ # @param seen [Hash] used to check for recursion
11
+ # @return the cleaned object
12
+ def clean_data(data, seen = {})
13
+ return nil if data.nil?
14
+
15
+ # check for recursion here, by tracking all of the potentially nested
16
+ # objects that we have seen before.
17
+ protection = case data
18
+ when Hash, Array, Set
19
+ # bail here if we have already seen this object
20
+ return seen[data] if seen[data]
21
+
22
+ seen[data] = RECURSION
23
+ end
24
+
25
+ value = case data
26
+ when Hash
27
+ clean_hash = {}
28
+ data.each do |key, val|
29
+ clean_hash[key] = clean_data(val, seen)
30
+ end
31
+ clean_hash
32
+ when Array, Set
33
+ data.map do |element|
34
+ clean_data(element, seen)
35
+ end
36
+ when Numeric, TrueClass, FalseClass
37
+ data
38
+ when String
39
+ clean_string(data)
40
+ else
41
+ str = begin
42
+ data.to_s
43
+ rescue StandardError
44
+ RAISED
45
+ end
46
+ clean_string(str)
47
+ end
48
+
49
+ seen[data] = value if protection
50
+ value
51
+ end
52
+
53
+ # Converts a string to UTF8 encoding if required using the ENCODING_OPTIONS
54
+ # @param str [String] the string to convert
55
+ # @return [String] the UTF8 encoded string
56
+ def clean_string(str)
57
+ return str if str.encoding == Encoding::UTF_8 && str.valid_encoding?
58
+
59
+ str.encode(Encoding::UTF_8, ENCODING_OPTIONS)
60
+ end
61
+ end
62
+ end
@@ -1,10 +1,13 @@
1
1
  require 'json'
2
2
  require 'timeout'
3
3
  require 'libhoney/response'
4
+ require 'libhoney/cleaner'
4
5
 
5
6
  module Libhoney
6
7
  # @api private
7
8
  class TransmissionClient
9
+ include Cleaner
10
+
8
11
  def initialize(max_batch_size: 50,
9
12
  send_frequency: 100,
10
13
  max_concurrent_batches: 10,
@@ -63,6 +66,7 @@ module Libhoney
63
66
  begin
64
67
  http = http_clients[api_host]
65
68
  body = serialize_batch(batch)
69
+
66
70
  next if body.nil?
67
71
 
68
72
  headers = {
@@ -179,11 +183,14 @@ module Libhoney
179
183
  payload = []
180
184
  batch.map! do |event|
181
185
  begin
186
+ data = clean_data(event.data)
187
+
182
188
  e = {
183
189
  time: event.timestamp.iso8601(3),
184
190
  samplerate: event.sample_rate,
185
- data: event.data
191
+ data: data
186
192
  }
193
+
187
194
  payload << JSON.generate(e)
188
195
 
189
196
  event
@@ -1,3 +1,3 @@
1
1
  module Libhoney
2
- VERSION = '1.14.0'.freeze
2
+ VERSION = '1.14.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libhoney
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Honeycomb.io Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-06 00:00:00.000000000 Z
11
+ date: 2019-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bump
@@ -219,6 +219,7 @@ files:
219
219
  - example/factorial.rb
220
220
  - lib/libhoney.rb
221
221
  - lib/libhoney/builder.rb
222
+ - lib/libhoney/cleaner.rb
222
223
  - lib/libhoney/client.rb
223
224
  - lib/libhoney/event.rb
224
225
  - lib/libhoney/log_client.rb