Sha256: b34a955f401c85215db45455cb4d8788a71549fc32b7a5dca7dfad9686eb4810

Contents?: true

Size: 1.59 KB

Versions: 2

Compression:

Stored size: 1.59 KB

Contents

require 'honeycomb/beeline/version'

module Honeycomb
  USER_AGENT_SUFFIX = "#{Beeline::GEM_NAME}/#{Beeline::VERSION}"

  class << self
    attr_reader :client

    def init(writekey:, dataset:, logger: nil, without: [], **options)
      options = options.merge(writekey: writekey, dataset: dataset)
      @logger = logger
      @without = without
      options = {user_agent_addition: USER_AGENT_SUFFIX}.merge(options)
      @client = Libhoney::Client.new(options)

      after_init_hooks.each do |label, block|
        @logger.debug "Running hook '#{label}' after Honeycomb.init" if @logger
        run_hook(label, block)
      end
    end

    def after_init(label, &block)
      raise ArgumentError unless block_given?

      hook = if block.arity == 0
               ->(_) { block.call }
             elsif block.arity > 1
               raise ArgumentError, 'Honeycomb.after_init block should take 1 argument'
             else
               block
             end

      if @initialized
        @logger.debug "Running hook '#{label}' as Honeycomb already initialized" if @logger
        run_hook(label, hook)
      else
        after_init_hooks << [label, hook]
      end
    end

    private
    def after_init_hooks
      @after_init_hooks ||= []
    end

    def run_hook(label, block)
      if @without.include?(label)
        @logger.debug "Skipping hook '#{label}' due to opt-out" if @logger
      else
        block.call @client
      end
    rescue => e
      warn "Honeycomb.init hook '#{label}' raised #{e.class}: #{e}"
    end
  end

  after_init :log do
    @logger.info "Honeycomb inited" if @logger
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
honeycomb-beeline-0.0.2 lib/honeycomb/client.rb
honeycomb-beeline-0.0.1 lib/honeycomb/client.rb