Class: Gitlab::Database::Transaction::Context
- Inherits:
-
Object
- Object
- Gitlab::Database::Transaction::Context
- Defined in:
- lib/gitlab/database/transaction/context.rb
Constant Summary collapse
- LOG_SAVEPOINTS_THRESHOLD =
1 ‘SAVEPOINT` created in a transaction
1
- LOG_DURATION_S_THRESHOLD =
transaction that is running for 2 minutes or longer
120
- LOG_EXTERNAL_HTTP_COUNT_THRESHOLD =
50 external HTTP requests executed within transaction
50
- LOG_EXTERNAL_HTTP_DURATION_S_THRESHOLD =
1 second spent in HTTP requests in total within transaction
1
- LOG_THROTTLE_DURATION =
1
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
Instance Method Summary collapse
- #backtraces ⇒ Object
- #commit ⇒ Object
- #duration ⇒ Object
- #duration_threshold_exceeded? ⇒ Boolean
- #external_http_requests_count ⇒ Object
- #external_http_requests_duration ⇒ Object
- #external_http_requests_threshold_exceeded? ⇒ Boolean
- #increment_releases ⇒ Object
- #increment_rollbacks ⇒ Object
- #increment_savepoints ⇒ Object
-
#initialize ⇒ Context
constructor
A new instance of Context.
- #initialize_external_http_tracking ⇒ Object
- #rollback ⇒ Object
- #savepoints_threshold_exceeded? ⇒ Boolean
- #set_depth(depth) ⇒ Object
- #set_start_time ⇒ Object
- #should_log? ⇒ Boolean
- #track_backtrace(backtrace) ⇒ Object
- #track_sql(sql) ⇒ Object
Constructor Details
#initialize ⇒ Context
Returns a new instance of Context.
15 16 17 |
# File 'lib/gitlab/database/transaction/context.rb', line 15 def initialize @context = {} end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
7 8 9 |
# File 'lib/gitlab/database/transaction/context.rb', line 7 def context @context end |
Instance Method Details
#backtraces ⇒ Object
87 88 89 |
# File 'lib/gitlab/database/transaction/context.rb', line 87 def backtraces @context[:backtraces].to_a end |
#commit ⇒ Object
79 80 81 |
# File 'lib/gitlab/database/transaction/context.rb', line 79 def commit log(:commit) end |
#duration ⇒ Object
53 54 55 56 57 |
# File 'lib/gitlab/database/transaction/context.rb', line 53 def duration return unless @context[:start_time].present? - @context[:start_time] end |
#duration_threshold_exceeded? ⇒ Boolean
63 64 65 |
# File 'lib/gitlab/database/transaction/context.rb', line 63 def duration_threshold_exceeded? duration.to_i >= LOG_DURATION_S_THRESHOLD end |
#external_http_requests_count ⇒ Object
91 92 93 |
# File 'lib/gitlab/database/transaction/context.rb', line 91 def external_http_requests_count @requests_count ||= external_http_requests_count_total - @context[:external_http_count_start].to_i end |
#external_http_requests_duration ⇒ Object
95 96 97 |
# File 'lib/gitlab/database/transaction/context.rb', line 95 def external_http_requests_duration @requests_duration ||= external_http_requests_duration_total - @context[:external_http_duration_start].to_f end |
#external_http_requests_threshold_exceeded? ⇒ Boolean
67 68 69 70 |
# File 'lib/gitlab/database/transaction/context.rb', line 67 def external_http_requests_threshold_exceeded? external_http_requests_count >= LOG_EXTERNAL_HTTP_COUNT_THRESHOLD || external_http_requests_duration >= LOG_EXTERNAL_HTTP_DURATION_S_THRESHOLD end |
#increment_releases ⇒ Object
35 36 37 |
# File 'lib/gitlab/database/transaction/context.rb', line 35 def increment_releases @context[:releases] = @context[:releases].to_i + 1 end |
#increment_rollbacks ⇒ Object
31 32 33 |
# File 'lib/gitlab/database/transaction/context.rb', line 31 def increment_rollbacks @context[:rollbacks] = @context[:rollbacks].to_i + 1 end |
#increment_savepoints ⇒ Object
27 28 29 |
# File 'lib/gitlab/database/transaction/context.rb', line 27 def increment_savepoints @context[:savepoints] = @context[:savepoints].to_i + 1 end |
#initialize_external_http_tracking ⇒ Object
48 49 50 51 |
# File 'lib/gitlab/database/transaction/context.rb', line 48 def initialize_external_http_tracking @context[:external_http_count_start] = external_http_requests_count_total @context[:external_http_duration_start] = external_http_requests_duration_total end |
#rollback ⇒ Object
83 84 85 |
# File 'lib/gitlab/database/transaction/context.rb', line 83 def rollback log(:rollback) end |
#savepoints_threshold_exceeded? ⇒ Boolean
59 60 61 |
# File 'lib/gitlab/database/transaction/context.rb', line 59 def savepoints_threshold_exceeded? @context[:savepoints].to_i >= LOG_SAVEPOINTS_THRESHOLD end |
#set_depth(depth) ⇒ Object
23 24 25 |
# File 'lib/gitlab/database/transaction/context.rb', line 23 def set_depth(depth) @context[:depth] = [@context[:depth].to_i, depth].max end |
#set_start_time ⇒ Object
19 20 21 |
# File 'lib/gitlab/database/transaction/context.rb', line 19 def set_start_time @context[:start_time] = end |
#should_log? ⇒ Boolean
72 73 74 75 76 77 |
# File 'lib/gitlab/database/transaction/context.rb', line 72 def should_log? return false if logged_already? savepoints_threshold_exceeded? || duration_threshold_exceeded? || external_http_requests_threshold_exceeded? end |
#track_backtrace(backtrace) ⇒ Object
43 44 45 46 |
# File 'lib/gitlab/database/transaction/context.rb', line 43 def track_backtrace(backtrace) cleaned_backtrace = Gitlab::BacktraceCleaner.clean_backtrace(backtrace) (@context[:backtraces] ||= []).push(cleaned_backtrace) end |
#track_sql(sql) ⇒ Object
39 40 41 |
# File 'lib/gitlab/database/transaction/context.rb', line 39 def track_sql(sql) (@context[:queries] ||= []).push(sql) end |