diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 14:18:50 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 14:18:50 +0300 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /lib/gitlab/metrics/subscribers | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'lib/gitlab/metrics/subscribers')
-rw-r--r-- | lib/gitlab/metrics/subscribers/active_record.rb | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/gitlab/metrics/subscribers/active_record.rb b/lib/gitlab/metrics/subscribers/active_record.rb index a02dd850582..1628eeb5a95 100644 --- a/lib/gitlab/metrics/subscribers/active_record.rb +++ b/lib/gitlab/metrics/subscribers/active_record.rb @@ -9,6 +9,7 @@ module Gitlab attach_to :active_record IGNORABLE_SQL = %w{BEGIN COMMIT}.freeze + DB_COUNTERS = %i{db_count db_write_count db_cached_count}.freeze def sql(event) return unless current_transaction @@ -19,8 +20,7 @@ module Gitlab self.class.gitlab_sql_duration_seconds.observe(current_transaction.labels, event.duration / 1000.0) - current_transaction.increment(:sql_duration, event.duration, false) - current_transaction.increment(:sql_count, 1, false) + increment_db_counters(payload) end private @@ -31,6 +31,20 @@ module Gitlab buckets [0.01, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0] end + def select_sql_command?(payload) + payload[:sql].match(/\A((?!(.*[^\w'"](DELETE|UPDATE|INSERT INTO)[^\w'"])))(WITH.*)?(SELECT)((?!(FOR UPDATE|FOR SHARE)).)*$/i) + end + + def increment_db_counters(payload) + current_transaction.increment(:db_count, 1) + + if payload.fetch(:cached, payload[:name] == 'CACHE') + current_transaction.increment(:db_cached_count, 1) + end + + current_transaction.increment(:db_write_count, 1) unless select_sql_command?(payload) + end + def current_transaction Transaction.current end |