Module: TraceView::Config

Defined in:
lib/traceview/config.rb

Overview

This module exposes a nested configuration hash that can be used to configure and/or modify the functionality of the traceview gem.

Use TraceView::Config.show to view the entire nested hash.

Constant Summary collapse

@@config =
{}
@@instrumentation =
[:action_controller, :action_view, :active_record,
:cassandra, :dalli, :em_http_request, :excon, :faraday,
:grape, :httpclient, :nethttp, :memcached, :memcache, :mongo,
:moped, :rack, :redis, :resque, :rest_client, :sequel,
:typhoeus]
@@http_clients =

Subgrouping of instrumentation

[:excon, :faraday, :httpclient, :nethttp, :rest_client, :typhoeus]

Class Method Summary collapse

Class Method Details

.[](key) ⇒ Object



171
172
173
# File 'lib/traceview/config.rb', line 171

def self.[](key)
  @@config[key.to_sym]
end

.[]=(key, value) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/traceview/config.rb', line 175

def self.[]=(key, value)
  @@config[key.to_sym] = value

  if key == :sampling_rate
    TraceView.logger.warn 'sampling_rate is not a supported setting for TraceView::Config.  ' \
                     'Please use :sample_rate.'

  elsif key == :sample_rate
    unless value.is_a?(Integer) || value.is_a?(Float)
      fail 'traceview :sample_rate must be a number between 1 and 1000000 (1m)'
    end

    # Validate :sample_rate value
    unless value.between?(1, 1e6)
      fail 'traceview :sample_rate must be between 1 and 1000000 (1m)'
    end

    # Assure value is an integer
    @@config[key.to_sym] = value.to_i
    TraceView.set_sample_rate(value) if TraceView.loaded

  elsif key == :include_url_query_params
    # Obey the global flag and update all of the per instrumentation
    # <tt>:log_args</tt> values.
    @@http_clients.each do |i|
      @@config[i][:log_args] = value
    end

  elsif key == :include_remote_url_params
    # Obey the global flag and update all of the per instrumentation
    # <tt>:log_args</tt> values.
    @@config[:rack][:log_args] = value
  end

  # Update liboboe if updating :tracing_mode
  if key == :tracing_mode
    TraceView.set_tracing_mode(value) if TraceView.loaded
  end
end

.initialize(_data = {}) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/traceview/config.rb', line 30

