libhoney 1.11.0 → 1.12.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/README.md +1 -3
- data/example/factorial.rb +31 -37
- data/lib/libhoney/client.rb +34 -25
- data/lib/libhoney/event.rb +39 -6
- data/lib/libhoney/transmission.rb +3 -3
- data/lib/libhoney/version.rb +1 -1
- data/libhoney.gemspec +2 -2
- metadata +9 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aaff0cc763c16bc795c21403f744d3a5e6773d2503c338d9f161fc1d0ef01341
|
4
|
+
data.tar.gz: e4f44b656d422207f25441c867519118f1f4557718c0c12e25f198e4871052b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17701619551ad22950ffe421c9a98a4546e00ea8447ee52b22c19d21af9adc342951eed7ee0046c0ca8459d63ffc90ff64cb3759e003971681bb3b567debd9fe
|
7
|
+
data.tar.gz: c701b48807d76fcef732eaa47e7059ef71cfeaa40693bc039b094968b12407f26d9f6647d3f204a4c2feeed551ca07840c9a1d0850b8ab755eeeb0fdff3675b7
|
data/README.md
CHANGED
@@ -7,9 +7,7 @@ Requires Ruby 2.2 or greater.
|
|
7
7
|
- [Usage and Examples](https://docs.honeycomb.io/sdk/ruby/)
|
8
8
|
- [API Reference](https://www.rubydoc.info/gems/libhoney)
|
9
9
|
|
10
|
-
For tracing support and automatic instrumentation of Sinatra, Rack, ActiveRecord, and other frameworks, check out our [Beeline for Ruby](https://github.com/honeycombio/beeline-ruby).
|
11
|
-
|
12
|
-
For automatic instrumentation of Ruby on Rails, check out our [Rails integration](https://github.com/honeycombio/honeycomb-rails).
|
10
|
+
For tracing support and automatic instrumentation of Rails, Sinatra, Rack, ActiveRecord, and other frameworks, check out our [Beeline for Ruby](https://github.com/honeycombio/beeline-ruby).
|
13
11
|
|
14
12
|
## Contributions
|
15
13
|
|
data/example/factorial.rb
CHANGED
@@ -30,49 +30,43 @@ def run_factorial(low, high, libh_builder)
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def read_responses(response_queue)
|
34
|
-
loop do
|
35
|
-
response = response_queue.pop
|
36
|
-
break if response.nil?
|
37
|
-
|
38
|
-
puts "Sent: Event with metadata #{response.metadata} in #{response.duration * 1000}ms."
|
39
|
-
puts "Got: Response code #{response.status_code}"
|
40
|
-
puts
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
33
|
libhoney = Libhoney::Client.new(writekey: writekey,
|
45
|
-
dataset:
|
46
|
-
max_concurrent_batches: 1)
|
47
|
-
|
48
|
-
responses = libhoney.responses
|
34
|
+
dataset: dataset)
|
49
35
|
|
50
36
|
Thread.new do
|
51
37
|
begin
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
event.add_field('start_time', Time.now.iso8601(3))
|
61
|
-
event.with_timer 'run_fact_low_dur_ms' do
|
62
|
-
run_factorial(1, 20, libhoney.builder(range: 'low'))
|
63
|
-
end
|
64
|
-
event.with_timer 'run_fact_high_dur_ms' do
|
65
|
-
run_factorial(31, 40, libhoney.builder(range: 'high'))
|
38
|
+
loop do
|
39
|
+
response = libhoney.responses.pop
|
40
|
+
break if response.nil?
|
41
|
+
|
42
|
+
puts "Sent: Event with metadata #{response.metadata} in #{response.duration * 1000}ms."
|
43
|
+
puts "Got: Response code #{response.status_code}"
|
44
|
+
puts " #{response.error.class}: #{response.error}" if response.error
|
45
|
+
puts
|
66
46
|
end
|
67
|
-
event.add_field('end_time', Time.now.iso8601(3))
|
68
|
-
# sends an event with "version", "num_threads", "start_time", "end_time",
|
69
|
-
# "run_fact_low_dur_ms", "run_fact_high_dur_ms"
|
70
|
-
event.send
|
71
|
-
|
72
|
-
libhoney.close
|
73
47
|
rescue StandardError => e
|
74
|
-
puts e
|
48
|
+
puts "#{e.class} in response reader thread: #{e}"
|
75
49
|
end
|
76
50
|
end
|
77
51
|
|
78
|
-
|
52
|
+
# attach fields to top-level instance
|
53
|
+
libhoney.add_field('version', '3.4.5')
|
54
|
+
|
55
|
+
a_proc = proc { Thread.list.select { |thread| thread.status == 'run' }.count }
|
56
|
+
libhoney.add_dynamic_field('num_threads', a_proc)
|
57
|
+
|
58
|
+
event = libhoney.event
|
59
|
+
event.metadata = { fn: 'work_thread' }
|
60
|
+
event.add_field('start_time', Time.now.iso8601(3))
|
61
|
+
event.with_timer 'run_fact_low_dur_ms' do
|
62
|
+
run_factorial(1, 20, libhoney.builder(range: 'low'))
|
63
|
+
end
|
64
|
+
event.with_timer 'run_fact_high_dur_ms' do
|
65
|
+
run_factorial(31, 40, libhoney.builder(range: 'high'))
|
66
|
+
end
|
67
|
+
event.add_field('end_time', Time.now.iso8601(3))
|
68
|
+
# sends an event with "version", "num_threads", "start_time", "end_time",
|
69
|
+
# "run_fact_low_dur_ms", "run_fact_high_dur_ms"
|
70
|
+
event.send
|
71
|
+
|
72
|
+
libhoney.close
|
data/lib/libhoney/client.rb
CHANGED
@@ -29,38 +29,47 @@ end
|
|
29
29
|
module Libhoney
|
30
30
|
##
|
31
31
|
# This is a library to allow you to send events to Honeycomb from within your
|
32
|
-
#
|
32
|
+
# Ruby application.
|
33
33
|
#
|
34
|
-
#
|
34
|
+
# @example Send a simple event
|
35
35
|
# require 'libhoney'
|
36
|
-
# honey = Libhoney.new(writekey, dataset,
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
36
|
+
# honey = Libhoney.new(writekey, dataset, sample_rate)
|
37
|
+
#
|
38
|
+
# evt = honey.event
|
39
|
+
# evt.add(pglatency: 100)
|
40
|
+
# honey.send(evt)
|
41
|
+
#
|
42
|
+
# # repeat creating and sending events until your program is finished
|
43
|
+
#
|
41
44
|
# honey.close
|
42
45
|
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
# * *dataset* is the dataset to write into (required)
|
46
|
-
# * *sample_rate* is how many samples you want to keep. IE: 1 means you want 1 out of 1 samples kept, or all of them. 10 means you want 1 out of 10 samples kept. And so on.
|
47
|
-
# * *url* is the url to connect to Honeycomb
|
48
|
-
# * *num_workers* is the number of threads working on the queue of events you are generating
|
46
|
+
# @example Override the default timestamp on an event
|
47
|
+
# one_hour_ago = Time.now - 3600
|
49
48
|
#
|
50
|
-
#
|
49
|
+
# evt = libhoney.event
|
50
|
+
# evt.add_fields(useful_fields)
|
51
|
+
# evt.timestamp = one_hour_ago
|
52
|
+
# evt.send
|
51
53
|
#
|
52
54
|
class Client
|
53
55
|
API_HOST = 'https://api.honeycomb.io/'.freeze
|
54
56
|
|
55
57
|
# Instantiates libhoney and prepares it to send events to Honeycomb.
|
56
58
|
#
|
57
|
-
# @param writekey [String] the
|
58
|
-
#
|
59
|
-
# @param
|
60
|
-
# @param
|
59
|
+
# @param writekey [String] the Honeycomb API key with which to authenticate
|
60
|
+
# this request (required)
|
61
|
+
# @param dataset [String] the Honeycomb dataset into which to send events (required)
|
62
|
+
# @param sample_rate [Fixnum] cause +libhoney+ to send 1 out of +sample_rate+ events.
|
63
|
+
# overrides the libhoney instance's value. (e.g. setting this to +10+ will result in
|
64
|
+
# a 1-in-10 chance of it being successfully emitted to Honeycomb, and the
|
65
|
+
# Honeycomb query engine will interpret it as representative of 10 events)
|
66
|
+
# @param api_host [String] defaults to +API_HOST+, override to change the
|
67
|
+
# destination for these Honeycomb events.
|
61
68
|
# @param transmission [Object] transport used to actually send events. If nil (the default), will be lazily initialized with a {TransmissionClient} on first event send.
|
62
69
|
# @param block_on_send [Boolean] if more than pending_work_capacity events are written, block sending further events
|
63
70
|
# @param block_on_responses [Boolean] if true, block if there is no thread reading from the response queue
|
71
|
+
# @param pending_work_capacity [Fixnum] defaults to 1000. If the queue of
|
72
|
+
# pending events exceeds 1000, this client will start dropping events.
|
64
73
|
def initialize(writekey: nil,
|
65
74
|
dataset: nil,
|
66
75
|
sample_rate: 1,
|
@@ -205,14 +214,14 @@ module Libhoney
|
|
205
214
|
def send_event(event)
|
206
215
|
@lock.synchronize do
|
207
216
|
transmission_client_params = {
|
208
|
-
max_batch_size:
|
209
|
-
send_frequency:
|
217
|
+
max_batch_size: @max_batch_size,
|
218
|
+
send_frequency: @send_frequency,
|
210
219
|
max_concurrent_batches: @max_concurrent_batches,
|
211
|
-
pending_work_capacity:
|
212
|
-
responses:
|
213
|
-
block_on_send:
|
214
|
-
block_on_responses:
|
215
|
-
user_agent_addition:
|
220
|
+
pending_work_capacity: @pending_work_capacity,
|
221
|
+
responses: @responses,
|
222
|
+
block_on_send: @block_on_send,
|
223
|
+
block_on_responses: @block_on_responses,
|
224
|
+
user_agent_addition: @user_agent_addition
|
216
225
|
}
|
217
226
|
|
218
227
|
@transmission ||= TransmissionClient.new(transmission_client_params)
|
data/lib/libhoney/event.rb
CHANGED
@@ -1,11 +1,44 @@
|
|
1
1
|
module Libhoney
|
2
|
-
##
|
3
2
|
# This is the event object that you can fill up with data.
|
3
|
+
#
|
4
|
+
# @example Override the default timestamp on an event
|
5
|
+
# evt = libhoney.event
|
6
|
+
# evt.add_fields(useful_fields)
|
7
|
+
# evt.timestamp = Time.now
|
8
|
+
# evt.send
|
9
|
+
#
|
4
10
|
class Event
|
5
|
-
|
6
|
-
|
11
|
+
# @return [String] the Honeycomb API key with which to authenticate this
|
12
|
+
# request
|
13
|
+
attr_accessor :writekey
|
7
14
|
|
8
|
-
# @return [
|
15
|
+
# @return [String] the Honeycomb dataset this event is destined for
|
16
|
+
# (defaults to the +Builder+'s +dataset+, which in turn defaults to the
|
17
|
+
# +Client+'s +dataset+)
|
18
|
+
attr_accessor :dataset
|
19
|
+
|
20
|
+
# @return [Fixnum] Set this attribute to indicate that it represents
|
21
|
+
# +sample_rate+ number of events (e.g. setting this to +10+ will result in
|
22
|
+
# a 1-in-10 chance of it being successfully emitted to Honeycomb, and the
|
23
|
+
# Honeycomb query engine will interpret it as representative of 10 events)
|
24
|
+
attr_accessor :sample_rate
|
25
|
+
|
26
|
+
# @return [String] Set this attribute in order to override the destination
|
27
|
+
# of these Honeycomb events (defaults to +Client::API_HOST+).
|
28
|
+
attr_accessor :api_host
|
29
|
+
|
30
|
+
# @return [Object] Set this attribute to any +Object+ you might need to
|
31
|
+
# identify this Event as it is returned to the responses queue (e.g. tag
|
32
|
+
# an Event with an internal ID in order to retry something specific on
|
33
|
+
# failure).
|
34
|
+
attr_accessor :metadata
|
35
|
+
|
36
|
+
# @return [Time] Set this attribute in order to override the timestamp
|
37
|
+
# associated with the event (defaults to the +Time.now+ at +Event+
|
38
|
+
# creation)
|
39
|
+
attr_accessor :timestamp
|
40
|
+
|
41
|
+
# @return [Hash<String=>any>] the fields added to this event
|
9
42
|
attr_reader :data
|
10
43
|
|
11
44
|
# @api private
|
@@ -71,7 +104,7 @@ module Libhoney
|
|
71
104
|
self
|
72
105
|
end
|
73
106
|
|
74
|
-
# sends this event to
|
107
|
+
# sends this event to Honeycomb
|
75
108
|
#
|
76
109
|
# @return [self] this event.
|
77
110
|
def send
|
@@ -84,7 +117,7 @@ module Libhoney
|
|
84
117
|
send_presampled
|
85
118
|
end
|
86
119
|
|
87
|
-
# sends a presampled event to
|
120
|
+
# sends a presampled event to Honeycomb
|
88
121
|
#
|
89
122
|
# @return [self] this event.
|
90
123
|
def send_presampled
|
@@ -48,7 +48,7 @@ module Libhoney
|
|
48
48
|
h[api_host] = HTTP.timeout(connect: @send_timeout, write: @send_timeout, read: @send_timeout)
|
49
49
|
.persistent(api_host)
|
50
50
|
.headers(
|
51
|
-
'User-Agent'
|
51
|
+
'User-Agent' => @user_agent,
|
52
52
|
'Content-Type' => 'application/json'
|
53
53
|
)
|
54
54
|
end
|
@@ -67,9 +67,9 @@ module Libhoney
|
|
67
67
|
resp = http.post(url,
|
68
68
|
json: event.data,
|
69
69
|
headers: {
|
70
|
-
'X-Honeycomb-Team'
|
70
|
+
'X-Honeycomb-Team' => event.writekey,
|
71
71
|
'X-Honeycomb-SampleRate' => event.sample_rate,
|
72
|
-
'X-Event-Time'
|
72
|
+
'X-Event-Time' => event.timestamp.iso8601(3)
|
73
73
|
})
|
74
74
|
|
75
75
|
# "You must consume response before sending next request via persistent connection"
|
data/lib/libhoney/version.rb
CHANGED
data/libhoney.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.required_ruby_version = '>= 2.2.0'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bump', '~> 0.5'
|
26
|
-
spec.add_development_dependency 'bundler'
|
26
|
+
spec.add_development_dependency 'bundler'
|
27
27
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
28
28
|
spec.add_development_dependency 'rake', '~> 12.3'
|
29
29
|
spec.add_development_dependency 'rubocop'
|
@@ -31,5 +31,5 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_development_dependency 'yard'
|
32
32
|
spec.add_development_dependency 'yardstick', '~> 0.9'
|
33
33
|
spec.add_dependency 'addressable', '~> 2.0'
|
34
|
-
spec.add_dependency 'http', '>= 2.0', '<
|
34
|
+
spec.add_dependency 'http', '>= 2.0', '< 5.0'
|
35
35
|
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.12.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:
|
11
|
+
date: 2019-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bump
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,7 +145,7 @@ dependencies:
|
|
145
145
|
version: '2.0'
|
146
146
|
- - "<"
|
147
147
|
- !ruby/object:Gem::Version
|
148
|
-
version: '
|
148
|
+
version: '5.0'
|
149
149
|
type: :runtime
|
150
150
|
prerelease: false
|
151
151
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -155,7 +155,7 @@ dependencies:
|
|
155
155
|
version: '2.0'
|
156
156
|
- - "<"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version: '
|
158
|
+
version: '5.0'
|
159
159
|
description: Ruby gem for sending data to Honeycomb
|
160
160
|
email: support@honeycomb.io
|
161
161
|
executables: []
|
@@ -206,8 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
206
|
- !ruby/object:Gem::Version
|
207
207
|
version: '0'
|
208
208
|
requirements: []
|
209
|
-
|
210
|
-
rubygems_version: 2.7.7
|
209
|
+
rubygems_version: 3.0.2
|
211
210
|
signing_key:
|
212
211
|
specification_version: 4
|
213
212
|
summary: send data to Honeycomb
|