Issue #13535 has been updated by Jeff McCune.

Status changed from In Topic Branch Pending Review to Merged - Pending Release
Assignee deleted (Jeff McCune)

# Merged

Merged into 1.6.x, 2.x, and master as 
[8063ffe](https://github.com/puppetlabs/facter/commit/8063ffe)

# Thank you

Alex, thank you very much for this contribution.  Sorry it took so long to 
merge it into the main release branches.  Please let me know if you have any 
questions or concerns.

This fix should be released with Facter 1.6.14 and 2.0.0

-Jeff
----------------------------------------
Bug #13535: Facter uptime can be wrong or negative on AIX
https://projects.puppetlabs.com/issues/13535#change-73597

Author: Malcolm Howe
Status: Merged - Pending Release
Priority: Normal
Assignee: 
Category: library
Target version: 
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