summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-07-26 05:17:34 -0700
committerShireesh Anjal <anjalshireesh@gmail.com>2011-07-26 05:17:34 -0700
commit070771ad1da13a9a6c874a51cecabd6abe98e603 (patch)
treef0bafc666a1764e76a598ce55582f60f514daed6 /src
parent5059a45cbd75e348cf90bd51c791aad8cec79367 (diff)
parent78b66abd6bc3fd4d5966ad72c2acd86ccb32d4e4 (diff)
Merge pull request #154 from TimothyAsir/master
Fixed bug in calculating cpu usage and cpu load.
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/Utils.py49
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/get_server_details.py2
2 files changed, 23 insertions, 28 deletions
diff --git a/src/com.gluster.storage.management.server.scripts/src/Utils.py b/src/com.gluster.storage.management.server.scripts/src/Utils.py
index fe2816d0..3408c14a 100644
--- a/src/com.gluster.storage.management.server.scripts/src/Utils.py
+++ b/src/com.gluster.storage.management.server.scripts/src/Utils.py
@@ -386,41 +386,36 @@ def getCpuUsage():
result[fields[0]] = tuple(data)
return result
+def _getCpuStatList():
+ try:
+ fp = open("/proc/stat")
+ cpuStatList = map(float, fp.readline().split()[1:])
+ fp.close()
+ return cpuStatList
+ except IOError, e:
+ Utils.log("Failed to open /proc/stat: %s" % str(e))
+ return None
+
+def getCpuUsageAvg():
+ st1 = _getCpuStatList()
+ time.sleep(2)
+ st2 = _getCpuStatList()
+ if not (st1 and st2):
+ return None
+ delta = [st2[i] - st1[i] for i in range(len(st1))]
+ cpuPercent = sum(delta[:3]) / delta[3] * 100.0
+ return str('%.4f' % cpuPercent)
def getLoadavg():
- """-> 5-tuple containing the following numbers in order:
- - 1-minute load average (float)
- - 5-minute load average (float)
- - 15-minute load average (float)
- - Number of threads/processes currently executing (<= number of
- CPUs) (int)
- - Number of threads/processes that exist on the system (int)
- - The PID of the most recently-created process on the system (int)
- """
try:
loadavgstr = open('/proc/loadavg', 'r').readline().strip()
except IOError:
syslog.syslog(syslog.LOG_ERR, "failed to find cpu load")
return None
- data = loadavgstr.split()
- avg1, avg5, avg15 = map(float, data[:3])
- threads_and_procs_running, threads_and_procs_total = map(int,
- data[3].split('/'))
- most_recent_pid = int(data[4])
- ncpus = 1
- final_avg = ""
- if hasattr(os, "sysconf"):
- if os.sysconf_names.has_key("SC_NPROCESSORS_ONLN"):
- # Linux
- ncpus = os.sysconf("SC_NPROCESSORS_ONLN")
- if isinstance(ncpus, int) and ncpus > 0:
- final_avg = "%.4f" % (1.0 * avg1 / ncpus)
-
- # Future return everything when needed
- # Commenting this for the time being
- # avg5, avg15, threads_and_procs_running, threads_and_procs_total, most_recent_pid
- return final_avg
+ data = map(float, loadavgstr.split()[1:])
+ # returns 1 minute load average
+ return data[0]
def getInfinibandPortStatus():
diff --git a/src/com.gluster.storage.management.server.scripts/src/get_server_details.py b/src/com.gluster.storage.management.server.scripts/src/get_server_details.py
index cda1518b..9c3da741 100755
--- a/src/com.gluster.storage.management.server.scripts/src/get_server_details.py
+++ b/src/com.gluster.storage.management.server.scripts/src/get_server_details.py
@@ -30,7 +30,7 @@ from optparse import OptionParser
def getServerDetails(listall):
serverName = socket.gethostname()
meminfo = getMeminfo()
- cpu = 100 * float(getLoadavg())
+ cpu = getCpuUsageAvg()
nameServerList, domain, searchDomain = readResolvConfFile()
if not domain:
domain = [None]