Issue #13535 has been updated by Matthaus Owens.

Status changed from Merged - Pending Release to Closed

Released in Facter 1.6.14
----------------------------------------
Bug #13535: Facter uptime can be wrong or negative on AIX
https://projects.puppetlabs.com/issues/13535#change-76604

Author: Malcolm Howe
Status: Closed
Priority: Normal
Assignee: 
Category: library
Target version: 1.6.14
Keywords: 
Branch: https://github.com/puppetlabs/facter/pull/333
Affected Facter version: 1.6.6


On AIX facter can show a negative uptime

    uptime => -260 days
    uptime_days => -260
    uptime_hours => -6219
    uptime_seconds => -22385831

This occurs because of the four methods for calculating uptime in 
facter/util/uptime.rb the only one that can be used on AIX is who -b. But on 
AIX who -b doesn't display the year

    $ who -b
    .        system boot 14 Dec 10:30

so the current year is assumed which in this example results in a negative 
uptime. A possible solution would be to use the uptime (or equivalently w -u) 
command which produces similar output on AIX as it does on Linux

    $ uptime
    10:46AM   up 106 days,  23:18,  3 users,  load average: 0.03, 0.33, 0.53


For example

    --- uptime.rb.save      2012-02-28 11:25:38.000000000 +0000
    +++ uptime.rb   2012-03-30 11:03:05.000000000 +0100
    @@ -4,7 +4,7 @@
    #
    module Facter::Util::Uptime
    def self.get_uptime_seconds_unix
    -     uptime_proc_uptime or uptime_sysctl or uptime_kstat or 
uptime_who_dash_b
    +     uptime_proc_uptime or uptime_sysctl or uptime_kstat or uptime_uptime 
or uptime_who_dash_b
    end
    def self.get_uptime_seconds_win
    @@ -37,6 +37,20 @@
    end
    end
    +   def self.uptime_uptime
    +     if output = Facter::Util::Resolution.exec("#{uptime_uptime_cmd} 
2>/dev/null")
    +       up=0
    +       if output =~ /(\d+) days,\s+(\d+):(\d+)/
    +           up=86400*$1.to_i + 3600*$2.to_i + 60*$3.to_i
    +       elsif output =~ /(\d+):(\d+),/
    +           up=3600*$1.to_i + 60*$2.to_i
    +       elsif output =~ /(\d+) mins,/
    +           up=($1.to_i*60)
    +       end
    +       up
    +     end
    +   end
    +
    def self.uptime_who_dash_b
    if output = Facter::Util::Resolution.exec("#{uptime_who_cmd} 2>/dev/null")
    compute_uptime(Time.parse(output))
    @@ -57,6 +71,10 @@
    def self.uptime_kstat_cmd
    'kstat -p unix:::boot_time'
    +   end
    +
    +   def self.uptime_uptime_cmd
    +     'uptime'
    end
    def self.uptime_who_cmd

results in the facter output

    uptime => 106 days
    uptime_days => 106
    uptime_hours => 2567
    uptime_seconds => 9242280




-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to