diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/facter/operatingsystem.rb | 2 | ||||
-rw-r--r-- | lib/facter/operatingsystemrelease.rb | 4 | ||||
-rw-r--r-- | lib/facter/uptime.rb | 31 | ||||
-rw-r--r-- | lib/facter/uptime_days.rb | 7 | ||||
-rw-r--r-- | lib/facter/uptime_hours.rb | 7 | ||||
-rw-r--r-- | lib/facter/uptime_seconds.rb | 10 | ||||
-rw-r--r-- | lib/facter/util/manufacturer.rb | 2 | ||||
-rw-r--r-- | lib/facter/util/uptime.rb | 65 |
8 files changed, 89 insertions, 39 deletions
diff --git a/lib/facter/operatingsystem.rb b/lib/facter/operatingsystem.rb index d909fba..c5a3dc1 100644 --- a/lib/facter/operatingsystem.rb +++ b/lib/facter/operatingsystem.rb @@ -20,6 +20,8 @@ Facter.add(:operatingsystem) do "Mandriva" elsif FileTest.exists?("/etc/mandrake-release") "Mandrake" + elsif FileTest.exists?("/etc/meego-release") + "MeeGo" elsif FileTest.exists?("/etc/arch-release") "Archlinux" elsif FileTest.exists?("/etc/enterprise-release") diff --git a/lib/facter/operatingsystemrelease.rb b/lib/facter/operatingsystemrelease.rb index 91f40a7..30f2989 100644 --- a/lib/facter/operatingsystemrelease.rb +++ b/lib/facter/operatingsystemrelease.rb @@ -1,11 +1,13 @@ Facter.add(:operatingsystemrelease) do - confine :operatingsystem => %w{CentOS Fedora oel ovs RedHat} + confine :operatingsystem => %w{CentOS Fedora oel ovs RedHat MeeGo} setcode do case Facter.value(:operatingsystem) when "CentOS", "RedHat" releasefile = "/etc/redhat-release" when "Fedora" releasefile = "/etc/fedora-release" + when "MeeGo" + releasefile = "/etc/meego-release" when "OEL" releasefile = "/etc/enterprise-release" when "OVS" diff --git a/lib/facter/uptime.rb b/lib/facter/uptime.rb index 3a3bc86..56a959b 100644 --- a/lib/facter/uptime.rb +++ b/lib/facter/uptime.rb @@ -1,20 +1,23 @@ require 'facter/util/uptime' Facter.add(:uptime) do - confine :operatingsystem => %w{Solaris Linux Fedora RedHat CentOS SuSE SLES Debian Ubuntu Gentoo AIX} - setcode do - Facter::Util::Uptime.get_uptime_simple - end -end + setcode do + seconds = Facter.fact(:uptime_seconds).value -if FileTest.exists?("/proc/uptime") - uptime = Facter::Util::Uptime.get_uptime + unless seconds + "unknown" + else + days = seconds / (60 * 60 * 24) + hours = seconds / (60 * 60) % 24 + minutes = seconds / 60 % 60 - %w{days hours seconds}.each do |label| - Facter.add("uptime_" + label) do - setcode do - Facter::Util::Uptime.get_uptime_period(uptime, label) - end - end - end + case days + when 0 then "#{hours}:#{"%02d" % minutes} hours" + when 1 then '1 day' + else "#{days} days" + end + end + + end end + diff --git a/lib/facter/uptime_days.rb b/lib/facter/uptime_days.rb new file mode 100644 index 0000000..add305c --- /dev/null +++ b/lib/facter/uptime_days.rb @@ -0,0 +1,7 @@ +Facter.add(:uptime_days) do + setcode do + hours = Facter.value(:uptime_hours) + hours && hours / 24 # hours in day + end +end + diff --git a/lib/facter/uptime_hours.rb b/lib/facter/uptime_hours.rb new file mode 100644 index 0000000..ce691d2 --- /dev/null +++ b/lib/facter/uptime_hours.rb @@ -0,0 +1,7 @@ +Facter.add(:uptime_hours) do + setcode do + seconds = Facter.value(:uptime_seconds) + seconds && seconds / (60 * 60) # seconds in hour + end +end + diff --git a/lib/facter/uptime_seconds.rb b/lib/facter/uptime_seconds.rb new file mode 100644 index 0000000..14bb573 --- /dev/null +++ b/lib/facter/uptime_seconds.rb @@ -0,0 +1,10 @@ +require 'facter/util/uptime' + +Facter.add(:uptime_seconds) do + setcode { Facter::Util::Uptime.get_uptime_seconds_unix } +end + +Facter.add(:uptime_seconds) do + confine :kernel => :windows + setcode { Facter::Util::Uptime.get_uptime_seconds_win } +end diff --git a/lib/facter/util/manufacturer.rb b/lib/facter/util/manufacturer.rb index b781e12..112380b 100644 --- a/lib/facter/util/manufacturer.rb +++ b/lib/facter/util/manufacturer.rb @@ -35,7 +35,7 @@ module Facter::Manufacturer v.each do |v2| v2.each_pair do |value,facterkey| output.split(splitstr).each do |line| - if line =~ /#{key}/ and ( line =~ /#{value} 0x\d+ \(([-\w].*)\)\n*/ or line =~ /#{value} ([-\w].*)\n*/ ) + if line =~ /#{key}/ and line =~ /\n\s+#{value} (.+)\n/ result = $1.strip Facter.add(facterkey) do confine :kernel => [ :linux, :freebsd, :netbsd, :sunos ] diff --git a/lib/facter/util/uptime.rb b/lib/facter/util/uptime.rb index c1e339b..353ebf5 100644 --- a/lib/facter/util/uptime.rb +++ b/lib/facter/util/uptime.rb @@ -1,32 +1,51 @@ +require 'time' + # A module to gather uptime facts # module Facter::Util::Uptime - def self.get_uptime_simple - time = Facter::Util::Resolution.exec('uptime') - if time =~ /up\s*(\d+\s\w+)/ - $1 - elsif time =~ /up\s*(\d+:\d+)/ - $1 + " hours" - else - "unknown" + def self.get_uptime_seconds_unix + uptime_proc_uptime or uptime_sysctl or uptime_who_dash_b + end + + def self.get_uptime_seconds_win + require 'Win32API' + getTickCount = Win32API.new("kernel32", "GetTickCount", nil, 'L') + compute_uptime(Time.at(getTickCount.call() / 1000.0)) + end + + private + + def self.uptime_proc_uptime + if output = `/bin/cat #{uptime_file} 2>/dev/null` and $?.success? + output.chomp.split(" ").first.to_i + end + end + + def self.uptime_sysctl + if output = `#{uptime_sysctl_cmd} 2>/dev/null` and $?.success? + compute_uptime(Time.at(output.unpack('L').first)) + end + end + + def self.uptime_who_dash_b + if output = `#{uptime_who_cmd} 2>/dev/null` and $?.success? + compute_uptime(Time.parse(output)) end end - def self.get_uptime - r = IO.popen("/bin/cat /proc/uptime") - uptime, idletime = r.readline.split(" ") - r.close - uptime_seconds = uptime.to_i + def self.compute_uptime(time) + (Time.now - time).to_i + end + + def self.uptime_file + "/proc/uptime" + end + + def self.uptime_sysctl_cmd + 'sysctl -b kern.boottime' end - def self.get_uptime_period(seconds, label) - case label - when 'days' - value = seconds / 86400 - when 'hours' - value = seconds / 3600 - when 'seconds' - seconds - end + def self.uptime_who_cmd + 'who -b' end -end +end |