module Facter::Util::Uptime

A module to gather uptime facts

Public Class Methods

get_uptime_seconds_unix() click to toggle source
# File lib/facter/util/uptime.rb, line 6
def self.get_uptime_seconds_unix
  uptime_proc_uptime or uptime_sysctl or uptime_executable
end
get_uptime_seconds_win() click to toggle source
# File lib/facter/util/uptime.rb, line 10
def self.get_uptime_seconds_win
  require 'facter/util/wmi'

  last_boot = ""
  Facter::Util::WMI.execquery("select * from Win32_OperatingSystem").each do |x|
    last_boot = x.LastBootupTime
  end
  self.compute_uptime(Time.parse(last_boot.split('.').first))
end

Private Class Methods

compute_uptime(time) click to toggle source
# File lib/facter/util/uptime.rb, line 68
def self.compute_uptime(time)
  (Time.now - time).to_i
end
uptime_executable() click to toggle source
# File lib/facter/util/uptime.rb, line 38
def self.uptime_executable
  output = Facter::Core::Execution.execute("#{uptime_executable_cmd} 2>/dev/null", :on_fail => nil)

  if output
    up=0
    if output =~ /(\d+) day(?:s|\(s\))?,?\s+(\d+):-?(\d+)/
      # Regexp handles Solaris, AIX, HP-UX, and Tru64.
      # 'day(?:s|\(s\))?' says maybe 'day', 'days',
      #   or 'day(s)', and don't set $2.
      up=86400*$1.to_i + 3600*$2.to_i + 60*$3.to_i
    elsif output =~ /(\d+) day(?:s|\(s\))?,\s+(\d+) hr(?:s|\(s\))?,/
      up=86400*$1.to_i + 3600*$2.to_i
    elsif output =~ /(\d+) day(?:s|\(s\))?,\s+(\d+) min(?:s|\(s\))?,/
      up=86400*$1.to_i + 60*$2.to_i
    elsif output =~ /(\d+) day(?:s|\(s\))?,/
      up=86400*$1.to_i
    elsif output =~ /up\s+(\d+):-?(\d+),/
      # must anchor to 'up' to avoid matching time of day
      # at beginning of line. Certain versions of uptime on
      # Solaris may insert a '-' into the minutes field.
      up=3600*$1.to_i + 60*$2.to_i
    elsif output =~ /(\d+) hr(?:s|\(s\))?,/
      up=3600*$1.to_i
    elsif output =~ /(\d+) min(?:s|\(s\))?,/
      up=60*$1.to_i
    end
    up
  end
end
uptime_executable_cmd() click to toggle source
# File lib/facter/util/uptime.rb, line 80
def self.uptime_executable_cmd
  "uptime"
end
uptime_file() click to toggle source
# File lib/facter/util/uptime.rb, line 72
def self.uptime_file
  "/proc/uptime"
end
uptime_proc_uptime() click to toggle source
# File lib/facter/util/uptime.rb, line 22
def self.uptime_proc_uptime
  output = Facter::Core::Execution.execute("/bin/cat #{uptime_file} 2>/dev/null")

  if not output.empty?
    output.chomp.split(" ").first.to_i
  end
end
uptime_sysctl() click to toggle source
# File lib/facter/util/uptime.rb, line 30
def self.uptime_sysctl
  require 'facter/util/posix'
  output = Facter::Util::POSIX.sysctl(uptime_sysctl_variable)
  if output
    compute_uptime(Time.at(output.match(/\d+/)[0].to_i))
  end
end
uptime_sysctl_variable() click to toggle source
# File lib/facter/util/uptime.rb, line 76
def self.uptime_sysctl_variable
  'kern.boottime'
end