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 HTTP_RANGE
HTTP_X_AUTH_TOKEN)
- JSON_EXCEPTIONS =
[
IOError,
NotImplementedError,
JSON::GeneratorError,
Encoding::UndefinedConversionError
].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.
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/appsignal/transaction.rb', line 58
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.
56
57
58
|
# File 'lib/appsignal/transaction.rb', line 56
def namespace
@namespace
end
|
#options ⇒ Object
Returns the value of attribute options.
56
57
58
|
# File 'lib/appsignal/transaction.rb', line 56
def options
@options
end
|
#paused ⇒ Object
Returns the value of attribute paused.
56
57
58
|
# File 'lib/appsignal/transaction.rb', line 56
def paused
@paused
end
|
#request ⇒ Object
Returns the value of attribute request.
56
57
58
|
# File 'lib/appsignal/transaction.rb', line 56
def request
@request
end
|
Returns the value of attribute tags.
56
57
58
|
# File 'lib/appsignal/transaction.rb', line 56
def tags
@tags
end
|
#transaction_id ⇒ Object
Returns the value of attribute transaction_id.
56
57
58
|
# File 'lib/appsignal/transaction.rb', line 56
def transaction_id
@transaction_id
end
|
#transaction_index ⇒ Object
Returns the value of attribute transaction_index.
56
57
58
|
# File 'lib/appsignal/transaction.rb', line 56
def transaction_index
@transaction_index
end
|
Class Method Details
.complete_current! ⇒ Object
47
48
49
50
51
52
53
|
# File 'lib/appsignal/transaction.rb', line 47
def complete_current!
current.complete
rescue Exception => e
Appsignal.logger.error("Failed to complete transaction ##{current.transaction_id}. #{e.message}")
ensure
Thread.current[:appsignal_transaction] = nil
end
|
.create(id, namespace, request, options = {}) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/appsignal/transaction.rb', line 29
def create(id, namespace, request, options={})
if Thread.current[:appsignal_transaction] != nil
Appsignal.logger.debug("Trying to start new transaction #{id} but #{current.transaction_id} is already running. Using #{current.transaction_id}")
current
else
Thread.current[:appsignal_transaction] = Appsignal::Transaction.new(id, namespace, request, options)
end
end
|
.current ⇒ Object
43
44
45
|
# File 'lib/appsignal/transaction.rb', line 43
def current
Thread.current[:appsignal_transaction] || NilTransaction.new
end
|
Instance Method Details
#nil_transaction? ⇒ Boolean
71
72
73
|
# File 'lib/appsignal/transaction.rb', line 71
def nil_transaction?
false
end
|
#pause! ⇒ Object
82
83
84
|
# File 'lib/appsignal/transaction.rb', line 82
def pause!
@paused = true
end
|
#paused? ⇒ Boolean
90
91
92
|
# File 'lib/appsignal/transaction.rb', line 90
def paused?
@paused == true
end
|
#resume! ⇒ Object
86
87
88
|
# File 'lib/appsignal/transaction.rb', line 86
def resume!
@paused = false
end
|
#sample_data ⇒ Object
145
146
147
148
149
150
151
152
153
154
155
|
# File 'lib/appsignal/transaction.rb', line 145
def sample_data
{
:params => sanitized_params,
:environment => sanitized_environment,
:session_data => sanitized_session_data,
:metadata => metadata,
: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
#set_http_or_background_action(from = request.params) ⇒ Object
107
108
109
110
111
112
113
114
|
# File 'lib/appsignal/transaction.rb', line 107
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
121
122
123
124
125
126
127
|
# File 'lib/appsignal/transaction.rb', line 121
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
98
99
100
|
# File 'lib/appsignal/transaction.rb', line 98
def set_tags(given_tags={})
@tags.merge!(given_tags)
end
|
#store(key) ⇒ Object
94
95
96
|
# File 'lib/appsignal/transaction.rb', line 94
def store(key)
@store[key]
end
|