summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/facter/operatingsystem.rb2
-rw-r--r--lib/facter/operatingsystemrelease.rb4
-rw-r--r--lib/facter/uptime.rb31
-rw-r--r--lib/facter/uptime_days.rb7
-rw-r--r--lib/facter/uptime_hours.rb7
-rw-r--r--lib/facter/uptime_seconds.rb10
-rw-r--r--lib/facter/util/manufacturer.rb2
-rw-r--r--lib/facter/util/uptime.rb65
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