class BusyAdministrator::MemorySize

Public Class Methods

kibibytes(num) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 91
def kibibytes(num)
  new(bytes: num * 1024)
end
kilobytes(num) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 95
def kilobytes(num)
  new(bytes: num * 1000)
end
mebibytes(num) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 99
def mebibytes(num)
  new(bytes: num * 1024 * 1024)
end
megabytes(num) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 103
def megabytes(num)
  new(bytes: num * 1000 * 1000)
end
new(bytes:) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 16
def initialize(bytes:)
  @bytes = bytes
end
of(target, checked_objects: []) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 107
def of(target, checked_objects: [])
  total_size = 0

  unless checked_objects.include?(target.object_id)
    total_size += ObjectSpace.memsize_of(target)

    checked_objects << target.object_id

    (ObjectSpace.reachable_objects_from(target) || []).each do |reachable_object|
      return new(bytes: 0) if reachable_object.is_a?(ObjectSpace::InternalObjectWrapper)

      total_size += self.of(reachable_object, checked_objects: checked_objects).bytes
    end        
  end

  new(bytes: total_size)
end
of_all_objects_from(target) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 125
def of_all_objects_from(target)
  total_memory_size = 0

  # ensure that we don't double count duplicates
  checked_objects = []

  if target.is_a?(Class) || target.is_a?(Module)
    ObjectSpace.each_object(target).each do |instance|
      total_memory_size += self.of(instance, checked_objects: checked_objects).bytes
    end
  else
    raise Exception, "target should be a Class or Module"
  end

  new(bytes: total_memory_size)
end

Public Instance Methods

*(number) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 48
def *(number)
  self.class.new(bytes: @bytes * number)
end
+(other) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 40
def +(other)
  self.class.new(bytes: @bytes + other.bytes)
end
-(other) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 44
def -(other)
  self.class.new(bytes: @bytes - other.bytes)
end
/(number) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 52
def /(number)
  self.class.new(bytes: @bytes / number)
end
<(other_object) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 68
def <(other_object)
  self.bytes < other_object.bytes
end
<=(other_object) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 72
def <=(other_object)
  self.bytes <= other_object.bytes
end
==(other_object) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 56
def ==(other_object)
  self.bytes == other_object.bytes
end
>(other_object) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 60
def >(other_object)
  self.bytes > other_object.bytes
end
>=(other_object) click to toggle source
# File lib/busy-administrator/memory_size.rb, line 64
def >=(other_object)
  self.bytes >= other_object.bytes
end
bytes() click to toggle source
# File lib/busy-administrator/memory_size.rb, line 20
def bytes
  @bytes
end
inspect() click to toggle source
# File lib/busy-administrator/memory_size.rb, line 86
def inspect
  to_s
end
kibibytes() click to toggle source
# File lib/busy-administrator/memory_size.rb, line 24
def kibibytes
  @bytes / 1024
end
kilobytes() click to toggle source
# File lib/busy-administrator/memory_size.rb, line 28
def kilobytes
  @bytes / 1000
end
mebibytes() click to toggle source
# File lib/busy-administrator/memory_size.rb, line 32
def mebibytes
  @bytes / 1024 / 1024
end
megabytes() click to toggle source
# File lib/busy-administrator/memory_size.rb, line 36
def megabytes
  @bytes / 1000 / 1000
end
to_s() click to toggle source
# File lib/busy-administrator/memory_size.rb, line 76
def to_s
  if @bytes < 1024
    "#{ bytes } Bytes"
  elsif @bytes < 1024 * 1024
    "#{ kibibytes } KiB"
  else
    "#{ mebibytes } MiB"
  end
end