Class: Libhoney::Client
- Inherits:
-
Object
- Object
- Libhoney::Client
- Extended by:
- Forwardable
- Defined in:
- lib/libhoney/client.rb
Overview
This is a library to allow you to send events to Honeycomb from within your Ruby application.
Direct Known Subclasses
Constant Summary collapse
- API_HOST =
'https://api.honeycomb.io/'.freeze
Instance Attribute Summary collapse
-
#block_on_responses ⇒ Object
readonly
Returns the value of attribute block_on_responses.
-
#block_on_send ⇒ Object
readonly
Returns the value of attribute block_on_send.
-
#max_batch_size ⇒ Object
readonly
Returns the value of attribute max_batch_size.
-
#max_concurrent_batches ⇒ Object
readonly
Returns the value of attribute max_concurrent_batches.
-
#pending_work_capacity ⇒ Object
readonly
Returns the value of attribute pending_work_capacity.
-
#responses ⇒ Object
readonly
Returns the value of attribute responses.
-
#send_frequency ⇒ Object
readonly
Returns the value of attribute send_frequency.
Instance Method Summary collapse
-
#add(data) ⇒ self
adds a group of field->values to the global Builder.
-
#add_dynamic_field(name, proc) ⇒ self
adds a single field->dynamic value function to the global Builder.
-
#add_field(name, val) ⇒ self
adds a single field->value mapping to the global Builder.
-
#close(drain = true) ⇒ Object
Nuke the queue and wait for inflight requests to complete before returning.
-
#initialize(writekey: nil, dataset: nil, sample_rate: 1, api_host: API_HOST, user_agent_addition: nil, transmission: nil, block_on_send: false, block_on_responses: false, max_batch_size: 50, send_frequency: 100, max_concurrent_batches: 10, pending_work_capacity: 1000, proxy_config: nil) ⇒ Client
constructor
Instantiates libhoney and prepares it to send events to Honeycomb.
- #send_dropped_response(event, msg) ⇒ Object private
-
#send_event(event) ⇒ Object
private
Enqueue an event to send.
- #send_now(data = {}) ⇒ self deprecated Deprecated.
- #should_drop(sample_rate) ⇒ Object private
Constructor Details
#initialize(writekey: nil, dataset: nil, sample_rate: 1, api_host: API_HOST, user_agent_addition: nil, transmission: nil, block_on_send: false, block_on_responses: false, max_batch_size: 50, send_frequency: 100, max_concurrent_batches: 10, pending_work_capacity: 1000, proxy_config: nil) ⇒ Client
Instantiates libhoney and prepares it to send events to Honeycomb.
rubocop:disable Metrics/ParameterLists
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/libhoney/client.rb', line 66 def initialize(writekey: nil, dataset: nil, sample_rate: 1, api_host: API_HOST, user_agent_addition: nil, transmission: nil, block_on_send: false, block_on_responses: false, max_batch_size: 50, send_frequency: 100, max_concurrent_batches: 10, pending_work_capacity: 1000, proxy_config: nil) # rubocop:enable Metrics/ParameterLists # check for insanity raise Exception, 'libhoney: max_concurrent_batches must be greater than 0' if max_concurrent_batches < 1 raise Exception, 'libhoney: sample rate must be greater than 0' if sample_rate < 1 unless Gem::Dependency.new('ruby', '>= 2.2').match?('ruby', RUBY_VERSION) raise Exception, 'libhoney: Ruby versions < 2.2 are not supported' end @builder = Builder.new(self, nil) @builder.writekey = writekey @builder.dataset = dataset @builder.sample_rate = sample_rate @builder.api_host = api_host @user_agent_addition = user_agent_addition @block_on_send = block_on_send @block_on_responses = block_on_responses @max_batch_size = max_batch_size @send_frequency = send_frequency @max_concurrent_batches = max_concurrent_batches @pending_work_capacity = pending_work_capacity @responses = SizedQueue.new(2 * @pending_work_capacity) @proxy_config = parse_proxy_config(proxy_config) @transmission = setup_transmission(transmission, writekey, dataset) end |
Instance Attribute Details
#block_on_responses ⇒ Object (readonly)
Returns the value of attribute block_on_responses.
108 109 110 |
# File 'lib/libhoney/client.rb', line 108 def block_on_responses @block_on_responses end |
#block_on_send ⇒ Object (readonly)
Returns the value of attribute block_on_send.
108 109 110 |
# File 'lib/libhoney/client.rb', line 108 def block_on_send @block_on_send end |
#max_batch_size ⇒ Object (readonly)
Returns the value of attribute max_batch_size.
108 109 110 |
# File 'lib/libhoney/client.rb', line 108 def max_batch_size @max_batch_size end |
#max_concurrent_batches ⇒ Object (readonly)
Returns the value of attribute max_concurrent_batches.
108 109 110 |
# File 'lib/libhoney/client.rb', line 108 def max_concurrent_batches @max_concurrent_batches end |
#pending_work_capacity ⇒ Object (readonly)
Returns the value of attribute pending_work_capacity.
108 109 110 |
# File 'lib/libhoney/client.rb', line 108 def pending_work_capacity @pending_work_capacity end |
#responses ⇒ Object (readonly)
Returns the value of attribute responses.
108 109 110 |
# File 'lib/libhoney/client.rb', line 108 def responses @responses end |
#send_frequency ⇒ Object (readonly)
Returns the value of attribute send_frequency.
108 109 110 |
# File 'lib/libhoney/client.rb', line 108 def send_frequency @send_frequency end |
Instance Method Details
#add(data) ⇒ self
adds a group of field->values to the global Builder.
132 133 134 135 |
# File 'lib/libhoney/client.rb', line 132 def add(data) @builder.add(data) self end |
#add_dynamic_field(name, proc) ⇒ self
adds a single field->dynamic value function to the global Builder.
156 157 158 159 |
# File 'lib/libhoney/client.rb', line 156 def add_dynamic_field(name, proc) @builder.add_dynamic_field(name, proc) self end |
#add_field(name, val) ⇒ self
adds a single field->value mapping to the global Builder.
144 145 146 147 |
# File 'lib/libhoney/client.rb', line 144 def add_field(name, val) @builder.add_field(name, val) self end |
#close(drain = true) ⇒ Object
Nuke the queue and wait for inflight requests to complete before returning. If you set drain=false, all queued requests will be dropped on the floor.
117 118 119 120 121 |
# File 'lib/libhoney/client.rb', line 117 def close(drain = true) return @transmission.close(drain) if @transmission 0 end |
#send_dropped_response(event, msg) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
197 198 199 200 201 202 203 204 205 |
# File 'lib/libhoney/client.rb', line 197 def send_dropped_response(event, msg) response = Response.new(error: msg, metadata: event.) begin @responses.enq(response, !@block_on_responses) rescue ThreadError # happens if the queue was full and block_on_responses = false. end end |
#send_event(event) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Enqueue an event to send. Sampling happens here, and we will create new threads to handle work as long as we haven’t gone over max_concurrent_batches and there are still events in the queue.
192 193 194 |
# File 'lib/libhoney/client.rb', line 192 def send_event(event) @transmission.add(event) end |
#send_now(data = {}) ⇒ self
Creates and sends an event, including all global builder fields/dyn_fields, as well as anything in the optional data parameter.
Equivalent to:
ev = builder.event
ev.add(data)
ev.send
May be removed in a future major release
/
180 181 182 183 |
# File 'lib/libhoney/client.rb', line 180 def send_now(data = {}) @builder.send_now(data) self end |
#should_drop(sample_rate) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
208 209 210 |
# File 'lib/libhoney/client.rb', line 208 def should_drop(sample_rate) rand(1..sample_rate) != 1 end |