Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPawel Chojnacki <pawel@chojnacki.ws>2017-08-11 23:00:06 +0300
committerPawel Chojnacki <pawel@chojnacki.ws>2017-11-02 20:09:21 +0300
commit0bfe79019d1743407c7df59d1f44cc470dd48e4b (patch)
tree1d6fb7e5094ebb0930f88a0200e9f6acea2a3a7d /lib/gitlab/metrics
parent03b38a4a8dd5ba01043264df31b7f5faf6217e1b (diff)
Add samples total and cleanup
Diffstat (limited to 'lib/gitlab/metrics')
-rw-r--r--lib/gitlab/metrics/samplers/ruby_sampler.rb79
1 files changed, 53 insertions, 26 deletions
diff --git a/lib/gitlab/metrics/samplers/ruby_sampler.rb b/lib/gitlab/metrics/samplers/ruby_sampler.rb
index 455085731a8..fc7870eb3f8 100644
--- a/lib/gitlab/metrics/samplers/ruby_sampler.rb
+++ b/lib/gitlab/metrics/samplers/ruby_sampler.rb
@@ -2,15 +2,14 @@ module Gitlab
module Metrics
module Samplers
class RubySampler < BaseSampler
-
COUNTS = [:count, :minor_gc_count, :major_gc_count]
def metrics
@metrics ||= init_metrics
end
- def with_prefix(name)
- "ruby_gc_#{name}".to_sym
+ def with_prefix(prefix, name)
+ "ruby_#{prefix}_#{name}".to_sym
end
def to_doc_string(name)
@@ -23,22 +22,40 @@ module Gitlab
def initialize(interval)
super(interval)
- GC::Profiler.enable
- Rails.logger.info("123")
- init_metrics
+ if Gitlab::Metrics.mri?
+ require 'allocations'
+
+ Allocations.start
+ end
end
def init_metrics
metrics = {}
- metrics[:total_time] = Gitlab::Metrics.gauge(with_prefix(:total_time), to_doc_string(:total_time), labels, :livesum)
+ metrics[:samples_total] = Gitlab::Metrics.counter(with_prefix(:sampler, :total), 'Total count of samples')
+ metrics[:total_time] = Gitlab::Metrics.gauge(with_prefix(:gc, :time_total), 'Total GC time', labels, :livesum)
GC.stat.keys.each do |key|
- metrics[key] = Gitlab::Metrics.gauge(with_prefix(key), to_doc_string(key), labels, :livesum)
+ metrics[key] = Gitlab::Metrics.gauge(with_prefix(:gc, key), to_doc_string(key), labels, :livesum)
end
+
+ metrics[:objects_total] = Gitlab::Metrics.gauge(with_prefix(:objects, :total), 'Objects total', labels.merge(class: nil), :livesum)
+
metrics
end
def sample
+
+ metrics[:samples_total].increment(labels)
+ sample_gc
+ sample_objects
+ rescue => ex
+ puts ex
+
+ end
+
+ private
+
+ def sample_gc
metrics[:total_time].set(labels, GC::Profiler.total_time * 1000)
GC.stat.each do |key, value|
@@ -46,6 +63,34 @@ module Gitlab
end
end
+ def sample_objects
+ ss_objects.each do |name, count|
+ metrics[:objects_total].set(labels.merge(class: name), count)
+ end
+ end
+
+ if Metrics.mri?
+ def ss_objects
+ sample = Allocations.to_hash
+ counts = sample.each_with_object({}) do |(klass, count), hash|
+ name = klass.name
+
+ next unless name
+
+ hash[name] = count
+ end
+
+ # Symbols aren't allocated so we'll need to add those manually.
+ counts['Symbol'] = Symbol.all_symbols.length
+ counts
+ end
+ else
+ def ss_objects
+
+ end
+ end
+
+
def source_label
if Sidekiq.server?
{ source: 'sidekiq' }
@@ -65,24 +110,6 @@ module Gitlab
{ unicorn: 'master' }
end
end
-
- def sample_gc
- time = GC::Profiler.total_time * 1000.0
- stats = GC.stat.merge(total_time: time)
-
- # We want the difference of GC runs compared to the last sample, not the
- # total amount since the process started.
-
- stats[:minor_gc_count] =
- @last_minor_gc.compared_with(stats[:minor_gc_count])
-
- stats[:major_gc_count] =
- @last_major_gc.compared_with(stats[:major_gc_count])
-
- stats[:count] = stats[:minor_gc_count] + stats[:major_gc_count]
-
- add_metric('gc_statistics', stats)
- end
end
end
end