summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim <timothyasir@gluster.com>2011-09-16 14:49:02 +0530
committerTim <timothyasir@gluster.com>2011-09-16 15:37:16 +0530
commitaa72c3755fbc9d0004a9a5fe9e386f7071d0055c (patch)
tree8febb6b0779afc3705574a35cd2a3e4e45ca23e0
parent0efb5564a3dc64c58f875642a362b176db622c8c (diff)
Disk details are probed using sysfs, even when HAL found.
Signed-off-by: Tim <timothyasir@gluster.com>
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py426
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py155
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py17
3 files changed, 256 insertions, 342 deletions
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py
index b28ab0f7..5d7b0b4a 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py
@@ -96,17 +96,6 @@ def getDiskPartitionLabel(device):
return False
-def readFile(fileName):
- lines = None
- try:
- fp = open(fileName)
- lines = fp.readlines()
- fp.close()
- except IOError, e:
- Utils.log("failed to read file %s: %s" % (file, str(e)))
- return lines
-
-
def getRootPartition(fsTabFile=Globals.FSTAB_FILE):
fsTabEntryList = FsTabUtils.readFsTab(fsTabFile)
for fsTabEntry in fsTabEntryList:
@@ -120,26 +109,6 @@ def getRootPartition(fsTabFile=Globals.FSTAB_FILE):
return getDeviceName(fsTabEntry["Device"])
return None
-def getMountInfo():
- mountInfo = {}
- for line in readFile("/proc/mounts"):
- str = line.strip()
- if str.startswith("/dev/"):
- tokens = str.split()
- device = {}
- mountPoint = tokens[1].strip()
- device["MountPoint"] = mountPoint
- device["FsType"] = tokens[2].strip()
- device["Uuid"] = getDiskPartitionUuid(tokens[0].strip())
- device["Status"] = "INITIALIZED"
- if mountPoint:
- if mountPoint in ["/", "/boot"]:
- device["Type"] = "BOOT"
- else:
- device["Type"] = "DATA"
- mountInfo[tokens[0].strip()] = device
- return mountInfo
-
def getRaidDisk():
array = []
arrayList = []
@@ -199,194 +168,75 @@ def getOsDisk():
Utils.log("WARNING: getOsDisk() is deprecated by getRootPartition()")
return getRootPartition()
-def getAMIDiskInfo():
- diskInfo = {}
- diskList = []
+def getDiskInfo(diskNameList=None):
+ procPartitionsDict = getProcPartitions()
+ diskDict = {}
+ for name, values in procPartitionsDict.iteritems():
+ values["Description"] = None
+ values["Uuid"] = None
+ values["FsType"] = None
+ values["MountPoint"] = None
+ values["SpaceInUse"] = None
+ values["Member"] = None
+ ## extras ?!?!
+ values["Init"] = False
+ values["Status"] = None
+ values["Interface"] = None
+ values["DriveType"] = None
+ values["Type"] = None
+ values["FsVersion"] = None
+ values["ReadOnlyAccess"] = None
+
+ device = getDevice(name)
+ values["Uuid"] = getUuidByDiskPartition(device)
+ rv = Utils.runCommand("blkid -c /dev/null -o value %s" % device, output=True, root=True)
+ if rv["Status"] == 0:
+ lines = rv["Stdout"].strip().split("\n")
+ values["FsType"] = lines[-1].strip()
+ values["MountPoint"] = getDeviceMountPoint(device)
+ if values["FsType"]:
+ values["Init"] = True
+ if values["MountPoint"]:
+ rv = Utils.runCommand(["df", values["MountPoint"]], output=True)
+ if rv["Status"] == 0:
+ try:
+ values["SpaceInUse"] = long(rv["Stdout"].split("\n")[1].split()[2])
+ except IndexError, e:
+ pass
+ except ValueError, e:
+ pass
+ if os.path.isdir("/sys/block/%s" % name):
+ model = Utils.readFile("/sys/block/%s/device/model" % name)
+ vendor = Utils.readFile("/sys/block/%s/device/vendor" % name)
+ values["Description"] = "%s %s" % (model.strip(), vendor.strip())
+ values["Partitions"] = {}
+ diskDict[name] = values
+
+ for diskName in diskDict.keys():
+ del procPartitionsDict[diskName]
+ for partName, values in procPartitionsDict.iteritems():
+ if os.path.isdir("/sys/block/%s/%s" % (diskName, partName)):
+ diskDict[diskName]["Partitions"][partName] = values
+
+ procMdstatDict = getProcMdstat()
+ for name, values in procMdstatDict.iteritems():
+ try:
+ diskDict[name]["Description"] = "Software Raid Array - %s - %s" % (values["Type"], values["Status"])
+ diskDict[name]["Member"] = values["Member"]
+ except KeyError, e:
+ pass
- # In AMI instances, HAL does not provide the required information.
- # So that, the /proc/partitions is used to retrieve the required parameters.
- for line in readFile("/proc/partitions")[2:]:
- disk = {}
- tokens = line.split()
- # In Gluster-AMI instances supports (recommends) only raid disks.
- if tokens[3].startswith("md"):
- continue
- disk["Device"] = tokens[3]
- disk["Description"] = None
- disk["Size"] = long(tokens[2]) / 1024
- disk["Status"] = None
- disk["Interface"] = None
- disk["DriveType"] = None
- disk["Uuid"] = None
- disk["Init"] = False
- disk["Type"] = None
- disk["FsType"] = None
- disk["FsVersion"] = None
- disk["MountPoint"] = None
- disk["ReadOnlyAccess"] = None
- disk["SpaceInUse"] = None
- disk["Partitions"] = []
- diskList.append(disk)
- diskInfo["disks"] = diskList
- return diskInfo
-
-
-def getDiskInfo(diskDeviceList=None):
- if Utils.runCommand("wget -t 1 -T 1 -q -O /dev/null %s" % Globals.AWS_WEB_SERVICE_URL) == 0: # AMI instance
- return getAMIDiskInfo()
-
- diskDeviceList = getDevice(diskDeviceList)
- if Utils.isString(diskDeviceList):
- diskDeviceList = [diskDeviceList]
-
- dbusSystemBus = dbus.SystemBus()
- halObj = dbusSystemBus.get_object("org.freedesktop.Hal",
- "/org/freedesktop/Hal/Manager")
- halManager = dbus.Interface(halObj, "org.freedesktop.Hal.Manager")
- storageUdiList = halManager.FindDeviceByCapability("storage")
-
- diskInfo = {}
- diskList = []
- mountInfo = getMountInfo()
- for udi in storageUdiList: # on every disk storage
- halDeviceObj = dbusSystemBus.get_object("org.freedesktop.Hal", udi)
- halDevice = dbus.Interface(halDeviceObj,
- "org.freedesktop.Hal.Device")
- if halDevice.GetProperty("storage.drive_type") in ["cdrom", "floppy"] or \
- halDevice.GetProperty("block.is_volume"):
- continue
- disk = {}
- disk["Device"] = str(halDevice.GetProperty('block.device'))
- if diskDeviceList and disk["Device"] not in diskDeviceList:
- continue
- disk["Description"] = str(halDevice.GetProperty('storage.vendor')) + " " + str(halDevice.GetProperty('storage.model'))
- if halDevice.GetProperty('storage.removable'):
- disk["Size"] = long(halDevice.GetProperty('storage.removable.media_size'))
- else:
- disk["Size"] = long(halDevice.GetProperty('storage.size')) / 1024**2
- disk["Interface"] = str(halDevice.GetProperty('storage.bus'))
- disk["DriveType"] = str(halDevice.GetProperty('storage.drive_type'))
- disk["Status"] = None
- disk["Uuid"] = None
- disk["Init"] = False
- disk["Type"] = None
- disk["FsType"] = None
- disk["FsVersion"] = None
- disk["MountPoint"] = None
- disk["ReadOnlyAccess"] = None
- disk["SpaceInUse"] = None
-
- partitionUdiList = halManager.FindDeviceStringMatch("info.parent", udi)
- if isDiskInFormatting(disk["Device"]):
- disk["Status"] = "INITIALIZING"
- else:
- if partitionUdiList:
- disk["Status"] = "INITIALIZED"
- else:
- disk["Status"] = "UNINITIALIZED"
- disk["Type"] = "UNKNOWN"
-
- partitionList = []
- diskSpaceInUse = 0
- for partitionUdi in partitionUdiList:
- used = 0
- partitionHalDeviceObj = dbusSystemBus.get_object("org.freedesktop.Hal", partitionUdi)
- partitionHalDevice = dbus.Interface(partitionHalDeviceObj, "org.freedesktop.Hal.Device")
- if not partitionHalDevice.GetProperty("block.is_volume"):
- continue
- partitionDevice = str(partitionHalDevice.GetProperty('block.device'))
- if partitionHalDevice.GetProperty("volume.is_mounted"):
- rv = Utils.runCommand(["df", str(partitionHalDevice.GetProperty('volume.mount_point'))], output=True)
- if rv["Status"] == 0:
- try:
- used = long(rv["Stdout"].split("\n")[1].split()[2]) / 1024
- diskSpaceInUse += used
- except IndexError, e:
- pass
- except ValueError, e:
- pass
-
- if disk["Device"] == partitionDevice:
- disk["Uuid"] = str(partitionHalDevice.GetProperty('volume.uuid'))
- disk["Init"] = True
- disk["Status"] = "INITIALIZED"
- mountPoint = str(partitionHalDevice.GetProperty('volume.mount_point'))
- if mountPoint:
- if mountPoint in ["/", "/boot"]:
- disk["Type"] = "BOOT"
- else:
- disk["Type"] = "DATA"
- disk["FsType"] = str(partitionHalDevice.GetProperty('volume.fstype'))
- if disk["FsType"] and "UNINITIALIZED" == disk["Status"]:
- disk["Status"] = "INITIALIZED"
- disk["FsVersion"] = str(partitionHalDevice.GetProperty('volume.fsversion'))
- disk["MountPoint"] = str(partitionHalDevice.GetProperty('volume.mount_point'))
- disk["ReadOnlyAccess"] = str(partitionHalDevice.GetProperty('volume.is_mounted_read_only'))
- if not disk["Size"]:
- disk["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2
- continue
+ diskNameList = getDeviceName(diskNameList)
+ if Utils.isString(diskNameList):
+ diskNameList = [diskNameList]
- partition = {}
- partition["Init"] = False
- partition["Type"] = "UNKNOWN"
- partition["Device"] = partitionDevice
- partition["Uuid"] = str(partitionHalDevice.GetProperty('volume.uuid'))
- 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["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2
-
- if isDiskInFormatting(partitionDevice):
- partition["Status"] = "INITIALIZING"
- else:
- if partition["FsType"]:
- partition["Status"] = "INITIALIZED"
- else:
- partition["Status"] = "UNINITIALIZED"
-
- partition["SpaceInUse"] = used
- if partition["MountPoint"] or isDataDiskPartitionFormatted(partitionDevice):
- partition["Init"] = True
- partition["Status"] = "INITIALIZED"
- if partition["MountPoint"]:
- if partition["MountPoint"] in ["/", "/boot"]:
- partition["Type"] = "BOOT"
- else:
- partition["Type"] = "DATA"
- else:
- if "SWAP" == partition["FsType"].strip().upper():
- partition["Type"] = "SWAP"
- partition["ReadOnlyAccess"] = str(partitionHalDevice.GetProperty('volume.is_mounted_read_only'))
- partitionList.append(partition)
- disk["Partitions"] = partitionList
- if not disk["SpaceInUse"]:
- disk["SpaceInUse"] = diskSpaceInUse
-
- # In a paravirtualized server environment, HAL does not provide all the required information.
- # The missing details are replaced using /proc/mounts data or 'df' command.
- if not (mountInfo and mountInfo.has_key(disk["Device"])):
- diskList.append(disk)
- continue
- if not disk["Uuid"]:
- disk["Uuid"] = mountInfo[disk["Device"]]["Uuid"]
- if not disk["Type"]:
- disk["Type"] = mountInfo[disk["Device"]]["Type"]
- if not disk["Status"] or "UNKNOWN" == disk["Status"]:
- disk["Status"] = mountInfo[disk["Device"]]["Status"]
- if not disk["FsType"]:
- disk["FsType"] = mountInfo[disk["Device"]]["FsType"]
- if not disk["MountPoint"]:
- disk["MountPoint"] = mountInfo[disk["Device"]]["MountPoint"]
- if not disk["SpaceInUse"] and disk["MountPoint"]:
- disk["SpaceInUse"] = getDeviceUsedSpace(disk["Device"])
- else:
- disk["SpaceInUse"] = None
- diskList.append(disk)
+ if not diskNameList:
+ return diskDict
- diskInfo["disks"] = diskList
- return diskInfo
+ outputDict = {}
+ for diskName in list(set(diskDict.keys()).intersection(set(diskNameList))):
+ outputDict[diskName] = diskDict[diskName]
+ return outputDict
def getDiskList(diskDeviceList=None):
@@ -514,115 +364,6 @@ def isDataDiskPartitionFormatted(device):
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
-
- raidPartitions = {}
- raidDisk = getRaidDisk()
-
- for k, v in raidDisk.iteritems():
- for i in v['Disks']:
- raidPartitions[i] = k
-
- diskDom = Protocol.XDOM()
- disksTag = diskDom.createTag("disks", None)
- raidDisks = {}
- if not bootPartition:
- bootPartition = getRootPartition()
- for disk in diskList:
- if skipDisk and disk["Device"] in skipDisk:
- continue
- diskTag = diskDom.createTag("disk", None)
- diskDevice = getDeviceName(disk["Device"])
- diskTag.appendChild(diskDom.createTag("name", diskDevice))
- diskTag.appendChild(diskDom.createTag("description", disk["Description"]))
- diskTag.appendChild(diskDom.createTag("uuid", disk["Uuid"]))
- diskTag.appendChild(diskDom.createTag("status", disk["Status"]))
- diskTag.appendChild(diskDom.createTag("interface", disk["Interface"]))
- diskTag.appendChild(diskDom.createTag("type", disk["Type"]))
- diskTag.appendChild(diskDom.createTag("fsType", disk["FsType"]))
- diskTag.appendChild(diskDom.createTag("fsVersion", disk["FsVersion"]))
- diskTag.appendChild(diskDom.createTag("mountPoint", disk["MountPoint"]))
- diskTag.appendChild(diskDom.createTag("size", disk["Size"]))
- diskTag.appendChild(diskDom.createTag("spaceInUse", disk["SpaceInUse"]))
- partitionsTag = diskDom.createTag("partitions", None)
- if raidPartitions.has_key(diskDevice):
- rdList = {}
- rdList[diskDevice] = [deepcopy(diskTag)]
- if not raidDisks.has_key(raidPartitions[diskDevice]):
- raidDisks[raidPartitions[diskDevice]] = []
- raidDisks[raidPartitions[diskDevice]] += [rdList]
- continue
- for partition in disk["Partitions"]:
- partitionTag = diskDom.createTag("partition", None)
- device = getDeviceName(partition["Device"])
- partitionTag.appendChild(diskDom.createTag("name", device))
- if partition["Uuid"]:
- partitionTag.appendChild(diskDom.createTag("uuid", partition["Uuid"]))
- else:
- partitionTag.appendChild(diskDom.createTag("uuid", getUuidByDiskPartition("/dev/" + device)))
- partitionTag.appendChild(diskDom.createTag("status", partition["Status"]))
- partitionTag.appendChild(diskDom.createTag("type", str(partition["Type"])))
- partitionTag.appendChild(diskDom.createTag("fsType", partition["FsType"]))
- partitionTag.appendChild(diskDom.createTag("mountPoint", partition['MountPoint']))
- partitionTag.appendChild(diskDom.createTag("size", partition["Size"]))
- partitionTag.appendChild(diskDom.createTag("spaceInUse", partition["SpaceInUse"]))
- if raidPartitions.has_key(device):
- tempPartitionTag = diskDom.createTag("partitions", None)
- if raidDisks.has_key(raidPartitions[device]):
- rdList = raidDisks[raidPartitions[device]]
- for rdItem in rdList:
- if not rdItem.has_key(diskDevice):
- rdItem[diskDevice] = [deepcopy(diskTag), tempPartitionTag]
- rdItem[diskDevice][0].appendChild(tempPartitionTag)
- rdItem[diskDevice][-1].appendChild(partitionTag)
- continue
- rdList = {}
- rdList[diskDevice] = [deepcopy(diskTag), tempPartitionTag]
- tempPartitionTag.appendChild(partitionTag)
- rdList[diskDevice][0].appendChild(tempPartitionTag)
- raidDisks[raidPartitions[device]] = [rdList]
- continue
- partitionsTag.appendChild(partitionTag)
- diskTag.appendChild(partitionsTag)
- disksTag.appendChild(diskTag)
-
- for rdisk in raidDisk.keys():
- raidDiskTag = diskDom.createTag("disk", None)
- raidDiskTag.appendChild(diskDom.createTag("name", rdisk))
- raidDiskTag.appendChild(diskDom.createTag("description"))
- raidDiskTag.appendChild(diskDom.createTag("uuid", raidDisk[rdisk]['Uuid']))
- raidDiskTag.appendChild(diskDom.createTag("type", raidDisk[rdisk]['Type']))
- raidDiskTag.appendChild(diskDom.createTag("mountPoint", raidDisk[rdisk]['MountPoint']))
- raidDiskTag.appendChild(diskDom.createTag("status", raidDisk[rdisk]['Status']))
- raidDiskTag.appendChild(diskDom.createTag("interface", raidDisk[rdisk]['Interface']))
- raidDiskTag.appendChild(diskDom.createTag("fsType", raidDisk[rdisk]['FsType']))
- raidDiskTag.appendChild(diskDom.createTag("fsVersion"))
- raidDiskTag.appendChild(diskDom.createTag("size", raidDisk[rdisk]['Size']))
- raidDiskTag.appendChild(diskDom.createTag("spaceInUse", raidDisk[rdisk]['SpaceInUse']))
- raidDisksTag = diskDom.createTag("raidDisks", None)
- if raidDisks.has_key(rdisk):
- for item in raidDisks[rdisk]:
- for diskTag in item.values():
- raidDisksTag.appendChild(diskTag[0])
- raidDiskTag.appendChild(raidDisksTag)
- disksTag.appendChild(raidDiskTag)
- diskDom.addTag(disksTag)
- return diskDom
-
-
def isDiskInFormatting(device):
DEVICE_FORMAT_LOCK_FILE = "/var/lock/%s.lock" % device
return os.path.exists(DEVICE_FORMAT_LOCK_FILE)
@@ -634,12 +375,29 @@ def isDiskInFormat(device):
def getDeviceMountPoint(device):
- try:
- fp = open("/proc/mounts")
- for token in [line.strip().split() for line in fp.readlines()]:
- if token and len(token) > 2 and token[0] == device:
- return token[1]
- fp.close()
- except IOError, e:
- Utils.log("failed to read file %s: %s" % ("/proc/mounts", str(e)))
- return None
+ lines = Utils.readFile("/proc/mounts", lines=True)
+ uuid = getUuidByDiskPartition(device)
+ for line in lines:
+ tokens = line.split()
+ if tokens[0] == device or (uuid and tokens[0].endswith(uuid)):
+ return tokens[1]
+ return None
+
+def getProcPartitions():
+ procPartitionsDict = {}
+ s = Utils.readFile("/proc/partitions", lines=True)
+ for line in s[2:]:
+ tokens = line.strip().split()
+ procPartitionsDict[tokens[3]] = {"Size" : long(tokens[2])}
+ return procPartitionsDict
+
+def getProcMdstat():
+ raidArrayDict = {}
+ lines = Utils.readFile("/proc/mdstat", lines=True)
+ for line in lines[1:]:
+ tokens = line.strip().split()
+ if not tokens:
+ continue
+ if tokens[0].startswith("md"):
+ raidArrayDict[tokens[0]] = {"Status" : tokens[2], "Type" : tokens[3], "Member" : [token.split('[')[0] for token in tokens[4:]]}
+ return raidArrayDict
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py
index da396ad9..5c5b4c4a 100755
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py
@@ -15,6 +15,7 @@ import dbus
import socket
import re
import Utils
+import Protocol
import DiskUtils
from NetworkUtils import *
from Disk import *
@@ -22,10 +23,153 @@ from XmlHandler import ResponseXml
from optparse import OptionParser
+def getDiskDom():
+ diskInfo = DiskUtils.getDiskInfo()
+ if not diskInfo:
+ return None
+ procMdstat = DiskUtils.getProcMdstat()
+ diskDom = Protocol.XDOM()
+ disksTag = diskDom.createTag("disks", None)
+ diskTagDict = {}
+ raidDisksTag = diskDom.createTag("raidDisks", None)
+ for raidDiskName, raidDisk in procMdstat.iteritems():
+ raidDiskTag = diskDom.createTag("disk", None)
+ raidDiskTag.appendChild(diskDom.createTag("name", raidDiskName))
+ raidDiskTag.appendChild(diskDom.createTag("description", diskInfo[raidDiskName]['Description']))
+ raidDiskTag.appendChild(diskDom.createTag("uuid", diskInfo[raidDiskName]['Uuid']))
+ raidDiskTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ raidDiskTag.appendChild(diskDom.createTag("mountPoint", diskInfo[raidDiskName]['MountPoint']))
+ raidDiskTag.appendChild(diskDom.createTag("fsType", diskInfo[raidDiskName]['FsType']))
+ if diskInfo[raidDiskName]['FsType']:
+ raidDiskTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ else:
+ raidDiskTag.appendChild(diskDom.createTag("status", "UNINITIALIZED"))
+ raidDiskTag.appendChild(diskDom.createTag("interface"))
+ raidDiskTag.appendChild(diskDom.createTag("fsVersion"))
+ raidDiskTag.appendChild(diskDom.createTag("size", diskInfo[raidDiskName]['Size'] / 1024.0))
+ raidDiskTag.appendChild(diskDom.createTag("spaceInUse", diskInfo[raidDiskName]['SpaceInUse']))
+ raidDisksTag.appendChild(raidDiskTag)
+ for raidMember in raidDisk['Member']:
+ # Case1: Raid array member is a disk. The following code will add the disk details under a disk tag
+ if diskInfo.has_key(raidMember):
+ diskTag = diskDom.createTag("disk", None)
+ diskTag.appendChild(diskDom.createTag("name", raidMember))
+ diskTag.appendChild(diskDom.createTag("description", diskInfo[raidMember]["Description"]))
+ diskTag.appendChild(diskDom.createTag("uuid", diskInfo[raidMember]["Uuid"]))
+ if DiskUtils.isDiskInFormatting(raidMember):
+ diskTag.appendChild(diskDom.createTag("status", "INITIALIZING"))
+ else:
+ if diskInfo[raidMember]["FsType"]:
+ diskTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ else:
+ diskTag.appendChild(diskDom.createTag("status", "UNINITIALIZED"))
+ diskTag.appendChild(diskDom.createTag("interface", diskInfo[raidMember]["Interface"]))
+ diskTag.appendChild(diskDom.createTag("mountPoint", diskInfo[raidMember]["MountPoint"]))
+ if diskInfo[raidMember]["FsType"]:
+ diskTag.appendChild(diskDom.createTag("type", "DATA"))
+ else:
+ diskTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ diskTag.appendChild(diskDom.createTag("fsType", diskInfo[raidMember]["FsType"]))
+ diskTag.appendChild(diskDom.createTag("fsVersion", diskInfo[raidMember]["FsVersion"]))
+ diskTag.appendChild(diskDom.createTag("size", diskInfo[raidMember]["Size"] / 1024.0))
+ diskTag.appendChild(diskDom.createTag("spaceInUse", diskInfo[raidMember]["SpaceInUse"]))
+ raidDiskTag.appendChild(diskTag)
+ del diskInfo[raidMember]
+ continue
+ # Case2: Raid array member is a partition. The following code will add the partition and its corresponding disk its belong to.
+ for disk, item in diskInfo.iteritems():
+ if not item['Partitions'].has_key(raidMember):
+ continue
+ if not diskTagDict.has_key(disk):
+ diskTag = diskDom.createTag("disk", None)
+ diskTag.appendChild(diskDom.createTag("name", disk))
+ diskTag.appendChild(diskDom.createTag("description", item["Description"]))
+ diskTag.appendChild(diskDom.createTag("uuid", item["Uuid"]))
+ diskTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ diskTag.appendChild(diskDom.createTag("interface", item["Interface"]))
+ diskTag.appendChild(diskDom.createTag("mountPoint"))
+ diskTag.appendChild(diskDom.createTag("type", "DATA"))
+ diskTag.appendChild(diskDom.createTag("fsType", item["FsType"]))
+ diskTag.appendChild(diskDom.createTag("fsVersion", item["FsVersion"]))
+ diskTag.appendChild(diskDom.createTag("size", item["Size"] / 1024.0))
+ diskTag.appendChild(diskDom.createTag("spaceInUse", item["SpaceInUse"]))
+ partitionsTag = diskDom.createTag("partitions", None)
+ diskTag.appendChild(partitionsTag)
+ raidDiskTag.appendChild(diskTag)
+ # Constructed disk tag will be added to the dictonary.
+ # This will be used to keep add all the corresponding partitions tags of the disk to the disk tag.
+ diskTagDict[disk] = {'diskTag': diskTag, 'partitionsTag': partitionsTag}
+ # adding partition details under this disk tag
+ partitionTag = diskDom.createTag("partition", None)
+ partitionTag.appendChild(diskDom.createTag("name", raidMember))
+ partitionTag.appendChild(diskDom.createTag("uuid", item['Partitions'][raidMember]["Uuid"]))
+ partitionTag.appendChild(diskDom.createTag("fsType", item['Partitions'][raidMember]["FsType"]))
+ if item['Partitions'][raidMember]["FsType"]:
+ partitionTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ partitionTag.appendChild(diskDom.createTag("type", "DATA"))
+ else:
+ partitionTag.appendChild(diskDom.createTag("status", "UNINITIALIZED"))
+ partitionTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ partitionTag.appendChild(diskDom.createTag("mountPoint", item['Partitions'][raidMember]['MountPoint']))
+ partitionTag.appendChild(diskDom.createTag("size", item['Partitions'][raidMember]["Size"] / 1024.0))
+ partitionTag.appendChild(diskDom.createTag("spaceInUse", item['Partitions'][raidMember]["SpaceInUse"]))
+ diskTagDict[disk]['partitionsTag'].appendChild(partitionTag)
+ # deleting partition entry of a raid member from diskInfo (item['Partitions'])
+ del item['Partitions'][raidMember]
+ del diskInfo[raidDiskName]
+ disksTag.appendChild(raidDisksTag)
+ for diskName, value in diskInfo.iteritems():
+ diskTag = diskDom.createTag("disk", None)
+ diskTag.appendChild(diskDom.createTag("name", diskName))
+ diskTag.appendChild(diskDom.createTag("description", value["Description"]))
+ diskTag.appendChild(diskDom.createTag("uuid", value["Uuid"]))
+ if DiskUtils.isDiskInFormatting(diskName):
+ status = "INITIALIZING"
+ else:
+ if value["FsType"]:
+ status = "INITIALIZED"
+ else:
+ status = "UNINITIALIZED"
+ diskTag.appendChild(diskDom.createTag("status", status))
+ diskTag.appendChild(diskDom.createTag("interface", value["Interface"]))
+ if value["MountPoint"] and value["MountPoint"] in ["/", "/boot"]:
+ diskTag.appendChild(diskDom.createTag("type", "BOOT"))
+ elif "UNINITIALIZED" == status:
+ diskTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ else:
+ diskTag.appendChild(diskDom.createTag("type", "DATA"))
+ diskTag.appendChild(diskDom.createTag("fsType", value["FsType"]))
+ diskTag.appendChild(diskDom.createTag("fsVersion", value["FsVersion"]))
+ diskTag.appendChild(diskDom.createTag("mountPoint", value["MountPoint"]))
+ diskTag.appendChild(diskDom.createTag("size", value["Size"] / 1024.0))
+ diskTag.appendChild(diskDom.createTag("spaceInUse", value["SpaceInUse"]))
+ partitionsTag = diskDom.createTag("partitions", None)
+ diskTag.appendChild(partitionsTag)
+ for partName, partValues in value['Partitions'].iteritems():
+ partitionTag = diskDom.createTag("partition", None)
+ partitionTag.appendChild(diskDom.createTag("name", partName))
+ partitionTag.appendChild(diskDom.createTag("uuid", partValues["Uuid"]))
+ partitionTag.appendChild(diskDom.createTag("fsType", partValues["FsType"]))
+ if partValues["FsType"]:
+ partitionTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ partitionTag.appendChild(diskDom.createTag("type", "DATA"))
+ else:
+ partitionTag.appendChild(diskDom.createTag("status", "UNINITIALIZED"))
+ partitionTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ partitionTag.appendChild(diskDom.createTag("mountPoint", partValues['MountPoint']))
+ partitionTag.appendChild(diskDom.createTag("size", partValues["Size"] / 1024.0))
+ partitionTag.appendChild(diskDom.createTag("spaceInUse", partValues["SpaceInUse"]))
+ partitionsTag.appendChild(partitionTag)
+ continue
+ disksTag.appendChild(diskTag)
+ diskDom.addTag(disksTag)
+ return diskDom
+
+
def getServerDetails(listall):
serverName = socket.getfqdn()
- meminfo = getMeminfo()
- cpu = getCpuUsageAvg()
+ meminfo = Utils.getMeminfo()
+ cpu = Utils.getCpuUsageAvg()
nameServerList, domain, searchDomain = readResolvConfFile()
if not domain:
domain = [None]
@@ -88,12 +232,7 @@ def getServerDetails(listall):
responseDom.appendTag(serverTag)
serverTag.appendChild(responseDom.createTag("numOfCPUs", int(os.sysconf('SC_NPROCESSORS_ONLN'))))
- try:
- diskDom = DiskUtils.getDiskDom()
- except dbus.dbus_bindings.DBusException, e:
- sys.stderr.write("%s. Please check if HAL services are running\n" % str(e))
- Utils.log("failed to get disk details :%s" % str(e))
- sys.exit(1)
+ diskDom = getDiskDom()
if not diskDom:
sys.stderr.write("No disk found!")
Utils.log("Failed to get disk details")
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py b/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py
index ff90143e..874acaa8 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py
@@ -705,3 +705,20 @@ def getCifsUserUid(userName):
if tokens[1] == userName:
return int(tokens[0])
return None
+
+def readFile(fileName, lines=False):
+ content = None
+ try:
+ fp = open(fileName)
+ if lines:
+ content = fp.readlines()
+ else:
+ content = fp.read()
+ fp.close()
+ return content
+ except IOError, e:
+ log("failed to read file %s: %s" % (fileName, str(e)))
+ if lines:
+ return []
+ else:
+ return ""