libhoney 1.17.0 → 1.18.0
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 +4 -4
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +13 -0
- data/lib/libhoney/client.rb +39 -2
- data/lib/libhoney/response.rb +10 -2
- data/lib/libhoney/transmission.rb +19 -10
- data/lib/libhoney/version.rb +1 -1
- data/libhoney.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33a687ebf8ae87e69cf6a53b50c4e2cd926f9938af709635d42a209ec2e6c93e
|
4
|
+
data.tar.gz: fd3f558a15f872c9f63fc6451722c3e9e21b7cba5ebe8d7816ec0cb08064318b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36efc5d9734e125cd141e21dd60edbc6cf23350334bf431dead264c375dfd11b54bcf286f5509d5e97633ee4ce2d4fc689ebf5033d472237d5b6e7e2f2d0cb81
|
7
|
+
data.tar.gz: 5d5147a6e9f3fc1055a94932943c5915c99f43ad550d4dd5f20955d2dad023c41a1939e6f8037b38856375a10dcdc51557b06e3d56b454296a1596c7dd62b74c
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,19 @@
|
|
2
2
|
|
3
3
|
## changes pending release
|
4
4
|
|
5
|
+
## 1.18.0
|
6
|
+
|
7
|
+
### Improvements
|
8
|
+
|
9
|
+
- replace HTTP client library to reduce external dependencies (#81)
|
10
|
+
|
11
|
+
### Deprecations
|
12
|
+
|
13
|
+
- `Libhoney::Client.new(proxy_config: _)`: the `proxy_config` parameter for client
|
14
|
+
creation will no longer accept an Array in the next major version. The recommended
|
15
|
+
way to configure the client for operation behind forwarding web proxies is to set
|
16
|
+
http/https/no_proxy environment variables appropriately.
|
17
|
+
|
5
18
|
## 1.17.0
|
6
19
|
|
7
20
|
### Fixes:
|
data/lib/libhoney/client.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
+
require 'addressable/uri'
|
1
2
|
require 'time'
|
2
3
|
require 'json'
|
3
|
-
require 'http'
|
4
4
|
require 'forwardable'
|
5
5
|
|
6
6
|
require 'libhoney/null_transmission'
|
@@ -51,6 +51,13 @@ module Libhoney
|
|
51
51
|
# @param block_on_responses [Boolean] if true, block if there is no thread reading from the response queue
|
52
52
|
# @param pending_work_capacity [Fixnum] defaults to 1000. If the queue of
|
53
53
|
# pending events exceeds 1000, this client will start dropping events.
|
54
|
+
# @param proxy_config [String, Array, nil] proxy connection information
|
55
|
+
# nil: (default, recommended) connection proxying will be determined from any http_proxy, https_proxy, and no_proxy environment
|
56
|
+
# variables set for the process.
|
57
|
+
# String: the value must be the URI for connecting to a forwarding web proxy. Must be parsable by stdlib URI.
|
58
|
+
# Array: (deprecated, removal in v2.0) the value must have one and at most four elements: e.g. ['host', port, 'username', 'password'].
|
59
|
+
# The assumption is that the TCP connection will be tunneled via HTTP, so the assumed scheme is 'http://'
|
60
|
+
# 'host' is required. 'port' is optional (default:80), unless a 'username' is included. 'password' is optional.
|
54
61
|
# rubocop:disable Metrics/ParameterLists
|
55
62
|
def initialize(writekey: nil,
|
56
63
|
dataset: nil,
|
@@ -102,7 +109,7 @@ module Libhoney
|
|
102
109
|
@pending_work_capacity = pending_work_capacity
|
103
110
|
@responses = SizedQueue.new(2 * @pending_work_capacity)
|
104
111
|
@lock = Mutex.new
|
105
|
-
@proxy_config = proxy_config
|
112
|
+
@proxy_config = parse_proxy_config(proxy_config)
|
106
113
|
end
|
107
114
|
|
108
115
|
attr_reader :block_on_send, :block_on_responses, :max_batch_size,
|
@@ -224,5 +231,35 @@ module Libhoney
|
|
224
231
|
def should_drop(sample_rate)
|
225
232
|
rand(1..sample_rate) != 1
|
226
233
|
end
|
234
|
+
|
235
|
+
private
|
236
|
+
|
237
|
+
# @api private
|
238
|
+
def parse_proxy_config(config)
|
239
|
+
case config
|
240
|
+
when nil then nil
|
241
|
+
when String
|
242
|
+
URI.parse(config)
|
243
|
+
when Array
|
244
|
+
warn <<-WARNING
|
245
|
+
DEPRECATION WARNING: #{self.class.name} the proxy_config parameter will require a String value, not an Array in libhoney 2.0.
|
246
|
+
To resolve:
|
247
|
+
+ recommended: set http/https_proxy environment variables, which take precedence over any option set here, then remove proxy_config parameter from client initialization
|
248
|
+
+ set proxy_config to a String containing the forwarding proxy URI (only used if http/https_proxy are not set)
|
249
|
+
WARNING
|
250
|
+
host, port, user, password = config
|
251
|
+
|
252
|
+
parsed_config = URI::HTTP.build(host: host, port: port).tap do |uri|
|
253
|
+
uri.userinfo = "#{user}:#{password}" if user
|
254
|
+
end
|
255
|
+
redacted_config = parsed_config.dup.tap do |uri|
|
256
|
+
uri.password = 'REDACTED' unless uri.password.nil? || uri.password.empty?
|
257
|
+
end
|
258
|
+
warn "The array config given has been assumed to mean: #{redacted_config}"
|
259
|
+
parsed_config
|
260
|
+
end
|
261
|
+
rescue URI::Error => e
|
262
|
+
warn "#{self.class.name}: unable to parse proxy_config. Detail: #{e.class}: #{e.message}"
|
263
|
+
end
|
227
264
|
end
|
228
265
|
end
|
data/lib/libhoney/response.rb
CHANGED
@@ -1,7 +1,15 @@
|
|
1
|
-
require 'http'
|
1
|
+
require 'http/response/status'
|
2
2
|
|
3
3
|
module Libhoney
|
4
4
|
class Response
|
5
|
+
# The response status from HTTP calls to a Honeycomb API endpoint.
|
6
|
+
#
|
7
|
+
# For most of the life of this client, this response object has been
|
8
|
+
# a pass-through to the underlying HTTP library's response object.
|
9
|
+
# This class in the Libhoney namespace now owns the interface for
|
10
|
+
# API responses.
|
11
|
+
class Status < HTTP::Response::Status; end
|
12
|
+
|
5
13
|
attr_accessor :duration, :status_code, :metadata, :error
|
6
14
|
|
7
15
|
def initialize(duration: 0,
|
@@ -9,7 +17,7 @@ module Libhoney
|
|
9
17
|
metadata: nil,
|
10
18
|
error: nil)
|
11
19
|
@duration = duration
|
12
|
-
@status_code =
|
20
|
+
@status_code = Status.new(status_code)
|
13
21
|
@metadata = metadata
|
14
22
|
@error = error
|
15
23
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'addressable/uri'
|
2
|
+
require 'excon'
|
1
3
|
require 'json'
|
2
4
|
require 'timeout'
|
3
5
|
require 'libhoney/response'
|
@@ -93,7 +95,7 @@ module Libhoney
|
|
93
95
|
}
|
94
96
|
|
95
97
|
response = http.post(
|
96
|
-
"/1/batch/#{Addressable::URI.escape(dataset)}",
|
98
|
+
path: "/1/batch/#{Addressable::URI.escape(dataset)}",
|
97
99
|
body: body,
|
98
100
|
headers: headers
|
99
101
|
)
|
@@ -103,6 +105,8 @@ module Libhoney
|
|
103
105
|
# because this is effectively the top-level exception handler for the
|
104
106
|
# sender threads, and we don't want those threads to die (leaving
|
105
107
|
# nothing consuming the queue).
|
108
|
+
warn "#{self.class.name}: 💥 " + e.message if %w[debug trace].include?(ENV['LOG_LEVEL'])
|
109
|
+
warn e.backtrace.join("\n").to_s if ['trace'].include?(ENV['LOG_LEVEL'])
|
106
110
|
begin
|
107
111
|
batch.each do |event|
|
108
112
|
# nil events in the batch should already have had an error
|
@@ -187,7 +191,7 @@ module Libhoney
|
|
187
191
|
|
188
192
|
def process_response(http_response, before, batch)
|
189
193
|
index = 0
|
190
|
-
|
194
|
+
JSON.parse(http_response.body).each do |event|
|
191
195
|
index += 1 while batch[index].nil? && index < batch.size
|
192
196
|
break unless (batched_event = batch[index])
|
193
197
|
|
@@ -256,14 +260,19 @@ module Libhoney
|
|
256
260
|
|
257
261
|
def build_http_clients
|
258
262
|
Hash.new do |h, api_host|
|
259
|
-
client =
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
263
|
+
client = ::Excon.new(
|
264
|
+
api_host,
|
265
|
+
persistent: true,
|
266
|
+
read_timeout: @send_timeout,
|
267
|
+
write_timeout: @send_timeout,
|
268
|
+
connect_timeout: @send_timeout,
|
269
|
+
proxy: @proxy_config,
|
270
|
+
headers: {
|
271
|
+
'User-Agent' => @user_agent,
|
272
|
+
'Content-Type' => 'application/json'
|
273
|
+
}
|
274
|
+
)
|
275
|
+
|
267
276
|
h[api_host] = client
|
268
277
|
end
|
269
278
|
end
|
data/lib/libhoney/version.rb
CHANGED
data/libhoney.gemspec
CHANGED
@@ -34,5 +34,6 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_development_dependency 'yard'
|
35
35
|
spec.add_development_dependency 'yardstick', '~> 0.9'
|
36
36
|
spec.add_dependency 'addressable', '~> 2.0'
|
37
|
+
spec.add_dependency 'excon'
|
37
38
|
spec.add_dependency 'http', '>= 2.0', '< 5.0'
|
38
39
|
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.
|
4
|
+
version: 1.18.0
|
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: 2021-01-
|
11
|
+
date: 2021-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bump
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '2.0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: excon
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: http
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|