def self.initialize(_data = {})
  # Setup default instrumentation values
  @@instrumentation.each do |k|
    @@config[k] = {}
    @@config[k][:enabled] = true
    @@config[k][:collect_backtraces] = false
    @@config[k][:log_args] = true
  end

  # Beta instrumentation disabled by default
  TraceView::Config[:em_http_request][:enabled] = false

  # Set collect_backtraces defaults
  TraceView::Config[:action_controller][:collect_backtraces] = true
  TraceView::Config[:active_record][:collect_backtraces] = true
  TraceView::Config[:action_view][:collect_backtraces] = true
  TraceView::Config[:cassandra][:collect_backtraces] = true
  TraceView::Config[:dalli][:collect_backtraces] = false
  TraceView::Config[:em_http_request][:collect_backtraces] = false
  TraceView::Config[:excon][:collect_backtraces] = true
  TraceView::Config[:faraday][:collect_backtraces] = false
  TraceView::Config[:grape][:collect_backtraces] = true
  TraceView::Config[:httpclient][:collect_backtraces] = true
  TraceView::Config[:memcache][:collect_backtraces] = false
  TraceView::Config[:memcached][:collect_backtraces] = false
  TraceView::Config[:mongo][:collect_backtraces] = true
  TraceView::Config[:moped][:collect_backtraces] = true
  TraceView::Config[:nethttp][:collect_backtraces] = true
  TraceView::Config[:redis][:collect_backtraces] = false
  TraceView::Config[:resque][:collect_backtraces] = true
  TraceView::Config[:rest_client][:collect_backtraces] = false
  TraceView::Config[:sequel][:collect_backtraces] = true
  TraceView::Config[:typhoeus][:collect_backtraces] = false

  # Special instrument specific flags
  #
  # :link_workers - associates enqueue operations with the jobs they queue by piggybacking
  #                 an additional argument that is stripped prior to job proecessing
  #                 !!Note: Make sure both the queue side and the Resque workers are instrumented
  #                 or jobs will fail
  #                 (Default: false)
  @@config[:resque][:link_workers] = false

  # Setup an empty host blacklist (see: TraceView::API::Util.blacklisted?)
  @@config[:blacklist] = []

  # Access Key is empty until loaded from config file or env var
  @@config[:access_key] = ''

  # Logging of outgoing HTTP query args
  #
  # This optionally disables the logging of query args of outgoing
  # HTTP clients such as Net::HTTP, excon, typhoeus and others.
  #
  # This flag is global to all HTTP client instrumentation.
  #
  # To configure this on a per instrumentation basis, set this
  # option to true and instead disable the instrumenstation specific
  # option <tt>log_args</tt>:
  #
  #   TraceView::Config[:nethttp][:log_args] = false
  #   TraceView::Config[:excon][:log_args] = false
  #   TraceView::Config[:typhoeus][:log_args] = true
  #
  @@config[:include_url_query_params] = true

  # Logging of incoming HTTP query args
  #
  # This optionally disables the logging of incoming URL request
  # query args.
  #
  # This flag is global and currently only affects the Rack
  # instrumentation which reports incoming request URLs and
  # query args by default.
  @@config[:include_remote_url_params] = true

  # The TraceView Ruby gem has the ability to sanitize query literals
  # from SQL statements.  By default this is disabled.  Enable to
  # avoid collecting and reporting query literals to TraceView.
  @@config[:sanitize_sql] = false

  # Do Not Trace
  # These two values allow you to configure specific URL patterns to
  # never be traced.  By default, this is set to common static file
  # extensions but you may want to customize this list for your needs.
  #
  # dnt_regexp and dnt_opts is passed to Regexp.new to create
  # a regular expression object.  That is then used to match against
  # the incoming request path.
  #
  # The path string originates from the rack layer and is retrieved
  # as follows:
  #
  #   req = ::Rack::Request.new(env)
  #   path = URI.unescape(req.path)
  #
  # Usage:
  #   TraceView::Config[:dnt_regexp] = "lobster$"
  #   TraceView::Config[:dnt_opts]   = Regexp::IGNORECASE
  #
  # This will ignore all requests that end with the string lobster
  # regardless of case
  #
  # Requests with positive matches (non nil) will not be traced.
  # See lib/traceview/util.rb: TraceView::Util.static_asset?
  #
  @@config[:dnt_regexp] = "\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|ttf|woff|svg|less)$"
  @@config[:dnt_opts]   = Regexp::IGNORECASE

  # In Rails, raised exceptions with rescue handlers via
  # <tt>rescue_from</tt> are not reported to the TraceView
  # dashboard by default.  Setting this value to true will
  # report all raised exception regardless.
  @@config[:report_rescued_errors] = false

  # Environment support for OpenShift.
  if ENV.key?('OPENSHIFT_TRACEVIEW_TLYZER_IP')
    # We're running on OpenShift
    @@config[:tracing_mode] = 'always'
    @@config[:reporter_host] = ENV['OPENSHIFT_TRACEVIEW_TLYZER_IP']
    @@config[:reporter_port] = ENV['OPENSHIFT_TRACEVIEW_TLYZER_PORT']
  else
    # The default configuration
    @@config[:tracing_mode] = 'through'
    @@config[:reporter_host] = '127.0.0.1'
    @@config[:reporter_port] = '7831'
  end

  @@config[:verbose] = ENV.key?('TRACEVIEW_GEM_VERBOSE') ? true : false
end

.merge!(data) ⇒ Object



167
168
169
# File 'lib/traceview/config.rb', line 167

def self.merge!(data)
  self.update!(data)
end

.method_missing(sym, *args) ⇒ Object



215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# File 'lib/traceview/config.rb', line 215

def self.method_missing(sym, *args)
  class_var_name = "@@#{sym}"

  if sym.to_s =~ /(.+)=$/
    self[$1] = args.first
  else
    # Try part of the @@config hash first
    if @@config.key?(sym)
      self[sym]

    # Then try as a class variable
    elsif self.class_variable_defined?(class_var_name.to_sym)
      self.class_eval(class_var_name)

    # Congrats - You've won a brand new nil...
    else
      nil
    end
  end
end

.showObject

Return the raw nested hash.



26
27
28
# File 'lib/traceview/config.rb', line 26

def self.show
  @@config
end

.update!(data) ⇒ Object



161
162
163
164
165
# File 'lib/traceview/config.rb', line 161

def self.update!(data)
  data.each do |key, value|
    self[key] = value
  end
end