summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/DiskUtils.py70
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/Utils.py13
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/get_server_details.py137
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/multicast_response.py27
-rwxr-xr-xsrc/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py28
5 files changed, 139 insertions, 136 deletions
diff --git a/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py b/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py
index 69417f88..03c5019e 100644
--- a/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py
+++ b/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py
@@ -18,9 +18,10 @@
import os
import glob
import dbus
-
+import syslog
import Globals
-from Utils import *
+import Common
+import Utils
ONE_MB_SIZE = 1048576
@@ -240,3 +241,68 @@ def getMountPointByUuid(partitionUuid):
if entry.split()[0] == "UUID=" + partitionUuid:
return entry.split()[1]
return None
+
+
+def getDiskSizeInfo(partition):
+ # get values from df output
+ total = None
+ used = None
+ free = None
+ command = "df -kl -t ext3 -t ext4 -t xfs"
+ rv = Utils.runCommandFG(command, stdout=True, root=True)
+ message = Common.stripEmptyLines(rv["Stdout"])
+ if rv["Stderr"]:
+ Common.log(syslog.LOG_ERR, "failed to get disk details. %s" % Common.stripEmptyLines(rv["Stdout"]))
+ return None, None, None
+ for line in rv["Stdout"].split("\n"):
+ tokens = line.split()
+ if len(tokens) < 4:
+ continue
+ if tokens[0] == partition:
+ total = int(tokens[1]) / 1024.0
+ used = int(tokens[2]) / 1024.0
+ free = int(tokens[3]) / 1024.0
+ break
+
+ if total:
+ return total, used, free
+
+ # get total size from parted output
+ for i in range(len(partition), 0, -1):
+ pos = i - 1
+ if not partition[pos].isdigit():
+ break
+ disk = partition[:pos+1]
+ partitionNumber = partition[pos+1:]
+ if not partitionNumber.isdigit():
+ return None, None, None
+
+ number = int(partitionNumber)
+ command = "parted -ms %s unit kb print" % disk
+ rv = Utils.runCommandFG(command, stdout=True, root=True)
+ message = Common.stripEmptyLines(rv["Stdout"])
+ if rv["Stderr"]:
+ Common.log(syslog.LOG_ERR, "failed to get disk details. %s" % Common.stripEmptyLines(rv["Stdout"]))
+ return None, None, None
+
+ lines = rv["Stdout"].split(";\n")
+ if len(lines) < 3:
+ return None,None,None
+
+ for line in lines[2:]:
+ tokens = line.split(':')
+ if len(tokens) < 4:
+ continue
+ if tokens[0] == str(number):
+ total = int(tokens[3].split('kB')[0]) / 1024.0
+ break
+ return total, used, free
+
+
+def refreshHal():
+ rv = Utils.runCommandFG(["lshal"], stdout=True, root=True)
+ if rv["Stderr"]:
+ error = Common.stripEmptyLines(rv["Stderr"])
+ Common.log(syslog.LOG_ERR, "failed to execute lshal command. Error: %s" % error)
+ return False
+ return True
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 f9b3254b..6e33af0b 100644
--- a/src/com.gluster.storage.management.server.scripts/src/Utils.py
+++ b/src/com.gluster.storage.management.server.scripts/src/Utils.py
@@ -369,6 +369,7 @@ def getMeminfo():
continue # skip lines that don't parse
key, value = match.groups(['key', 'value'])
result[key] = int(value)
+ result['MemUsed'] = (result['MemTotal'] - result['MemFree'])
return result
@@ -397,7 +398,12 @@ def getLoadavg():
- Number of threads/processes that exist on the system (int)
- The PID of the most recently-created process on the system (int)
"""
- loadavgstr = open('/proc/loadavg', 'r').readline().strip()
+ 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,
@@ -410,7 +416,7 @@ def getLoadavg():
# Linux
ncpus = os.sysconf("SC_NPROCESSORS_ONLN")
if isinstance(ncpus, int) and ncpus > 0:
- final_avg = "%.2f" % (1.0 * avg1 / ncpus)
+ final_avg = "%.4f" % (1.0 * avg1 / ncpus)
# Future return everything when needed
# Commenting this for the time being
@@ -703,3 +709,6 @@ def removeFile(fileName, root=False):
def isLiveMode():
return os.path.exists(Globals.LIVE_MODE_FILE)
+
+def convertKbToMb(kb):
+ return kb / 1024.0
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 aac1e5e1..079c5f5b 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
@@ -22,6 +22,8 @@ import socket
import Globals
import Commands
import re
+import Common
+import DiskUtils
from ServerUtils import *
from Protocol import *
from NetworkUtils import *
@@ -29,107 +31,41 @@ from Disk import *
from XmlHandler import ResponseXml
from optparse import OptionParser
-def getDiskSizeInfo(partition):
- # get values from df output
- total = None
- used = None
- free = None
- commandList = ['df', '-kl', '-t', 'ext3', '-t', 'ext4']
- commandOutput = ""
- try:
- process = subprocess.Popen(commandList,
- stdout=subprocess.PIPE,
- stdin=subprocess.PIPE,
- stderr=subprocess.PIPE,
- close_fds=True)
- status = process.wait()
- if status == 0:
- commandOutput = process.communicate()
- except OSError:
- return None,None,None
-
- for line in commandOutput[0].split("\n"):
- tokens = line.split()
- if len(tokens) < 4:
- continue
- if tokens[0] == partition:
- total = int(tokens[1]) / (1024.0 * 1024.0)
- used = int(tokens[2]) / (1024.0 * 1024.0)
- free = int(tokens[3]) / (1024.0 * 1024.0)
- break
-
- if total:
- return total, used, free
-
- # get total size from parted output
- for i in range(len(partition), 0, -1):
- pos = i - 1
- if not partition[pos].isdigit():
- break
- disk = partition[:pos+1]
- number = int(partition[pos+1:])
-
- commandList = ['parted', '-ms', disk, 'unit', 'kb', 'print']
- commandOutput = ""
- try:
- process = subprocess.Popen(commandList,
- stdout=subprocess.PIPE,
- stdin=subprocess.PIPE,
- stderr=subprocess.PIPE,
- close_fds=True)
- status = process.wait()
- if status == 0:
- commandOutput = process.communicate()
- except OSError:
- return None,None,None
-
- lines = commandOutput[0].split(";\n")
- if len(lines) < 3:
- return None,None,None
-
- for line in lines[2:]:
- tokens = line.split(':')
- if len(tokens) < 4:
- continue
- if tokens[0] == str(number):
- total = int(tokens[3].split('kB')[0]) / (1024.0 * 1024.0)
- break
-
- return total, used, free
def getServerDetails(listall):
+
serverName = socket.gethostname()
+ meminfo = getMeminfo()
+ cpu = 100 * float(getLoadavg())
+ nameServerList, domain, searchDomain = readResolvConfFile()
+ if not domain:
+ domain = [None]
+
responseDom = ResponseXml()
- #responseDom.appendTagRoute("status.code", "0")
- #responseDom.appendTagRoute("status.message", "success")
serverTag = responseDom.appendTagRoute("server")
serverTag.appendChild(responseDom.createTag("name", serverName))
+ serverTag.appendChild(responseDom.createTag("domainname", domain[0]))
- nameServerList, domain, searchDomain = readResolvConfFile()
- if domain:
- domainName = domain[0]
- else:
- domainName = None
- serverTag.appendChild(responseDom.createTag("domainname", domainName))
- i = 1
for dns in nameServerList:
- serverTag.appendChild(responseDom.createTag("dns%s" % i, dns))
- i += 1
- #TODO: probe and retrieve timezone, ntp-server, preferred-network details and update the tags
+ serverTag.appendChild(responseDom.createTag("dns%s" % str(nameServerList.index(dns) +1) , dns))
+
+ #TODO: probe and retrieve timezone, ntp-server details and update the tags
deviceList = {}
interfaces = responseDom.createTag("networkInterfaces", None)
for device in getNetDeviceList():
+ if device["model"] in ['LOCAL', 'IPV6-IN-IPV4']:
+ continue
deviceList[device["device"]] = device
try:
macAddress = open("/sys/class/net/%s/address" % device["device"]).read().strip()
except IOError:
continue
interfaceTag = responseDom.createTag("networkInterface", None)
- interfaceTag.appendChild(responseDom.createTag("name", device["device"]))
- interfaceTag.appendChild(responseDom.createTag("hwAddr", macAddress))
- interfaceTag.appendChild(responseDom.createTag("speed", device["speed"]))
- interfaceTag.appendChild(responseDom.createTag("model", device["model"]))
+ interfaceTag.appendChild(responseDom.createTag("name", device["device"]))
+ interfaceTag.appendChild(responseDom.createTag("hwAddr",macAddress))
+ interfaceTag.appendChild(responseDom.createTag("speed", device["speed"]))
+ interfaceTag.appendChild(responseDom.createTag("model", device["model"]))
if deviceList[device["device"]]:
if deviceList[device["device"]]["onboot"]:
interfaceTag.appendChild(responseDom.createTag("onboot", "yes"))
@@ -154,31 +90,11 @@ def getServerDetails(listall):
responseDom.appendTag(serverTag)
serverTag.appendChild(responseDom.createTag("numOfCPUs", int(os.sysconf('SC_NPROCESSORS_ONLN'))))
- try:
- meminfo = getMeminfo()
- mem_total = meminfo['MemTotal']
- mem_free = meminfo['MemFree']
- mem_used = (mem_total - mem_free)
- value = "%.2f" % (1.0 * mem_used / mem_total)
- mem_percent = 100 * float(value)
- cpu = 100 * float(getLoadavg())
-
- except IOError:
- print "Error"
- responseDom.appendTagRoute("server.name", serverName)
- syslog.syslog(syslog.LOG_ERR, "Error finding memory information of server:%s" % serverName)
- return None
# refreshing hal data
- rv = Utils.runCommandFG(["lshal"], stdout=True, root=True)
- if rv["Stderr"]:
- error = Common.stripEmptyLines(rv["Stderr"])
- Common.log(syslog.LOG_ERR, "failed to execute lshal command. Error: %s" % error)
- print "failed to get disk details"
- return None
+ DiskUtils.refreshHal()
diskObj = Disk()
- ## disks = diskObj.getDiskList()
disks = diskObj.getMountableDiskList()
if disks is None:
@@ -187,9 +103,8 @@ def getServerDetails(listall):
return None
serverTag.appendChild(responseDom.createTag("cpuUsage", str(cpu)))
- #serverTag.appendChild(responseDom.createTag("totalMemory", str(mem_percent)))
- serverTag.appendChild(responseDom.createTag("totalMemory", str(mem_total)))
- serverTag.appendChild(responseDom.createTag("memoryInUse", str(mem_used)))
+ serverTag.appendChild(responseDom.createTag("totalMemory", str(convertKbToMb(meminfo['MemTotal']))))
+ serverTag.appendChild(responseDom.createTag("memoryInUse", str(convertKbToMb(meminfo['MemUsed']))))
serverTag.appendChild(responseDom.createTag("status", "ONLINE"))
serverTag.appendChild(responseDom.createTag("uuid", None))
@@ -209,7 +124,7 @@ def getServerDetails(listall):
partitionTag.appendChild(responseDom.createTag("description", disk['description']))
total, used, free = 0, 0, 0
if disk['size']:
- total, used, free = getDiskSizeInfo(disk['device'])
+ total, used, free = DiskUtils.getDiskSizeInfo(disk['device'])
if total:
partitionTag.appendChild(responseDom.createTag("space", str(total)))
totalDiskSpace += total
@@ -237,8 +152,10 @@ def main():
help="List only data disks")
(options, args) = parser.parse_args()
- print getServerDetails(options.listall).toxml()
-
+ responseXml = getServerDetails(options.listall)
+ if responseXml:
+ print responseXml.toxml()
+
sys.exit(0)
if __name__ == "__main__":
diff --git a/src/com.gluster.storage.management.server.scripts/src/multicast_response.py b/src/com.gluster.storage.management.server.scripts/src/multicast_response.py
index 3d8125d8..86cb064f 100644
--- a/src/com.gluster.storage.management.server.scripts/src/multicast_response.py
+++ b/src/com.gluster.storage.management.server.scripts/src/multicast_response.py
@@ -23,8 +23,9 @@ import Utils
import socket
import struct
import Globals
+from XmlHandler import *
-def isinpeer():
+def isInPeer():
command = "gluster peer status"
status = Utils.runCommand(command, output=True, root=True)
if status["Status"] == 0:
@@ -48,13 +49,23 @@ def response(multiCastGroup, port):
#TODO: Remove infinite loop and make this as a deamon (service)
while True:
request = socketRequest.recvfrom(1024)
- if request and request[0].upper() == "SERVERDISCOVERY":
- if isinpeer():
- time.sleep(5)
- continue
- socketSend.sendto("<response><servername>%s</servername><time>%s</time></response>" % (socket.gethostname(), time.time()),
- (multiCastGroup, port))
- request = None
+ if not request:
+ continue
+ dom = XDOM()
+ dom.parseString(request[0])
+ if not dom:
+ continue
+ if not dom.getTextByTagRoute("request.name"):
+ continue
+ requesttime = dom.getTextByTagRoute("request.time")
+ if not requesttime:
+ continue
+ if isinpeer():
+ time.sleep(5)
+ continue
+ socketSend.sendto("<response><servername>%s</servername><time>%s</time></response>" % (socket.gethostname(), requesttime),
+ (multiCastGroup, port))
+ request = None
def main():
response(Globals.MULTICAST_GROUP, Globals.MULTICAST_PORT)
diff --git a/src/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py b/src/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py
index 80e6101c..e9ae8666 100755
--- a/src/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py
+++ b/src/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py
@@ -46,18 +46,24 @@ def serverDiscoveryRequest(multiCastGroup, port):
mreq = struct.pack("4sl", socket.inet_aton(multiCastGroup), socket.INADDR_ANY)
socketReceive.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
- socketSend.sendto("ServerDiscovery", (multiCastGroup, port))
+ sendtime = time.time()
+ socketSend.sendto("<request><name>ServerDiscovery</name><time>%s</time></request>" % (sendtime), (multiCastGroup, port))
try:
while True:
response = socketReceive.recvfrom(200)
- if response and response[0].upper() != "SERVERDISCOVERY":
- dom = XDOM()
- dom.parseString(response[0])
- responsetime = dom.getTextByTagRoute("response.time")
- servername = dom.getTextByTagRoute("response.servername")
- if time.time() - float(responsetime) < 60:
- servers.append(servername)
+ if not response:
+ continue
+ dom = XDOM()
+ dom.parseString(response[0])
+ if not dom:
+ continue
+ if dom.getTextByTagRoute("request.name"):
+ continue
+ responsetime = dom.getTextByTagRoute("response.time")
+ servername = dom.getTextByTagRoute("response.servername")
+ if responsetime == str(sendtime):
+ servers.append(servername)
signal.signal(signal.SIGALRM, timeoutSignal)
signal.alarm(3)
except TimeoutException:
@@ -73,17 +79,11 @@ def main():
servers = set(servers)
try:
- #fp = open(Globals.DISCOVERED_SERVER_LIST_FILENAME, "w")
- #fp.writelines(list(servers))
- #fp.close()
for server in servers:
print server
except IOError:
Common.log(syslog.LOG_ERR, "Unable to open file %s" % Globals.DISCOVERED_SERVER_LIST_FILENAME)
sys.exit(-1)
-
- #for serverName in servers:
- # print serverName
sys.exit(0)
if __name__ == "__main__":