# Copyright (c) 2013 AppNeta # All rights reserved. module Oboe_metal class Event def self.metadataString(evt) evt.metadataString() end end class Context class << self attr_accessor :layer_op def log(layer, label, options = {}, with_backtrace = true) Oboe.logger.debug "HerokuMetal log: layer: #{layer}, label: #{label}, options: #{options}, with_backtrace: #{with_backtrace.to_s}" evt = Oboe::Context.createEvent() evt.addInfo("Layer", layer.to_s) evt.addInfo("Label", label.to_s) options.each_pair do |k, v| evt.addInfo(k.to_s, v.to_s) end evt.addInfo("Backtrace", Oboe::API.backtrace) if with_backtrace Oboe.reporter.sendReport(evt) end def tracing_layer_op?(operation) if operation.is_a?(Array) return operation.include?(@layer_op) else return @layer_op == operation end end end end class Reporter def self.sendReport(evt) Oboe.reporter.sendReport(evt) end end end module Oboe include Oboe_metal class << self attr_accessor :reporter def always? Oboe::Config[:tracing_mode].to_s == "always" end def continue? Oboe::Context.isValid and not Oboe.never? end def never? Oboe::Config[:tracing_mode].to_s == "never" end def now? Oboe::Context.isValid and not Oboe.never? end def passthrough? ["always", "through"].include?(Oboe::Config[:tracing_mode]) end def sample? Oboe::Context.sampleRequest('', '', '') end def start? not Oboe::Context.isValid and Oboe.always? end def through? Oboe::Config[:tracing_mode] == "through" end def tracing? Oboe::Context.isValid and not Oboe.never? end # Disconnect/Reconnect wrappers used for forking webservers # such as Unicorn or Passenger # def disconnect! ::Oboe::Context.disconnect(::Oboe.reporter) end def reconnect! ::Oboe::Context.reconnect(::Oboe.reporter) end end end begin Oboe_metal::Context.init() # The Oboe Reporter is configured via Heroku config variables. Oboe.reporter = Oboe::Reporter.new(nil, nil) rescue Exception => e $stderr.puts e.message raise end