summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Mazetto <brodock@gmail.com>2016-05-20 01:31:58 -0500
committerGabriel Mazetto <gabriel@gitlab.com>2016-05-20 20:46:13 -0500
commit64cfbca3cb6f8e71520b496318df7329bd8094e9 (patch)
tree313386feb12c6b0cc2222c711c0d30017d9c2b94
parent78a67fc48dab434b43a080e5b15491963656661a (diff)
downloadgitlab-ce-64cfbca3cb6f8e71520b496318df7329bd8094e9.tar.gz
Added load average to system sampling.
-rw-r--r--lib/gitlab/metrics/sampler.rb6
-rw-r--r--lib/gitlab/metrics/system.rb15
-rw-r--r--spec/lib/gitlab/metrics/system_spec.rb8
3 files changed, 28 insertions, 1 deletions
diff --git a/lib/gitlab/metrics/sampler.rb b/lib/gitlab/metrics/sampler.rb
index fc709222a9b..d5c8f4db595 100644
--- a/lib/gitlab/metrics/sampler.rb
+++ b/lib/gitlab/metrics/sampler.rb
@@ -43,6 +43,7 @@ module Gitlab
sample_file_descriptors
sample_objects
sample_gc
+ sample_load_average
flush
ensure
@@ -98,6 +99,11 @@ module Gitlab
add_metric('gc_statistics', stats)
end
+ def sample_load_average
+ loadavg = System.load_average
+ add_metric('sys_loadavg', {:'1min' => loadavg[0], :'5min' => loadavg[1], :'15min' => loadavg[2]})
+ end
+
def add_metric(series, values, tags = {})
prefix = sidekiq? ? 'sidekiq_' : 'rails_'
diff --git a/lib/gitlab/metrics/system.rb b/lib/gitlab/metrics/system.rb
index a7d183b2f94..55fe0f7002b 100644
--- a/lib/gitlab/metrics/system.rb
+++ b/lib/gitlab/metrics/system.rb
@@ -8,7 +8,7 @@ module Gitlab
if File.exist?('/proc')
# Returns the current process' memory usage in bytes.
def self.memory_usage
- mem = 0
+ mem = 0
match = File.read('/proc/self/status').match(/VmRSS:\s+(\d+)/)
if match and match[1]
@@ -21,6 +21,15 @@ module Gitlab
def self.file_descriptor_count
Dir.glob('/proc/self/fd/*').length
end
+
+ def self.load_average
+ loadavg = File.read('/proc/loadavg').scan(/\d+.\d+/)
+ if loadavg && loadavg[0] && loadavg[1] && loadavg[2]
+ loadavg[0..2].map { |value| value.to_f }
+ else
+ [0.0, 0.0, 0.0]
+ end
+ end
else
def self.memory_usage
0.0
@@ -29,6 +38,10 @@ module Gitlab
def self.file_descriptor_count
0
end
+
+ def self.load_average
+ [0.0, 0.0, 0.0]
+ end
end
# THREAD_CPUTIME is not supported on OS X
diff --git a/spec/lib/gitlab/metrics/system_spec.rb b/spec/lib/gitlab/metrics/system_spec.rb
index d6ae54e25e8..adab688c02e 100644
--- a/spec/lib/gitlab/metrics/system_spec.rb
+++ b/spec/lib/gitlab/metrics/system_spec.rb
@@ -27,6 +27,14 @@ describe Gitlab::Metrics::System do
end
end
+ describe '.load_average' do
+ it 'returns the amount of load as 3 values array' do
+ expect(described_class.load_average[0]).to be >= 0.0
+ expect(described_class.load_average[1]).to be >= 0.0
+ expect(described_class.load_average[2]).to be >= 0.0
+ end
+ end
+
describe '.cpu_time' do
it 'returns a Fixnum' do
expect(described_class.cpu_time).to be_an_instance_of(Fixnum)