module Sequel::Extensions::Honeycomb
Attributes
builder[R]
client[RW]
logger[RW]
Public Class Methods
included(klazz)
click to toggle source
# File lib/sequel/extensions/honeycomb.rb, line 9 def included(klazz) @logger ||= ::Honeycomb.logger if defined?(::Honeycomb.logger) if @client debug "initialized with #{@client.class.name} explicitly provided" elsif defined?(::Honeycomb.client) debug "initialized with #{::Honeycomb.client.class.name} from honeycomb-beeline" @client = ::Honeycomb.client else raise "Please set #{self.name}.client before using this extension" end @builder ||= @client.builder.add( 'meta.package' => 'sequel', 'meta.package_version' => Sequel::VERSION, 'type' => 'db', ) end
Private Class Methods
debug(msg)
click to toggle source
# File lib/sequel/extensions/honeycomb.rb, line 29 def debug(msg) @logger.debug("#{self.name}: #{msg}") if @logger end
Public Instance Methods
builder()
click to toggle source
# File lib/sequel/extensions/honeycomb.rb, line 34 def builder Sequel::Extensions::Honeycomb.builder end
execute(sql, opts=OPTS, &block)
click to toggle source
Calls superclass method
# File lib/sequel/extensions/honeycomb.rb, line 38 def execute(sql, opts=OPTS, &block) event = builder.event event.add_field 'db.table', first_source_table.to_s rescue nil event.add_field 'db.sql', sql event.add_field 'name', query_name(sql) start = Time.now with_tracing_if_available(event) do super end rescue Exception => e if event event.add_field 'db.error', e.class.name event.add_field 'db.error_detail', e.message end raise ensure if start && event finish = Time.now duration = finish - start event.add_field 'duration_ms', duration * 1000 event.send end end
Private Instance Methods
query_name(sql)
click to toggle source
# File lib/sequel/extensions/honeycomb.rb, line 64 def query_name(sql) sql.sub(/\s+.*/, '').upcase end
with_tracing_if_available(event) { || ... }
click to toggle source
# File lib/sequel/extensions/honeycomb.rb, line 68 def with_tracing_if_available(event) # return if we are not using the ruby beeline return yield unless defined?(::Honeycomb) # beeline version <= 0.5.0 if ::Honeycomb.respond_to? :trace_id trace_id = ::Honeycomb.trace_id event.add_field 'trace.trace_id', trace_id if trace_id span_id = SecureRandom.uuid event.add_field 'trace.span_id', span_id ::Honeycomb.with_span_id(span_id) do |parent_span_id| event.add_field 'trace.parent_id', parent_span_id yield end # beeline version > 0.5.0 elsif ::Honeycomb.respond_to? :span_for_existing_event ::Honeycomb.span_for_existing_event(event, name: nil, type: 'db') do yield end # fallback if we don't detect any known beeline tracing methods else yield end end