Module: BaselineRedRpm

Defined in:
lib/baseline_red_rpm.rb,
lib/baseline_red_rpm/utils.rb,
lib/baseline_red_rpm/logger.rb,
lib/baseline_red_rpm/tracer.rb,
lib/baseline_red_rpm/railtie.rb,
lib/baseline_red_rpm/backtrace.rb,
lib/baseline_red_rpm/introspector.rb,
lib/baseline_red_rpm/tracing/span.rb,
lib/baseline_red_rpm/configuration.rb,
lib/baseline_red_rpm/tracing/buffer.rb,
lib/baseline_red_rpm/tracing/tracer.rb,
lib/baseline_red_rpm/instrumentation.rb,
lib/baseline_red_rpm/tracing/carrier.rb,
lib/baseline_red_rpm/instruments/rack.rb,
lib/baseline_red_rpm/instruments/rack.rb,
lib/baseline_red_rpm/instruments/roda.rb,
lib/baseline_red_rpm/tracing/endpoint.rb,
lib/baseline_red_rpm/tracing/trace_id.rb,
lib/baseline_red_rpm/instruments/grape.rb,
lib/baseline_red_rpm/instruments/redis.rb,
lib/baseline_red_rpm/tracing/collector.rb,
lib/baseline_red_rpm/instruments/sequel.rb,
lib/baseline_red_rpm/instruments/faraday.rb,
lib/baseline_red_rpm/instruments/sidekiq.rb,
lib/baseline_red_rpm/instruments/sinatra.rb,
lib/baseline_red_rpm/instruments/typhoeus.rb,
lib/baseline_red_rpm/tracing/managed_span.rb,
lib/baseline_red_rpm/tracing/span_context.rb,
lib/baseline_red_rpm/reporters/json_client.rb,
lib/baseline_red_rpm/reporters/null_client.rb,
lib/baseline_red_rpm/tracing/managed_tracer.rb,
lib/baseline_red_rpm/instruments/active_record.rb,
lib/baseline_red_rpm/tracing/thread_span_stack.rb,
lib/baseline_red_rpm/instruments/emque_consuming.rb,
lib/baseline_red_rpm/instruments/action_controller.rb,
lib/baseline_red_rpm/instruments/activerecord_import.rb,
lib/baseline_red_rpm/instruments/active_record/adapters/mysql2.rb,
lib/baseline_red_rpm/instruments/active_record/adapters/sqlite3.rb,
lib/baseline_red_rpm/instruments/active_record/adapters/postgresql.rb

Defined Under Namespace

Modules: Instruments, Reporters, Tracing, Utils Classes: Backtrace, Configuration, Instrumentation, Introspector, Logger, Railtie, SidekiqClient, SidekiqServer, Tracer

Constant Summary collapse

TRACE_CONTEXT_KEY =
'BaselineRed-Trace-Context'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configObject



38
39
40
# File 'lib/baseline_red_rpm.rb', line 38

def config
  @config ||= Configuration.new
end

.loggerObject

Returns the value of attribute logger.



7
8
9
# File 'lib/baseline_red_rpm/logger.rb', line 7

def logger
  @logger
end

Class Method Details

.collectorObject



62
63
64
# File 'lib/baseline_red_rpm.rb', line 62

def collector
  @collector ||= BaselineRedRpm::Tracing::Collector.new(endpoint)
end

.configure {|config| ... } ⇒ Object

Yields:



42
43
44
# File 'lib/baseline_red_rpm.rb', line 42

def configure
  yield(config)
end

.disable_agent?Boolean

Returns:

  • (Boolean)


147
148
149
150
151
152
153
154
155
# File 'lib/baseline_red_rpm.rb', line 147

def disable_agent?
  if config.agent_disabled
    true
  elsif Introspector.agentable?
    false
  else
    true
  end
end

.endpointObject



58
59
60
# File 'lib/baseline_red_rpm.rb', line 58

def endpoint
  @endpoint ||= BaselineRedRpm::Tracing::Endpoint.local_endpoint(config.application_name)
end

.floor_time(t, sec = 1) ⇒ Object



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

def floor_time(t, sec = 1)
  Time.at((t.to_f / sec).floor * sec)
end

.hostObject



123
124
125
# File 'lib/baseline_red_rpm.rb', line 123

def host
  @host ||= Socket.gethostname
end

.loadObject



46
47
48
49
50
51
52
# File 'lib/baseline_red_rpm.rb', line 46

def load
  #Oj.mimic_JSON
  unless disable_agent?
    BaselineRedRpm::Instrumentation.load
    BaselineRedRpm.tracing_on
  end
end

.mutexObject



54
55
56
# File 'lib/baseline_red_rpm.rb', line 54

def mutex
  @mutex ||= Mutex.new
end

.nowObject



157
158
159
160
161
162
163
# File 'lib/baseline_red_rpm.rb', line 157

def now
  if defined?(Process::CLOCK_REALTIME)
    Process.clock_gettime(Process::CLOCK_REALTIME)
  else
    Time.now
  end
end

.round_time(t, sec = 1) ⇒ Object



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/baseline_red_rpm.rb', line 127

def round_time(t, sec = 1)
  t = Time.parse(t.to_s)

  down = t - (t.to_i % sec)
  up = down + sec

  difference_down = t - down
  difference_up = up - t

  if (difference_down < difference_up)
    return down
  else
    return up
  end
end

.senderObject



70
71
72
73
74
75
76
77
78
# File 'lib/baseline_red_rpm.rb', line 70

def sender
  @sender ||= BaselineRedRpm::Reporters::JsonClient.new(
    url: url,
    collector: collector,
    flush_interval: config.flush_interval
  )
  @sender.sample_memory = config.sample_memory
  @sender
end

.tracerObject



80
81
82
83
84
85
86
87
88
89
# File 'lib/baseline_red_rpm.rb', line 80

def tracer
  @tracer ||= BaselineRedRpm::Tracing::ManagedTracer.new(
    BaselineRedRpm::Tracing::Tracer.build(
      :service_name => config.application_name,
      :sender => sender,
      :collector => collector
    ),
    BaselineRedRpm::Tracing::ThreadSpanStack.new
  )
end

.tracing?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/baseline_red_rpm.rb', line 109

def tracing?
  !!@tracing
end

.tracing_offObject



102
103
104
105
106
107
# File 'lib/baseline_red_rpm.rb', line 102

def tracing_off
  mutex.synchronize do
    BaselineRedRpm.logger.debug "Disabling tracing."
    @tracing = false
  end
end

.tracing_onObject



91
92
93
94
95
96
97
98
99
100
# File 'lib/baseline_red_rpm.rb', line 91

def tracing_on
  if @without_tracing_enabled
    BaselineRedRpm.logger.debug "Not turning tracing on due to without tracing mode."
    return
  end
  mutex.synchronize do
    BaselineRedRpm.logger.debug "Enabling tracing."
    @tracing = true
  end
end

.urlObject



66
67
68
# File 'lib/baseline_red_rpm.rb', line 66

def url
  @url ||= "#{config.host}/api/listener/3/#{config.license_key}"
end

.without_tracingObject



113
114
115
116
117
118
119
120
121
# File 'lib/baseline_red_rpm.rb', line 113

def without_tracing
  @previously_tracing = BaselineRedRpm.tracing?
  @without_tracing_enabled = true
  BaselineRedRpm.tracing_off
  yield if block_given?
  @without_tracing_enabled = false
ensure
  BaselineRedRpm.tracing_on if @previously_tracing
end