Module: OboeBase

Extended by:
Oboe::ThreadLocal
Included in:
Oboe
Defined in:
lib/oboe/base.rb

Overview

This module is the base module for the various implementations of Oboe reporting. Current variations as of 2014-09-10 are a c-extension, JRuby (using TraceView Java instrumentation) and a Heroku c-extension (with embedded tracelyzer)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Oboe::ThreadLocal

thread_local

Instance Attribute Details

#loadedObject

Returns the value of attribute loaded.



33
34
35
# File 'lib/oboe/base.rb', line 33

def loaded
  @loaded
end

#reporterObject

Returns the value of attribute reporter.



32
33
34
# File 'lib/oboe/base.rb', line 32

def reporter
  @reporter
end

Class Method Details

.extended(cls) ⇒ Object

extended

Invoked when this module is extended. e.g. extend OboeBase



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/oboe/base.rb', line 70

def self.extended(cls)
  cls.loaded = true

  # This gives us pretty accessors with questions marks at the end
  # e.g. is_continued_trace --> is_continued_trace?
  Oboe.methods.select{ |m| m =~ /^is_|^has_/ }.each do |c|
    unless c =~ /\?$|=$/
      # Oboe.logger.debug "aliasing #{c}? to #{c}"
      alias_method "#{c}?", c
    end
  end
end

Instance Method Details

#always?Boolean

Returns true if the tracing_mode is set to always. False otherwise

Returns:

  • (Boolean)


135
136
137
# File 'lib/oboe/base.rb', line 135

def always?
  Oboe::Config[:tracing_mode].to_s == 'always'
end

#forking_webserver?Boolean

Determines if we are running under a forking webserver

Returns:

  • (Boolean)


185
186
187
# File 'lib/oboe/base.rb', line 185

def forking_webserver?
  (defined?(::Unicorn) && ($PROGRAM_NAME =~ /unicorn/i)) ? true : false
end

#framework?Boolean

Indicates whether a supported framework is in use or not

Returns:

  • (Boolean)


193
194
195
# File 'lib/oboe/base.rb', line 193

def framework?
  defined?(::Rails) or defined?(::Sinatra) or defined?(::Padrino) or defined?(::Grape)
end

#heroku?Boolean

Returns:

  • (Boolean)


178
179
180
# File 'lib/oboe/base.rb', line 178

def heroku?
  ENV.key?('TRACEVIEW_URL')
end

#log(_layer, _label, _options = {}) ⇒ Object



173
174
175
176
# File 'lib/oboe/base.rb', line 173

def log(layer, label, options = {})
  # WARN: Oboe.log will be deprecated in a future release.  Please use Oboe::API.log instead.
  Oboe::API.log(layer, label, options)
end

#never?Boolean

Returns true if the tracing_mode is set to never. False otherwise

Returns:

  • (Boolean)


143
144
145
# File 'lib/oboe/base.rb', line 143

def never?
  Oboe::Config[:tracing_mode].to_s == 'never'
end

#passthrough?Boolean

Returns true if the tracing_mode is set to always or through. False otherwise

Returns:

  • (Boolean)


151
152
153
# File 'lib/oboe/base.rb', line 151

def passthrough?
  %w(always through).include?(Oboe::Config[:tracing_mode])
end

#pickup_context?(xtrace) ⇒ Boolean

pickup_context

Determines whether we should pickup context from an incoming X-Trace request header. The answer is generally yes but there are cases in JRuby under Tomcat (or Glassfish etc.) where tracing may have been already started by the Java instrumentation (Joboe) in which case we don’t want to do this.

Returns:

  • (Boolean)


93
94
95
96
97
98
99
100
101
# File 'lib/oboe/base.rb', line 93

def pickup_context?(xtrace)
  return false unless Oboe::XTrace.valid?(xtrace)

  if defined?(JRUBY_VERSION) && Oboe.tracing?
    return false
  else
    return true
  end
end

#sample?(_opts = {}) ⇒ Boolean

These methods should be implemented by the descendants (Oboe_metal, Oboe_metal (JRuby), Heroku_metal)

Returns:

  • (Boolean)


201
202
203
# File 'lib/oboe/base.rb', line 201

def sample?(_opts = {})
  fail 'sample? should be implemented by metal layer.'
end

#set_sample_rate(_rate) ⇒ Object



213
214
215
# File 'lib/oboe/base.rb', line 213

def set_sample_rate(_rate)
  fail 'set_sample_rate should be implemented by metal layer.'
end

#set_tracing_mode(_mode) ⇒ Object



209
210
211
# File 'lib/oboe/base.rb', line 209

def set_tracing_mode(_mode)
  fail 'set_tracing_mode should be implemented by metal layer.'
end

#through?Boolean

Returns true if the tracing_mode is set to through. False otherwise

Returns:

  • (Boolean)


159
160
161
# File 'lib/oboe/base.rb', line 159

def through?
  Oboe::Config[:tracing_mode] == 'through'
end

#tracing?Boolean

Returns true if we are currently tracing a request False otherwise

Returns:

  • (Boolean)


167
168
169
170
171
# File 'lib/oboe/base.rb', line 167

def tracing?
  return false unless Oboe.loaded

  Oboe::Context.isValid && !Oboe.never?
end

#tracing_layer?(layer) ⇒ Boolean

tracing_layer?

Queries the thread local variable about the current layer being traced. This is used in cases of recursive operation tracing or one instrumented operation calling another.

Returns:

  • (Boolean)


110
111
112
# File 'lib/oboe/base.rb', line 110

def tracing_layer?(layer)
  return Oboe.layer == layer
end

#tracing_layer_op?(operation) ⇒ Boolean

tracing_layer_op?

Queries the thread local variable about the current operation being traced. This is used in cases of recursive operation tracing or one instrumented operation calling another.

In such cases, we only want to trace the outermost operation.

Returns:

  • (Boolean)


123
124
125
126
127
128
129
# File 'lib/oboe/base.rb', line 123

def tracing_layer_op?(operation)
  if operation.is_a?(Array)
    return operation.include?(Oboe.layer_op)
  else
    return Oboe.layer_op == operation
  end
end