Module: Appsignal
- Defined in:
- lib/appsignal/rack/streaming_listener.rb,
lib/appsignal.rb,
lib/appsignal/cli.rb,
lib/appsignal/demo.rb,
lib/appsignal/hooks.rb,
lib/appsignal/utils.rb,
lib/appsignal/config.rb,
lib/appsignal/marker.rb,
lib/appsignal/system.rb,
lib/appsignal/version.rb,
lib/appsignal/cli/demo.rb,
lib/appsignal/minutely.rb,
lib/appsignal/extension.rb,
lib/appsignal/auth_check.rb,
lib/appsignal/hooks/puma.rb,
lib/appsignal/hooks/rake.rb,
lib/appsignal/cli/helpers.rb,
lib/appsignal/cli/install.rb,
lib/appsignal/hooks/redis.rb,
lib/appsignal/transaction.rb,
lib/appsignal/transmitter.rb,
lib/appsignal/cli/diagnose.rb,
lib/appsignal/hooks/sequel.rb,
lib/appsignal/hooks/sidekiq.rb,
lib/appsignal/hooks/unicorn.rb,
lib/appsignal/hooks/net_http.rb,
lib/appsignal/event_formatter.rb,
lib/appsignal/hooks/celluloid.rb,
lib/appsignal/hooks/passenger.rb,
lib/appsignal/hooks/shoryuken.rb,
lib/appsignal/hooks/webmachine.rb,
lib/appsignal/hooks/data_mapper.rb,
lib/appsignal/hooks/delayed_job.rb,
lib/appsignal/integrations/grape.rb,
lib/appsignal/integrations/resque.rb,
lib/appsignal/cli/notify_of_deploy.rb,
lib/appsignal/integrations/railtie.rb,
lib/appsignal/utils/params_sanitizer.rb,
lib/appsignal/hooks/mongo_ruby_driver.rb,
lib/appsignal/integrations/data_mapper.rb,
lib/appsignal/js_exception_transaction.rb,
lib/appsignal/rack/js_exception_catcher.rb,
lib/appsignal/rack/rails_instrumentation.rb,
lib/appsignal/garbage_collection_profiler.rb,
lib/appsignal/rack/generic_instrumentation.rb,
lib/appsignal/rack/sinatra_instrumentation.rb,
lib/appsignal/utils/query_params_sanitizer.rb,
lib/appsignal/integrations/mongo_ruby_driver.rb,
lib/appsignal/integrations/resque_active_job.rb,
lib/appsignal/integrations/delayed_job_plugin.rb,
lib/appsignal/hooks/active_support_notifications.rb,
lib/appsignal/event_formatter/moped/query_formatter.rb,
lib/appsignal/event_formatter/faraday/request_formatter.rb,
lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb,
lib/appsignal/event_formatter/active_record/sql_formatter.rb,
lib/appsignal/event_formatter/action_view/render_formatter.rb,
lib/appsignal/event_formatter/elastic_search/search_formatter.rb,
lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter.rb,
lib/appsignal/event_formatter/active_record/instantiation_formatter.rb,
ext/appsignal_extension.c
Overview
Appsignal module that tracks exceptions in Streaming rack responses.
Defined Under Namespace
Modules: Grape, Integrations, Rack, System, Utils
Classes: AuthCheck, CLI, Capistrano, Config, Demo, EventFormatter, Extension, GarbageCollectionProfiler, Hooks, JSExceptionTransaction, Marker, Minutely, StreamWrapper, Transaction, Transmitter
Constant Summary
collapse
- VERSION =
'2.0.6'
Class Attribute Summary collapse
Class Method Summary
collapse
-
.active? ⇒ Boolean
-
.add_distribution_value(key, value) ⇒ Object
-
.extension_loaded? ⇒ Boolean
-
.extensions ⇒ Object
-
.forked ⇒ Object
-
.get_server_state(key) ⇒ Object
-
.increment_counter(key, value = 1) ⇒ Object
-
.initialize_extensions ⇒ Object
-
.instrument(name, title = nil, body = nil, body_format = Appsignal::EventFormatter::DEFAULT) ⇒ Object
-
.instrument_sql(name, title = nil, body = nil, &block) ⇒ Object
-
.is_ignored_action?(action) ⇒ Boolean
-
.is_ignored_error?(error) ⇒ Boolean
(also: is_ignored_exception?)
-
.listen_for_error(&block) ⇒ Object
(also: listen_for_exception)
-
.log_formatter(prefix = nil) ⇒ Object
-
.monitor_single_transaction(name, env = {}, &block) ⇒ Object
Monitor a transaction, stop Appsignal and wait for this single transaction to be flushed.
-
.monitor_transaction(name, env = {}) ⇒ Object
Wrap a transaction with appsignal monitoring.
-
.send_error(error, tags = nil, namespace = Appsignal::Transaction::HTTP_REQUEST) ⇒ Object
(also: send_exception)
-
.set_error(exception) ⇒ Object
(also: set_exception, add_exception)
-
.set_gauge(key, value) ⇒ Object
-
.set_host_gauge(key, value) ⇒ Object
-
.set_process_gauge(key, value) ⇒ Object
-
.start ⇒ Object
-
.start_logger(path_arg = nil) ⇒ Object
-
.stop(called_by = nil) ⇒ Object
-
.tag_request(params = {}) ⇒ Object
(also: tag_job)
-
.without_instrumentation ⇒ Object
Convenience method for skipping instrumentations around a block of code.
Class Attribute Details
Returns the value of attribute agent.
7
8
9
|
# File 'lib/appsignal.rb', line 7
def agent
@agent
end
|
Returns the value of attribute config.
7
8
9
|
# File 'lib/appsignal.rb', line 7
def config
@config
end
|
.extension_loaded ⇒ Object
Returns the value of attribute extension_loaded.
7
8
9
|
# File 'lib/appsignal.rb', line 7
def extension_loaded
@extension_loaded
end
|
.in_memory_log ⇒ Object
69
70
71
72
73
74
75
|
# File 'lib/appsignal.rb', line 69
def in_memory_log
if defined?(@in_memory_log) && @in_memory_log
@in_memory_log
else
@in_memory_log = StringIO.new
end
end
|
226
227
228
229
230
231
|
# File 'lib/appsignal.rb', line 226
def logger
@logger ||= Logger.new(in_memory_log).tap do |l|
l.level = Logger::INFO
l.formatter = log_formatter("appsignal")
end
end
|
Class Method Details
.active? ⇒ Boolean
267
268
269
|
# File 'lib/appsignal.rb', line 267
def active?
config && config.active? && extension_loaded?
end
|
.add_distribution_value(key, value) ⇒ Object
.extension_loaded? ⇒ Boolean
263
264
265
|
# File 'lib/appsignal.rb', line 263
def extension_loaded?
!!@extension_loaded
end
|
.extensions ⇒ Object
10
11
12
|
# File 'lib/appsignal.rb', line 10
def extensions
@extensions ||= []
end
|
.get_server_state(key) ⇒ Object
.increment_counter(key, value = 1) ⇒ Object
.initialize_extensions ⇒ Object
14
15
16
17
18
19
20
|
# File 'lib/appsignal.rb', line 14
def initialize_extensions
Appsignal.logger.debug('Initializing extensions')
extensions.each do |extension|
Appsignal.logger.debug("Initializing #{extension}")
extension.initializer
end
end
|
.instrument(name, title = nil, body = nil, body_format = Appsignal::EventFormatter::DEFAULT) ⇒ Object
185
186
187
188
189
190
|
# File 'lib/appsignal.rb', line 185
def instrument(name, title=nil, body=nil, body_format=Appsignal::EventFormatter::DEFAULT)
Appsignal::Transaction.current.start_event
return_value = yield
Appsignal::Transaction.current.finish_event(name, title, body, body_format)
return_value
end
|
.instrument_sql(name, title = nil, body = nil, &block) ⇒ Object
.is_ignored_action?(action) ⇒ Boolean
276
277
278
|
# File 'lib/appsignal.rb', line 276
def is_ignored_action?(action)
Appsignal.config[:ignore_actions].include?(action)
end
|
.is_ignored_error?(error) ⇒ Boolean
Also known as:
is_ignored_exception?
271
272
273
|
# File 'lib/appsignal.rb', line 271
def is_ignored_error?(error)
Appsignal.config[:ignore_errors].include?(error.class.name)
end
|
.listen_for_error(&block) ⇒ Object
Also known as:
listen_for_exception
142
143
144
145
146
147
|
# File 'lib/appsignal.rb', line 142
def listen_for_error(&block)
yield
rescue => error
send_error(error)
raise error
end
|
233
234
235
236
237
238
|
# File 'lib/appsignal.rb', line 233
def log_formatter(prefix = nil)
pre = "#{prefix}: " if prefix
proc do |severity, datetime, progname, msg|
"[#{datetime.strftime('%Y-%m-%dT%H:%M:%S')} (process) ##{Process.pid}][#{severity}] #{pre}#{msg}\n"
end
end
|
.monitor_single_transaction(name, env = {}, &block) ⇒ Object
Monitor a transaction, stop Appsignal and wait for this single transaction to be flushed.
Useful for cases such as Rake tasks and Resque-like systems where a process is forked and immediately exits after the transaction finishes.
136
137
138
139
140
|
# File 'lib/appsignal.rb', line 136
def monitor_single_transaction(name, env={}, &block)
monitor_transaction(name, env, &block)
ensure
stop('monitor_single_transaction')
end
|
.monitor_transaction(name, env = {}) ⇒ Object
Wrap a transaction with appsignal monitoring.
.send_error(error, tags = nil, namespace = Appsignal::Transaction::HTTP_REQUEST) ⇒ Object
Also known as:
send_exception
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/appsignal.rb', line 150
def send_error(error, tags=nil, namespace=Appsignal::Transaction::HTTP_REQUEST)
return if !active? || is_ignored_error?(error)
unless error.is_a?(Exception)
logger.error('Can\'t send error, given value is not an exception')
return
end
transaction = Appsignal::Transaction.new(
SecureRandom.uuid,
namespace,
Appsignal::Transaction::GenericRequest.new({})
)
transaction.set_tags(tags) if tags
transaction.set_error(error)
transaction.complete
end
|
.set_error(exception) ⇒ Object
Also known as:
set_exception, add_exception
.set_gauge(key, value) ⇒ Object
196
197
198
199
200
|
# File 'lib/appsignal.rb', line 196
def set_gauge(key, value)
Appsignal::Extension.set_gauge(key.to_s, value.to_f)
rescue RangeError
Appsignal.logger.warn("Gauge value #{value} for key '#{key}' is too big")
end
|
.set_host_gauge(key, value) ⇒ Object
202
203
204
205
206
|
# File 'lib/appsignal.rb', line 202
def set_host_gauge(key, value)
Appsignal::Extension.set_host_gauge(key.to_s, value.to_f)
rescue RangeError
Appsignal.logger.warn("Host gauge value #{value} for key '#{key}' is too big")
end
|
.set_process_gauge(key, value) ⇒ Object
208
209
210
211
212
|
# File 'lib/appsignal.rb', line 208
def set_process_gauge(key, value)
Appsignal::Extension.set_process_gauge(key.to_s, value.to_f)
rescue RangeError
Appsignal.logger.warn("Process gauge value #{value} for key '#{key}' is too big")
end
|
.start_logger(path_arg = nil) ⇒ Object
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
|
# File 'lib/appsignal.rb', line 240
def start_logger(path_arg = nil)
if config && config[:log] == "file" && config.log_file_path
start_file_logger(config.log_file_path)
else
start_stdout_logger
end
logger.level =
if config && config[:debug]
Logger::DEBUG
else
Logger::INFO
end
if in_memory_log
logger << in_memory_log.string
end
if path_arg
logger.info('Setting the path in start_logger has no effect anymore, set it in the config instead')
end
end
|
.stop(called_by = nil) ⇒ Object
77
78
79
80
81
82
83
84
|
# File 'lib/appsignal.rb', line 77
def stop(called_by=nil)
if called_by
logger.debug("Stopping appsignal (#{called_by})")
else
logger.debug('Stopping appsignal')
end
Appsignal::Extension.stop
end
|
.tag_request(params = {}) ⇒ Object
Also known as:
tag_job
177
178
179
180
181
182
|
# File 'lib/appsignal.rb', line 177
def tag_request(params={})
return unless active?
transaction = Appsignal::Transaction.current
return false unless transaction
transaction.set_tags(params)
end
|
.without_instrumentation ⇒ Object
Convenience method for skipping instrumentations around a block of code.