getloadavg: try harder to get loadavg on alt platforms
authorFabian Groffen <grobian@gentoo.org>
Sun, 13 Mar 2011 14:59:38 +0000 (15:59 +0100)
committerFabian Groffen <grobian@gentoo.org>
Sun, 13 Mar 2011 14:59:38 +0000 (15:59 +0100)
Patch from Michael Haubenwallner to read loadavg from `uptime` on AIX
and HP-UX.

pym/_emerge/getloadavg.py

index e9babf13effd9375888ca8ca739c8a7394ac8e30..8e62ebf90cc6ae411f13d34cd2a4fee77cf480e1 100644 (file)
@@ -2,6 +2,7 @@
 # Distributed under the terms of the GNU General Public License v2
 
 from portage import os
+import platform
 
 getloadavg = getattr(os, "getloadavg", None)
 if getloadavg is None:
@@ -11,8 +12,16 @@ if getloadavg is None:
                Raises OSError if the load average was unobtainable.
                """
                try:
-                       loadavg_str = open('/proc/loadavg').readline()
-               except IOError:
+                       if platform.system() in ["AIX", "HP-UX"]:
+                               loadavg_str = os.popen('LANG=C /usr/bin/uptime 2>/dev/null').readline().split()
+                               while loadavg_str[0] != 'load' and loadavg_str[1] != 'average:':
+                                   loadavg_str = loadavg_str[1:]
+                               loadavg_str = loadavg_str[2:5]
+                               loadavg_str = [x.rstrip(',') for x in loadavg_str]
+                               loadavg_str = ' '.join(loadavg_str)
+                       else:
+                               loadavg_str = open('/proc/loadavg').readline()
+               except (IOError, IndexError):
                        # getloadavg() is only supposed to raise OSError, so convert
                        raise OSError('unknown')
                loadavg_split = loadavg_str.split()