pasosdeJesus/msip

View on GitHub
app/helpers/msip/procesos_helper.rb

Summary

Maintainability
A
1 hr
Test Coverage
F
36%
# frozen_string_literal: true

module Msip
  module ProcesosHelper
    # Retorna lista de procesos que corren en OpenBSD/adJ
    # Cada entrada es un registro con campos:
    #   pid: # de proceso
    #   user: usuario que lo ejecutó
    #   ppid: # de proceso papá
    #   pgid: # de grupo de proceso
    #   sess: apuntador de sesión
    #   jobc: cuenta del control de trabajos
    #   stat: estado
    #   time: tiempo acumulado de CPU
    #   tt: abreviatura de la terminal que controla el proceso
    #   command: orden y argumentos
    def procesos_OpenBSD
      rproc = []
      p = %x(ps axwwj)
      l = p.split("\n")
      l[1..-1].each do |p|
        pp = p.split(" ")
        rproc.push({
          user: pp[0],
          pid: pp[1].to_i,
          ppid: pp[2].to_i,
          pgid: pp[3].to_i,
          sess: pp[4].to_i,
          jobc: pp[5].to_i,
          stat: pp[6],
          tt: pp[7],
          time: pp[8],
          command: pp[9..-1].join(" "),
        })
      end
      rproc
    end
    module_function :procesos_OpenBSD

    # Espacio en bytes usado por la ruta dada
    def discousado_OpenBSD(ruta)
      p = %x(du -s #{ruta})
      l = p.split(" ")
      return l[0].to_i * 512 # bytes
    end
    module_function :discousado_OpenBSD

    # Espacio en la partición que contiene la ruta dada
    # @return [puntodemontaje, usado, libre] en bytes
    def espacioparticion_OpenBSD(ruta)
      p = %x(df #{ruta})
      l = p.split("\n")
      c = l[1].split(" ")
      return [c[5], c[2].to_i*512, c[3].to_i*512]
    end
    module_function :espacioparticion_OpenBSD


    # Retorna una representación para humanos en sistema internacional
    # de unidades (ver https://es.wikipedia.org/wiki/Megabyte) de una
    # cantidad en bytes
    def tamhumano(bytes)
      if bytes<10000
        return bytes.to_s
      end
      if bytes<1000*1000
        k = bytes/1000
        return k.to_s + "kB"
      end
      if bytes<1000*1000*1000
        m = bytes/(1000*1000)
        return m.to_s + "MB"
      end
      if bytes<1000*1000*1000*1000
        g = bytes/(1000*1000*1000)
        return g.to_s + "GB"
      end
      if bytes<1000*1000*1000*1000*1000
        t = bytes/(1000*1000*1000*1000)
        return t.to_s + "TB"
      end
      p = bytes/(1000*1000*1000*1000*1000)
      return p.to_s + "PB"
    end
    module_function :tamhumano

  end
end