Skip to content

Commit

Permalink
Merge pull request #27 from schneems/schneems/laksdjflasdkfj
Browse files Browse the repository at this point in the history
Refactor
  • Loading branch information
schneems committed Oct 18, 2018
2 parents 168ffc4 + 323f22e commit cf083c6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 25 deletions.
5 changes: 2 additions & 3 deletions .travis.yml
Expand Up @@ -4,9 +4,8 @@ before_install:
- gem install bundler -v 1.12.5

rvm:
- 1.9.3
- 2.0.0
- 2.1.0
- 2.2.0
- 2.5.0
- ruby-head
- jruby-19mode
- rbx-19mode
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,7 @@
## 0.2.3

- Silence BigDecimal deprecation warning under Ruby 2.5 (#26)

## 0.2.2

- Fix support for Ruby 2.4 (#23)
Expand Down
46 changes: 24 additions & 22 deletions lib/get_process_mem.rb
Expand Up @@ -3,11 +3,25 @@

# Cribbed from Unicorn Worker Killer, thanks!
class GetProcessMem
KB_TO_BYTE = 1024 # 2**10 = 1024
MB_TO_BYTE = 1_048_576 # 1024**2 = 1_048_576
GB_TO_BYTE = 1_073_741_824 # 1024**3 = 1_073_741_824
if Kernel.respond_to?(:BigDecimal)
private_class_method def self.number_to_bigdecimal(value)
BigDecimal(value)
end
else
private_class_method def self.number_to_bigdecimal(value)
BigDecimal.new(value)
end
end

private def number_to_bigdecimal(value)
self.class.send(:number_to_bigdecimal, value)
end

KB_TO_BYTE = number_to_bigdecimal 1024 # 2**10 = 1024
MB_TO_BYTE = number_to_bigdecimal 1_048_576 # 1024**2 = 1_048_576
GB_TO_BYTE = number_to_bigdecimal 1_073_741_824 # 1024**3 = 1_073_741_824
CONVERSION = { "kb" => KB_TO_BYTE, "mb" => MB_TO_BYTE, "gb" => GB_TO_BYTE }
ROUND_UP = Kernel.respond_to?(:BigDecimal) ? BigDecimal("0.5") : BigDecimal.new("0.5")
ROUND_UP = number_to_bigdecimal "0.5"
attr_reader :pid

RUNS_ON_WINDOWS = Gem.win_platform?
Expand Down Expand Up @@ -40,15 +54,15 @@ def bytes
end

def kb(b = bytes)
(b/coerce_to_big_decimal(KB_TO_BYTE)).to_f
(b/KB_TO_BYTE).to_f
end

def mb(b = bytes)
(b/coerce_to_big_decimal(MB_TO_BYTE)).to_f
(b/MB_TO_BYTE).to_f
end

def gb(b = bytes)
(b/coerce_to_big_decimal(GB_TO_BYTE)).to_f
(b/GB_TO_BYTE).to_f
end

def inspect
Expand All @@ -73,7 +87,7 @@ def linux_memory(file = @process_file)
return if lines.empty?
lines.reduce(0) do |sum, line|
line.match(/(?<value>(\d*\.{0,1}\d+))\s+(?<unit>\w\w)/) do |m|
value = coerce_to_big_decimal(m[:value]) + ROUND_UP
value = number_to_bigdecimal(m[:value]) + ROUND_UP
unit = m[:unit].downcase
sum += CONVERSION[unit] * value
end
Expand All @@ -88,22 +102,10 @@ def linux_memory(file = @process_file)
def ps_memory
if RUNS_ON_WINDOWS
size = ProcTable.ps(pid).working_set_size
coerce_to_big_decimal(size)
number_to_bigdecimal(size)
else
mem = `ps -o rss= -p #{pid}`
KB_TO_BYTE * coerce_to_big_decimal(mem == "" ? 0 : mem)
KB_TO_BYTE * number_to_bigdecimal(mem == "" ? 0 : mem)
end
end

private

def coerce_to_big_decimal(value)
if Kernel.respond_to?(:BigDecimal)
#running under Ruby 2.5 or later
BigDecimal(value)
else
BigDecimal.new(value)
end
end

end

0 comments on commit cf083c6

Please sign in to comment.