diff options
author | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-09-06 04:02:08 +0300 |
---|---|---|
committer | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-11-02 20:11:43 +0300 |
commit | 6db3151fa164d65d6176896301166c9883df1fe4 (patch) | |
tree | a39d5015455eba63c8613e87db102eb2ac901392 /lib/gitlab/metrics | |
parent | c97dc61a9e3e203bc7a3315dd6828eda320b4323 (diff) |
Introduce missing Action concept
Diffstat (limited to 'lib/gitlab/metrics')
-rw-r--r-- | lib/gitlab/metrics/method_call.rb | 35 | ||||
-rw-r--r-- | lib/gitlab/metrics/subscribers/active_record.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/metrics/subscribers/rails_cache.rb | 44 | ||||
-rw-r--r-- | lib/gitlab/metrics/transaction.rb | 12 |
4 files changed, 62 insertions, 33 deletions
diff --git a/lib/gitlab/metrics/method_call.rb b/lib/gitlab/metrics/method_call.rb index fb652cbeb4f..dba4b0cdc8e 100644 --- a/lib/gitlab/metrics/method_call.rb +++ b/lib/gitlab/metrics/method_call.rb @@ -4,26 +4,29 @@ module Gitlab class MethodCall attr_reader :real_time, :cpu_time, :call_count - # name - The full name of the method (including namespace) such as - # `User#sign_in`. - # def self.call_real_duration_histogram - @call_real_duration_histogram ||= Gitlab::Metrics.histogram(:gitlab_method_call_real_duration_milliseconds, - 'Method calls real duration', - {call_name: nil}, - [1, 2, 5, 10, 20, 50, 100, 1000]) - + @call_real_duration_histogram ||= Gitlab::Metrics.histogram( + :gitlab_method_call_real_duration_seconds, + 'Method calls real duration', + { action: nil, call_name: nil }, + [1000, 2000, 5000, 10000, 20000, 50000, 100000, 1000000] + ) end def self.call_cpu_duration_histogram - @call_duration_histogram ||= Gitlab::Metrics.histogram(:gitlab_method_call_cpu_duration_milliseconds, - 'Method calls cpu duration', - {call_name: nil}, - [1, 2, 5, 10, 20, 50, 100, 1000]) + @call_duration_histogram ||= Gitlab::Metrics.histogram( + :gitlab_method_call_cpu_duration_seconds, + 'Method calls cpu duration', + { action: nil, call_name: nil }, + [1000, 2000, 5000, 10000, 20000, 50000, 100000, 1000000] + ) end - - def initialize(name) + # name - The full name of the method (including namespace) such as + # `User#sign_in`. + # + def initialize(name, action) + @action = action @name = name @real_time = 0 @cpu_time = 0 @@ -41,8 +44,8 @@ module Gitlab @call_count += 1 if above_threshold? - self.class.call_real_duration_histogram.observe({ call_name: @name }, @real_time) - self.class.call_cpu_duration_histogram.observe({ call_name: @name }, @cpu_time) + self.class.call_real_duration_histogram.observe({ call_name: @name, action: @action }, @real_time) + self.class.call_cpu_duration_histogram.observe({ call_name: @name, action: @action }, @cpu_time) end retval diff --git a/lib/gitlab/metrics/subscribers/active_record.rb b/lib/gitlab/metrics/subscribers/active_record.rb index 15892c88e86..411f49456a6 100644 --- a/lib/gitlab/metrics/subscribers/active_record.rb +++ b/lib/gitlab/metrics/subscribers/active_record.rb @@ -8,14 +8,14 @@ module Gitlab def self.metric_sql_duration_seconds @metric_sql_duration_seconds ||= Gitlab::Metrics.histogram( :gitlab_sql_duration_seconds, - 'SQL duration seconds', + 'SQL time', {}, [0.001, 0.002, 0.005, 0.01, 0.02, 0.05, 0.1, 0.500, 2.0, 10.0] ) end def sql(event) - self.class.metric_sql_duration_secodnds.observe({}, event.duration/1000.0) + self.class.metric_sql_duration_secodnds.observe({}, event.duration / 1000.0) return unless current_transaction current_transaction.increment(:sql_duration, event.duration, false) diff --git a/lib/gitlab/metrics/subscribers/rails_cache.rb b/lib/gitlab/metrics/subscribers/rails_cache.rb index aaed2184f44..8eadb40a739 100644 --- a/lib/gitlab/metrics/subscribers/rails_cache.rb +++ b/lib/gitlab/metrics/subscribers/rails_cache.rb @@ -6,54 +6,80 @@ module Gitlab class RailsCache < ActiveSupport::Subscriber attach_to :active_support + def self.metric_cache_duration_seconds + @metric_cache_duration_seconds ||= Gitlab::Metrics.histogram( + :gitlab_cache_duration_seconds, + 'Cache access time', + { action: nil, operation: nil }, + [0.001, 0.002, 0.005, 0.01, 0.02, 0.05, 0.1, 0.500, 2.0, 10.0] + ) + end + + def self.metric_cache_read_hit_total + @metric_cache_read_hit_total ||= Gitlab::Metrics.counter(:gitlab_cache_read_hit_total, 'Cache read hit', { action: nil }) + end + + def self.metric_cache_read_miss_total + @metric_cache_read_miss_total ||= Gitlab::Metrics.counter(:gitlab_cache_read_miss_total, 'Cache read miss', { action: nil }) + end + def cache_read(event) - increment(:cache_read, event.duration) + observe(:read, event.duration) return unless current_transaction return if event.payload[:super_operation] == :fetch if event.payload[:hit] + self.class.metric_cache_read_hit_total.increment({ action: action }) current_transaction.increment(:cache_read_hit_count, 1) else + self.class.metric_cache_read_miss_total.increment({ action: action }) current_transaction.increment(:cache_read_miss_count, 1) end end def cache_write(event) - increment(:cache_write, event.duration) + observe(:write, event.duration) end def cache_delete(event) - increment(:cache_delete, event.duration) + observe(:delete, event.duration) end def cache_exist?(event) - increment(:cache_exists, event.duration) + observe(:exists, event.duration) end def cache_fetch_hit(event) return unless current_transaction + self.class.metric_cache_read_hit_total.increment({ action: action }) current_transaction.increment(:cache_read_hit_count, 1) end def cache_generate(event) return unless current_transaction + self.class.metric_cache_read_miss_total.increment({ action: action }) current_transaction.increment(:cache_read_miss_count, 1) end - def increment(key, duration) + def observe(key, duration) return unless current_transaction - current_transaction.increment(:cache_duration, duration) - current_transaction.increment(:cache_count, 1) - current_transaction.increment("#{key}_duration".to_sym, duration) - current_transaction.increment("#{key}_count".to_sym, 1) + metric_cache_duration_seconds.observe({ operation: key, action: action }, duration / 1000.1) + current_transaction.increment(:cache_duration, duration, false) + current_transaction.increment(:cache_count, 1, false) + current_transaction.increment("#{key}_duration".to_sym, duration, false) + current_transaction.increment("#{key}_count".to_sym, 1, false) end private + def action + current_transaction&.action + end + def current_transaction Transaction.current end diff --git a/lib/gitlab/metrics/transaction.rb b/lib/gitlab/metrics/transaction.rb index bf196bb17cc..c4d364a08c2 100644 --- a/lib/gitlab/metrics/transaction.rb +++ b/lib/gitlab/metrics/transaction.rb @@ -43,8 +43,8 @@ module Gitlab def self.metric_transaction_duration_seconds @metric_transaction_duration_seconds ||= Gitlab::Metrics.histogram( :gitlab_transaction_duration_seconds, - 'Transaction duration seconds', - {}, + 'Transaction duration', + { action: nil }, [0.001, 0.002, 0.005, 0.01, 0.02, 0.05, 0.1, 0.500, 2.0, 10.0] ) end @@ -53,7 +53,7 @@ module Gitlab @metric_transaction_allocated_memory_bytes ||= Gitlab::Metrics.histogram( :gitlab_transaction_allocated_memory_bytes, 'Transaction allocated memory bytes', - {}, + { action: nil }, [500000, 1000000, 2000000, 5000000, 10000000, 20000000, 100000000] ) end @@ -69,8 +69,8 @@ module Gitlab @memory_after = System.memory_usage @finished_at = System.monotonic_time - Transaction.metric_transaction_duration_seconds.observe({}, duration * 1000) - Transaction.metric_transaction_allocated_memory_bytes.observe({}, allocated_memory / 2 ^ 20) + Transaction.metric_transaction_duration_seconds.observe({ action: action }, duration * 1000) + Transaction.metric_transaction_allocated_memory_bytes.observe({ action: action }, allocated_memory / 2 ^ 20) Thread.current[THREAD_KEY] = nil end @@ -94,7 +94,7 @@ module Gitlab # Returns a MethodCall object for the given name. def method_call_for(name) unless method = @methods[name] - @methods[name] = method = MethodCall.new(name) + @methods[name] = method = MethodCall.new(name, action) end method |