lib/appsignal/transaction.rb in appsignal-0.8.15 vs lib/appsignal/transaction.rb in appsignal-0.9.0.alpha.1

- old
+ new

@@ -9,24 +9,34 @@ 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).freeze - def self.create(key, env) - Appsignal.logger.debug("Creating transaction: #{key}") - Thread.current[:appsignal_transaction_id] = key - Appsignal.transactions[key] = Appsignal::Transaction.new(key, env) + def self.create(request_id, env) + Appsignal.logger.debug("Creating transaction: #{request_id}") + Thread.current[:appsignal_transaction_id] = request_id + Appsignal::Transaction.new(request_id, env) end def self.current Appsignal.transactions[Thread.current[:appsignal_transaction_id]] end + def self.complete_current! + if current + current.complete! + Thread.current[:appsignal_transaction_id] = nil + else + Appsignal.logger.error('Trying to complete current, but no transaction present') + end + end + attr_reader :request_id, :events, :process_action_event, :action, :exception, :env, :fullpath, :time, :tags, :kind, :queue_start def initialize(request_id, env) + Appsignal.transactions[request_id] = self @request_id = request_id @events = [] @process_action_event = nil @exception = nil @env = env @@ -126,9 +136,11 @@ Appsignal.enqueue(self) end else Appsignal.logger.debug("Not processing transaction: #{@request_id}") end + ensure + Appsignal.transactions.delete(@request_id) end def set_background_queue_start queue_start = process_action_event.payload[:queue_start] return unless queue_start