diff options
| author | Tim <timothyasir@gluster.com> | 2011-06-22 21:06:30 +0530 |
|---|---|---|
| committer | Tim <timothyasir@gluster.com> | 2011-06-22 21:06:30 +0530 |
| commit | 1ddd638a2e2c6531535249cf2301e0c5a1b1c844 (patch) | |
| tree | 5760cfeac92470cef865bba25b9bcda58607bec2 /src/com.gluster.storage.management.server.scripts | |
| parent | d37d17a75ef78fc05b2038c01e47b6b46aab60e4 (diff) | |
Added functionalities to get partition details into get_server_details.py
Diffstat (limited to 'src/com.gluster.storage.management.server.scripts')
| -rw-r--r-- | src/com.gluster.storage.management.server.scripts/src/DiskUtils.py | 152 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.server.scripts/src/get_server_details.py | 41 |
2 files changed, 135 insertions, 58 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 03c5019e..8571a807 100644 --- a/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py +++ b/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py @@ -21,19 +21,22 @@ import dbus import syslog import Globals import Common +import time import Utils +import Disk +import Protocol ONE_MB_SIZE = 1048576 def _stripDev(device): - if isString(device) and device.startswith("/dev/"): + if Utils.isString(device) and device.startswith("/dev/"): return device[5:] return device def _addDev(deviceName): - if isString(deviceName) and not deviceName.startswith("/dev/"): + if Utils.isString(deviceName) and not deviceName.startswith("/dev/"): return "/dev/" + deviceName return deviceName @@ -48,7 +51,7 @@ def getDeviceName(device): def getDevice(deviceName): - if isString(deviceName): + if Utils.isString(deviceName): return _addDev(deviceName) if type(deviceName) == type([]): nameList = [] @@ -73,7 +76,7 @@ def getUuidByDiskPartition(device): def getDiskPartitionUuid(partition): - log("WARNING: getDiskPartitionUuid() is deprecated by getUuidByDiskPartition()") + Utils.log("WARNING: getDiskPartitionUuid() is deprecated by getUuidByDiskPartition()") return getUuidByDiskPartition(partition) @@ -81,17 +84,18 @@ def getDiskPartitionByLabel(label): ## TODO: Finding needs to be enhanced labelFile = "/dev/disk/by-label/%s" % label if os.path.exists(labelFile): - return getDeviceName(os.path.realpath(labelFile)) + if os.path.islink(labelFile): + return getDeviceName(os.path.realpath(labelFile)) return None def getDeviceByLabel(label): - log("WARNING: getDeviceByLabel() is deprecated by getDiskPartitionByLabel()") + Utils.log("WARNING: getDeviceByLabel() is deprecated by getDiskPartitionByLabel()") return getDiskPartitionByLabel(label) def getDiskPartitionLabel(device): - rv = runCommandFG(["sudo", "e2label", device], stdout=True) + rv = Utils.runCommandFG(["sudo", "e2label", device], stdout=True) if rv["Status"] == 0: return rv["Stdout"].strip() return False @@ -104,19 +108,21 @@ def getRootPartition(fsTabFile=Globals.FSTAB_FILE): if fsTabEntry["Device"].startswith("UUID="): return getDiskPartitionByUuid(fsTabEntry["Device"].split("UUID=")[-1]) if fsTabEntry["Device"].startswith("LABEL="): - return getDiskPartitionByLabel(fsTabEntry["Device"].split("LABEL=")[-1]) + partitionName = getDiskPartitionByLabel(fsTabEntry["Device"].split("LABEL=")[-1]) + if partitionName: + return partitionName return getDeviceName(fsTabEntry["Device"]) return None def getOsDisk(): - log("WARNING: getOsDisk() is deprecated by getRootPartition()") + Utils.log("WARNING: getOsDisk() is deprecated by getRootPartition()") return getRootPartition() -def getDiskList(diskDeviceList=None): +def getDiskInfo(diskDeviceList=None): diskDeviceList = getDevice(diskDeviceList) - if isString(diskDeviceList): + if Utils.isString(diskDeviceList): diskDeviceList = [diskDeviceList] dbusSystemBus = dbus.SystemBus() @@ -125,12 +131,15 @@ def getDiskList(diskDeviceList=None): halManager = dbus.Interface(halObj, "org.freedesktop.Hal.Manager") storageUdiList = halManager.FindDeviceByCapability("storage") + diskInfo = {} diskList = [] + totalDiskSpace = 0 + totalDiskUsage = 0 for udi in storageUdiList: halDeviceObj = dbusSystemBus.get_object("org.freedesktop.Hal", udi) halDevice = dbus.Interface(halDeviceObj, "org.freedesktop.Hal.Device") - if halDevice.GetProperty("storage.drive_type") == "cdrom" or \ + if halDevice.GetProperty("storage.drive_type") in ["cdrom", "floppy"] or \ halDevice.GetProperty("block.is_volume"): continue @@ -142,11 +151,12 @@ def getDiskList(diskDeviceList=None): if halDevice.GetProperty('storage.removable'): disk["Size"] = long(halDevice.GetProperty('storage.removable.media_size')) else: - disk["Size"] = long(halDevice.GetProperty('storage.size')) + disk["Size"] = long(halDevice.GetProperty('storage.size')) / 1024**2 disk["Interface"] = str(halDevice.GetProperty('storage.bus')) disk["DriveType"] = str(halDevice.GetProperty('storage.drive_type')) partitionList = [] partitionUdiList = halManager.FindDeviceStringMatch("info.parent", udi) + diskSpaceInUse = 0 for partitionUdi in partitionUdiList: partitionHalDeviceObj = dbusSystemBus.get_object("org.freedesktop.Hal", partitionUdi) @@ -157,24 +167,36 @@ def getDiskList(diskDeviceList=None): partition = {} partition["Device"] = str(partitionHalDevice.GetProperty('block.device')) partition["Uuid"] = str(partitionHalDevice.GetProperty('volume.uuid')) - partition["Size"] = long(partitionHalDevice.GetProperty('volume.size')) + partition["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2 partition["Fstype"] = str(partitionHalDevice.GetProperty('volume.fstype')) partition["Fsversion"] = str(partitionHalDevice.GetProperty('volume.fsversion')) partition["Label"] = str(partitionHalDevice.GetProperty('volume.label')) + partition["mountPoint"] = str(partitionHalDevice.GetProperty('volume.mount_point')) + partition["readOnlyAccess"] = str(partitionHalDevice.GetProperty('volume.is_mounted_read_only')) partition["Used"] = 0L if partitionHalDevice.GetProperty("volume.is_mounted"): - rv = runCommandFG(["df", str(partitionHalDevice.GetProperty('volume.mount_point'))], stdout=True) + rv = Utils.runCommandFG(["df", str(partitionHalDevice.GetProperty('volume.mount_point'))], stdout=True) if rv["Status"] == 0: try: - partition["Used"] = long(rv["Stdout"].split("\n")[1].split()[2]) + partition["Used"] = long(rv["Stdout"].split("\n")[1].split()[2]) / 1024 + diskSpaceInUse += partition["Used"] except IndexError: pass except ValueError: pass partitionList.append(partition) disk["Partitions"] = partitionList + disk["Used"] = diskSpaceInUse + totalDiskSpace += disk["Size"] + totalDiskUsage += disk["Used"] diskList.append(disk) - return diskList + diskInfo["disks"] = diskList + diskInfo["totalDiskSpace"] = totalDiskSpace + diskInfo["diskSpaceInUse"] = totalDiskUsage + return diskInfo + +def getDiskList(diskDeviceList=None): + return diskInfo["disks"] def readFsTab(fsTabFile=Globals.FSTAB_FILE): try: @@ -252,7 +274,7 @@ def getDiskSizeInfo(partition): 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"])) + Common.Utils.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() @@ -282,7 +304,7 @@ def getDiskSizeInfo(partition): 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"])) + Common.Utils.log(syslog.LOG_ERR, "failed to get disk details. %s" % Common.stripEmptyLines(rv["Stdout"])) return None, None, None lines = rv["Stdout"].split(";\n") @@ -303,6 +325,96 @@ 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) + Common.Utils.log(syslog.LOG_ERR, "failed to execute lshal command. Error: %s" % error) return False return True + + +def isDataDiskPartitionFormatted(device): + #Todo: Proper label needs to be added for data partition + #if getDiskPartitionLabel(device) != Globals.DATA_PARTITION_LABEL: + # return False + + diskObj = Disk.Disk() + for disk in diskObj.getMountableDiskList(): + if disk['device'].upper() == device.upper(): + mountPoint = disk['mount_point'] + if not mountPoint: + return False + if not os.path.exists(mountPoint): + return False + + uuid = getUuidByDiskPartition(device) + if not uuid: + return False + + for fsTabEntry in readFsTab(): + if fsTabEntry["Device"] == ("UUID=%s" % uuid) and fsTabEntry["MountPoint"] == mountPoint: + return True + return False + + +def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None): + diskDeviceList = getDevice(diskDeviceList) + if Utils.isString(diskDeviceList): + diskDeviceList = [diskDeviceList] + + if skipDisk: + skipDisk = getDevice(skipDisk) + if Utils.isString(skipDisk): + skipDisk = [skipDisk] + + diskInfo = getDiskInfo(diskDeviceList) + diskList = diskInfo["disks"] + if not diskList: + return None + + diskDom = Protocol.XDOM() + disksTag = diskDom.createTag("disks", None) + disksTag.appendChild(diskDom.createTag("totalDiskSpace", diskInfo["totalDiskSpace"])) + disksTag.appendChild(diskDom.createTag("diskSpaceInUse", diskInfo["diskSpaceInUse"])) + if not bootPartition: + bootPartition = getRootPartition() + for disk in diskList: + if skipDisk and disk["Device"] in skipDisk: + continue + diskTag = diskDom.createTag("disk", None) + diskTag.appendChild(diskDom.createTag("device", getDeviceName(disk["Device"]))) + diskTag.appendChild(diskDom.createTag("description", disk["Description"])) + diskTag.appendChild(diskDom.createTag("size", str(disk["Size"]))) + diskTag.appendChild(diskDom.createTag("used", str(disk["Used"]))) + diskTag.appendChild(diskDom.createTag("interface", disk["Interface"])) + if disk["Partitions"]: + diskTag.appendChild(diskDom.createTag("init", "yes")) + else: + diskTag.appendChild(diskDom.createTag("init", "no")) + for partition in disk["Partitions"]: + partitionTag = diskDom.createTag("partition", None) + device = getDeviceName(partition["Device"]) + partitionTag.appendChild(diskDom.createTag("name", device)) + partitionTag.appendChild(diskDom.createTag("mountPoint", partition['mountPoint'])) + if not partition["Uuid"]: + partitionTag.appendChild(diskDom.createTag("uuid", getUuidByDiskPartition("/dev/" + device))) + else: + partitionTag.appendChild(diskDom.createTag("uuid", partition["Uuid"])) + partitionTag.appendChild(diskDom.createTag("size", str(partition["Size"]))) + partitionTag.appendChild(diskDom.createTag("free", str((partition["Size"] - partition["Used"])))) + partitionTag.appendChild(diskDom.createTag("used", partition["Used"])) + partitionTag.appendChild(diskDom.createTag("filesystem", partition["Fstype"])) + partitionTag.appendChild(diskDom.createTag("readOnlyAccess", partition["readOnlyAccess"])) + if partition['mountPoint'] or isDataDiskPartitionFormatted(partition["Device"]): + partitionTag.appendChild(diskDom.createTag("status", "READY")) + else: + partitionTag.appendChild(diskDom.createTag("status", "UNINITIALIZED")) + if "/export/" in partition["mountPoint"]: + partitionTag.appendChild(diskDom.createTag("dataDisk", "True")) + else: + partitionTag.appendChild(diskDom.createTag("dataDisk", "False")) + if "/" == partition["mountPoint"]: + partitionTag.appendChild(diskDom.createTag("boot", "yes")) + else: + partitionTag.appendChild(diskDom.createTag("boot", "no")) + diskTag.appendChild(partitionTag) + disksTag.appendChild(diskTag) + diskDom.addTag(disksTag) + return diskDom 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 ce1d97e6..2ab3cdd4 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 @@ -33,7 +33,6 @@ from optparse import OptionParser def getServerDetails(listall): - serverName = socket.gethostname() meminfo = getMeminfo() cpu = 100 * float(getLoadavg()) @@ -94,10 +93,8 @@ def getServerDetails(listall): # refreshing hal data DiskUtils.refreshHal() - diskObj = Disk() - disks = diskObj.getMountableDiskList() - - if disks is None: + diskDom = DiskUtils.getDiskDom() + if not diskDom: print "No disk found!" syslog.syslog(syslog.LOG_ERR, "Error finding disk information of server:%s" % serverName) return None @@ -108,39 +105,7 @@ def getServerDetails(listall): serverTag.appendChild(responseDom.createTag("status", "ONLINE")) serverTag.appendChild(responseDom.createTag("uuid", None)) - totalDiskSpace = 0 - diskSpaceInUse = 0 - diskTag = responseDom.createTag("disks") - for disk in disks: - if not listall: - if not disk['mount_point'].startswith("/export/"): - continue - if disk['interface'] in ['usb', 'mmc']: - continue - partitionTag = responseDom.createTag("disk", None) - partitionTag.appendChild(responseDom.createTag("name", os.path.basename(disk['device']))) - partitionTag.appendChild(responseDom.createTag("mountPoint", disk['mount_point'])) - partitionTag.appendChild(responseDom.createTag("serverName", serverName)) - partitionTag.appendChild(responseDom.createTag("description", disk['description'])) - total, used, free = 0, 0, 0 - if disk['size']: - total, used, free = DiskUtils.getDiskSizeInfo(disk['device']) - if total: - partitionTag.appendChild(responseDom.createTag("space", str(total))) - totalDiskSpace += total - else: - partitionTag.appendChild(responseDom.createTag("space", "NA")) - if used: - partitionTag.appendChild(responseDom.createTag("spaceInUse", str(used))) - diskSpaceInUse += used - partitionTag.appendChild(responseDom.createTag("status", "AVAILABLE")) - else: - partitionTag.appendChild(responseDom.createTag("spaceInUse", "NA")) - partitionTag.appendChild(responseDom.createTag("status", "UNINITIALIZED")) - diskTag.appendChild(partitionTag) - serverTag.appendChild(diskTag) - serverTag.appendChild(responseDom.createTag("totalDiskSpace", str(totalDiskSpace))) - serverTag.appendChild(responseDom.createTag("diskSpaceInUse", str(diskSpaceInUse))) + serverTag.appendChild(diskDom.getElementsByTagRoute("disks")[0]) return serverTag def main(): |
