Class: Appsignal::Transaction
- Inherits:
-
Object
- Object
- Appsignal::Transaction
show all
- Defined in:
- lib/appsignal/transaction.rb
Defined Under Namespace
Classes: GenericRequest, NilTransaction
Constant Summary
collapse
- HTTP_REQUEST =
'http_request'.freeze
- BACKGROUND_JOB =
'background_job'.freeze
- FRONTEND =
'frontend'.freeze
- ENV_METHODS =
Based on what Rails uses + some variables we’d like to show
%w(CONTENT_LENGTH AUTH_TYPE GATEWAY_INTERFACE
PATH_TRANSLATED REMOTE_HOST REMOTE_IDENT REMOTE_USER REMOTE_ADDR
REQUEST_METHOD SERVER_NAME SERVER_PORT SERVER_PROTOCOL REQUEST_URI PATH_INFO
HTTP_X_REQUEST_START HTTP_X_MIDDLEWARE_START HTTP_X_QUEUE_START
HTTP_X_QUEUE_TIME HTTP_X_HEROKU_QUEUE_WAIT_TIME HTTP_X_APPLICATION_START
HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE
HTTP_CACHE_CONTROL HTTP_CONNECTION HTTP_USER_AGENT HTTP_FROM HTTP_NEGOTIATE
HTTP_PRAGMA HTTP_REFERER HTTP_X_FORWARDED_FOR HTTP_CLIENT_IP).freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(transaction_id, namespace, request, options) ⇒ Transaction
Returns a new instance of Transaction.
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/appsignal/transaction.rb', line 35
def initialize(transaction_id, namespace, request, options)
@transaction_id = transaction_id
@namespace = namespace
@request = request
@paused = false
@tags = {}
@store = Hash.new({})
@options = options
@options[:params_method] ||= :params
@transaction_index = Appsignal::Extension.start_transaction(@transaction_id, @namespace)
end
|
Instance Attribute Details
#namespace ⇒ Object
Returns the value of attribute namespace.
33
34
35
|
# File 'lib/appsignal/transaction.rb', line 33
def namespace
@namespace
end
|
#options ⇒ Object
Returns the value of attribute options.
33
34
35
|
# File 'lib/appsignal/transaction.rb', line 33
def options
@options
end
|
#paused ⇒ Object
Returns the value of attribute paused.
33
34
35
|
# File 'lib/appsignal/transaction.rb', line 33
def paused
@paused
end
|
#request ⇒ Object
Returns the value of attribute request.
33
34
35
|
# File 'lib/appsignal/transaction.rb', line 33
def request
@request
end
|
Returns the value of attribute tags.
33
34
35
|
# File 'lib/appsignal/transaction.rb', line 33
def tags
@tags
end
|
#transaction_id ⇒ Object
Returns the value of attribute transaction_id.
33
34
35
|
# File 'lib/appsignal/transaction.rb', line 33
def transaction_id
@transaction_id
end
|
#transaction_index ⇒ Object
Returns the value of attribute transaction_index.
33
34
35
|
# File 'lib/appsignal/transaction.rb', line 33
def transaction_index
@transaction_index
end
|
Class Method Details
.complete_current! ⇒ Object
27
28
29
30
|
# File 'lib/appsignal/transaction.rb', line 27
def complete_current!
current.complete
Thread.current[:appsignal_transaction] = nil
end
|
.create(id, namespace, request, options = {}) ⇒ Object
19
20
21
|
# File 'lib/appsignal/transaction.rb', line 19
def create(id, namespace, request, options={})
Thread.current[:appsignal_transaction] = Appsignal::Transaction.new(id, namespace, request, options)
end
|
.current ⇒ Object
23
24
25
|
# File 'lib/appsignal/transaction.rb', line 23
def current
Thread.current[:appsignal_transaction] || NilTransaction.new
end
|
Instance Method Details
#nil_transaction? ⇒ Boolean
48
49
50
|
# File 'lib/appsignal/transaction.rb', line 48
def nil_transaction?
false
end
|
#pause! ⇒ Object
59
60
61
|
# File 'lib/appsignal/transaction.rb', line 59
def pause!
@paused = true
end
|
#paused? ⇒ Boolean
67
68
69
|
# File 'lib/appsignal/transaction.rb', line 67
def paused?
@paused == true
end
|
#resume! ⇒ Object
63
64
65
|
# File 'lib/appsignal/transaction.rb', line 63
def resume!
@paused = false
end
|
#sample_data ⇒ Object
122
123
124
125
126
127
128
129
130
131
|
# File 'lib/appsignal/transaction.rb', line 122
def sample_data
{
:params => sanitized_params,
:environment => sanitized_environment,
:session_data => sanitized_session_data,
:tags => sanitized_tags
}.each do |key, data|
set_sample_data(key, data)
end
end
|
#set_action(action) ⇒ Object
#set_error(error) ⇒ Object
Also known as:
add_exception
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
# File 'lib/appsignal/transaction.rb', line 133
def set_error(error)
return unless error
return unless Appsignal.active?
return if Appsignal.is_ignored_error?(error)
Appsignal.logger.debug("Adding #{error.class.name} to transaction: #{transaction_id}")
backtrace = cleaned_backtrace(error.backtrace)
Appsignal::Extension.set_transaction_error(
transaction_index,
error.class.name,
error.message,
backtrace ? JSON.generate(backtrace) : ''
)
rescue JSON::GeneratorError=>e
Appsignal.logger.error("JSON generate error (#{e.message}) for '#{backtrace.inspect}'")
end
|
#set_http_or_background_action(from = request.params) ⇒ Object
84
85
86
87
88
89
90
91
|
# File 'lib/appsignal/transaction.rb', line 84
def set_http_or_background_action(from=request.params)
return unless from
group_and_action = [
from[:controller] || from[:class],
from[:action] || from[:method]
]
set_action(group_and_action.compact.join('#'))
end
|
#set_http_or_background_queue_start ⇒ Object
98
99
100
101
102
103
104
|
# File 'lib/appsignal/transaction.rb', line 98
def set_http_or_background_queue_start
if namespace == HTTP_REQUEST
set_queue_start(http_queue_start)
elsif namespace == BACKGROUND_JOB
set_queue_start(background_queue_start)
end
end
|
#set_queue_start(start) ⇒ Object
#set_sample_data(key, data) ⇒ Object
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/appsignal/transaction.rb', line 111
def set_sample_data(key, data)
return unless key && data && (data.is_a?(Array) || data.is_a?(Hash))
Appsignal::Extension.set_transaction_sample_data(
transaction_index,
key.to_s,
JSON.generate(data)
)
rescue JSON::GeneratorError=>e
Appsignal.logger.error("JSON generate error (#{e.message}) for '#{data.inspect}'")
end
|
75
76
77
|
# File 'lib/appsignal/transaction.rb', line 75
def set_tags(given_tags={})
@tags.merge!(given_tags)
end
|
#store(key) ⇒ Object
71
72
73
|
# File 'lib/appsignal/transaction.rb', line 71
def store(key)
@store[key]
end
|