summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py237
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py295
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py117
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py126
4 files changed, 0 insertions, 775 deletions
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py
deleted file mode 100644
index 9295d83b..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py
+++ /dev/null
@@ -1,237 +0,0 @@
-# Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import os
-import Utils
-
-import ServerUtils
-
-
-def getGlusterVolumeInfo(volumeName=None):
- volumeNameList = None
- if Utils.isString(volumeName):
- volumeNameList = [volumeName]
- if type(volumeName) == type([]):
- volumeNameList = volumeName
-
- status = Utils.runCommand("gluster volume info", output=True, root=True)
- if status["Status"] != 0:
- Utils.log("Failed to execute 'gluster volume info' command")
- return None
-
- volumeInfoDict = {}
- volumeInfo = {}
- volumeName = None
- brickList = []
- for line in status['Stdout'].split("\n"):
- if not line:
- if volumeName and volumeInfo:
- volumeInfo["Bricks"] = brickList
- volumeInfoDict[volumeName] = volumeInfo
- volumeInfo = {}
- volumeName = None
- brickList = []
- continue
-
- tokens = line.split(":")
- if tokens[0].strip().upper() == "BRICKS":
- continue
- elif tokens[0].strip().upper() == "VOLUME NAME":
- volumeName = tokens[1].strip()
- volumeInfo["VolumeName"] = volumeName
- elif tokens[0].strip().upper() == "TYPE":
- volumeInfo["VolumeType"] = tokens[1].strip()
- elif tokens[0].strip().upper() == "STATUS":
- volumeInfo["VolumeStatus"] = tokens[1].strip()
- elif tokens[0].strip().upper() == "TRANSPORT-TYPE":
- volumeInfo["TransportType"] = tokens[1].strip()
- elif tokens[0].strip().upper().startswith("BRICK"):
- brickList.append(":".join(tokens[1:]).strip())
-
- if volumeName and volumeInfo:
- volumeInfoDict[volumeName] = volumeInfo
-
- if not volumeNameList:
- return volumeInfoDict
-
- # remove unwanted volume info
- for volumeName in list(set(volumeInfoDict.keys()) - set(volumeNameList)):
- del volumeInfoDict[volumeName]
-
- return volumeInfoDict
-
-
-def isVolumeRunning(volumeName):
- if not volumeName:
- return False
- volumeInfo = getGlusterVolumeInfo(volumeName)
- if not volumeInfo:
- return False
- status = volumeInfo[volumeName]["VolumeStatus"]
- if not status:
- return False
- if status.upper() == "STARTED":
- return True
- return False
-
-
-def isVolumeExist(volumeName):
- if not volumeName:
- return False
- if getGlusterVolumeInfo(volumeName):
- return True
- return False
-
-
-def peerProbe(serverName):
- command = "gluster peer probe %s" % serverName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def setAuthAllow(volumeName, authList, includeServers=True):
- if not (volumeName and authList):
- return False
- vacl = []
- if includeServers:
- for serverName in ServerUtils.getAllServerList():
- vacl += ServerUtils.getServerIpList(serverName)
- vacl += authList
-
- command = "gluster volume set %s auth.allow %s" % (volumeName, ",".join(list(set(vacl))))
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeCreate(volumeName, volumeType, transportTypeList, brickList):
- command = "gluster volume create %s" % volumeName
-
- if volumeType.upper() == "MIRROR":
- command += " replica 2"
- elif volumeType.upper() == "STRIPE":
- command += " stripe 4"
-
- if "RDMA" in transportTypeList:
- command += " transport rdma"
-
- command += " " + " ".join(brickList)
-
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeDelete(volumeName):
- command = "gluster --mode=script volume delete %s" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeLogFileName(volumeName, brick, logDir):
- command = "gluster volume log filename %s %s %s" % (volumeName, brick, logDir)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def startVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s start" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successfully":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def stopVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s abort" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def commitVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s commit" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def getMigrationStatus(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s status" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status['Status'] == 0 and status['Stdout']:
- lines = status["Stdout"].split("\n")
- if "Current file" in lines[0]:
- return "started"
- if "Migration complete" in lines[0]:
- return "completed"
- Utils.log("command [%s] returns unknown status:%s" % (command, lines[0]))
- return "failed"
- #if status['Status'] == 0 and status['Stdout']:
- # for line in status['Stdout'].split('\n'):
- # words = line.split()
- # if words and words[0].upper() == "STATUS:":
- # return " ".join(words[1:]).upper()
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return None
-
-
-def volumeRebalanceStart(volumeName):
- command = "gluster volume rebalance %s start" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeRebalanceStop(volumeName):
- command = "gluster volume rebalance %s stop" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[0] == "stopped":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeRebalanceStatus(volumeName):
- command = "gluster volume rebalance %s status" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if "rebalance not started" in lines[0]:
- return "not started"
- if "rebalance completed" in lines[0]:
- return "completed"
- return "running"
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py
deleted file mode 100644
index 16cdeed2..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py
+++ /dev/null
@@ -1,295 +0,0 @@
-# Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import os
-import re
-import subprocess
-import glob
-import Globals
-from Protocol import *
-from Utils import *
-
-def isValidServer(serverName):
- for profile in getProfileList():
- if profile.ProfileName == "default" and profile.Active:
- if serverName == profile.DNS.Hostname:
- return True
- return False
-
-def getHostname():
- for profile in getProfileList():
- if profile.ProfileName == "default" and profile.Active:
- return profile.DNS.Hostname
- return None
-
-def getDomainName():
- try:
- domainName = open(Globals.DOMAINNAME_FILE).read()
- except IOError:
- return None
- return domainName.split()[0]
-
-def replaceServerIp(fileName, findWhat, replaceWith):
- try:
- data = open(fileName).read()
- fp = open(fileName, "w")
- fp.write(re.sub(findWhat, replaceWith, data))
- fp.close()
- return True
- except IOError:
- return False
- except ValueError:
- return False
- except OSError:
- return False
-
-def serverName2IpAddress(serverName):
- command = "dig %s | grep '^%s'" % (serverName, serverName)
- ps = subprocess.Popen(command,
- shell=True,
- stdout=subprocess.PIPE,
- stdin=subprocess.PIPE,
- stderr=subprocess.PIPE,
- close_fds=True)
- ipAddress = serverName
- if ps.wait() == 0:
- output = ps.communicate()
- ipAddress = output[0].split()[-1]
- return ipAddress
-
-def getInstallerIp():
- if not os.path.exists(Globals.INSTALLER_INFO_FILE):
- return None
- try:
- for line in open(Globals.INSTALLER_INFO_FILE):
- tokens = line.split("=")
- if tokens[0] == "IP-ADDRESS":
- return tokens[1].split(",")[0].strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "unable to read %s file" % Globals.INSTALLER_INFO_FILE)
- return False
-
-def setInstallerIp(installerIp):
- try:
- open(Globals.INSTALLER_INFO_FILE, "w").write("IP-ADDRESS=%s\n" % installerIp)
- return True
- except IOError:
- log(syslog.LOG_ERR, "unable to create %s file" % Globals.INSTALLER_INFO_FILE)
- return False
-
-def getCurrentServerName():
- try:
- for line in open(Globals.SYSCONFIG_NETWORK_FILE):
- tokens = line.split("=")
- if tokens[0] == "HOSTNAME":
- return tokens[1].strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "unable to read %s file" % Globals.SYSCONFIG_NETWORK_FILE)
- return False
-
-def getLastAccessedNetwork(serverName):
- lastAccessedNetworkFile = ("/%s/servers/%s/%s" %
- (Globals.GLUSTER_CONF_DIR, serverName, Globals.LAST_ACCESSED_NETWORK_FILE))
- try:
- return open(lastAccessedNetworkFile).read().strip()
- except IOError:
- log(syslog.LOG_ERR, "failed to read last accessed network file %s" % lastAccessedNetworkFile)
- pass
- return False
-
-def setLastAccessedNetwork(serverName, ipAddress):
- lastAccessedNetworkFile = ("/%s/servers/%s/%s" %
- (Globals.GLUSTER_CONF_DIR, serverName, Globals.LAST_ACCESSED_NETWORK_FILE))
- try:
- open(lastAccessedNetworkFile, "w").write(ipAddress.strip() + "\n")
- except IOError:
- log(syslog.LOG_ERR, "failed to write last accessed network file %s" % lastAccessedNetworkFile)
- return False
- return True
-
-def getServerIpList(serverName, preferredNetworkOnly=False):
- networkXmlFile = ("%s/servers/%s/network.xml" % (Globals.GLUSTER_CONF_DIR, serverName))
- configDom = XDOM()
- if not configDom.parseFile(networkXmlFile):
- log(syslog.LOG_ERR, "failed to read %s file" % networkXmlFile)
- return None
- preferredNetwork = configDom.getTextByTagRoute("preferred-network")
- ipList = []
- interfaceDom = XDOM()
- for tagE in configDom.getElementsByTagName("interface"):
- interfaceDom.setDomObj(tagE)
- deviceName = interfaceDom.getTextByTagRoute("device")
- hostIp = interfaceDom.getTextByTagRoute("ipaddr")
- if not hostIp:
- continue
- if preferredNetworkOnly:
- if preferredNetwork.upper() == "ANY" or preferredNetwork.upper() == deviceName.upper():
- ipList.append(hostIp)
- else:
- ipList.append(hostIp)
- if preferredNetworkOnly:
- lastAccessedNetworkIp = getLastAccessedNetwork(serverName)
- if lastAccessedNetworkIp in ipList:
- ipList.remove(lastAccessedNetworkIp)
- ipList = [lastAccessedNetworkIp] + ipList
- return ipList
-
-def getServerPreferredIpList(serverName):
- return getServerIpList(serverName, True)
-
-def getExecuteServerList(serverList):
- executeServerList = {}
- for serverName in serverList:
- if serverName == Globals.INSTALLER_SERVER_NAME:
- installerIp = getInstallerIp()
- if installerIp:
- executeServerList[serverName] = [installerIp]
- continue
- executeServerList[serverName] = getServerPreferredIpList(serverName)
- return executeServerList
-
-def getAllServerList():
- serverList = []
- for filePath in glob.glob("%s/servers/*" % Globals.GLUSTER_CONF_DIR):
- if os.path.isdir(filePath):
- serverList.append(os.path.basename(filePath))
- try:
- serverList.remove(Globals.INSTALLER_SERVER_NAME)
- except ValueError:
- pass
- return serverList
-
-def getServerNetworkConfigFromLocalFile(serverName):
- configDom = XDOM()
- configDom.parseFile("%s/servers/%s/network.xml" % (Globals.GLUSTER_CONF_DIR, serverName))
- return configDom
-
-def updateServerNetworkConfigXmlFile(serverName, serverNetworkDom):
- configDom = XDOM()
- serverTag = serverNetworkDom.getElementsByTagRoute("server")[0]
- configDom.setDomObj(serverTag)
- if not configDom.writexml("%s/%s/network.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName)):
- log("Faild to write xml file %s/%s/network.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
-
-def compareServerNetworkDom(serverNetworkDomA, serverNetworkDomB, requestFlag=True):
- command = "command.server."
- if not requestFlag:
- command = ""
- sourceServer = {}
- tagText = serverNetworkDomA.getTextByTagRoute("name")
- if not tagText:
- taxText = None
- sourceServer["name"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("domain-name")
- if not tagText:
- tagText = None
- sourceServer["domain-name"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("search-domain")
- if not tagText:
- tagText = None
- sourceServer["search-domain"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns1")
- if not tagText:
- tagText = None
- sourceServer["dns1"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns2")
- if not tagText:
- tagText = None
- sourceServer["dns2"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns3")
- if not tagText:
- tagText = None
- sourceServer["dns3"] = tagText
- for tagE in serverNetworkDomA.getElementsByTagRoute("interface"):
- interfaceDom = XDOM()
- interfaceDom.setDomObj(tagE)
- sourceServerList = {}
- tagText = interfaceDom.getTextByTagRoute("description")
- if not tagText:
- tagText = None
- sourceServerList["description"] = tagText
- tagText = interfaceDom.getTextByTagRoute("hwaddr")
- if not tagText:
- tagText = None
- sourceServerList["hwaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("onboot")
- if not tagText:
- tagText = None
- sourceServerList["onboot"] = tagText
- tagText = interfaceDom.getTextByTagRoute("bootproto")
- if not tagText:
- tagText = None
- sourceServerList["bootproto"] = tagText
- tagText = interfaceDom.getTextByTagRoute("ipaddr")
- if not tagText:
- tagText = None
- sourceServerList["ipaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("netmask")
- if not tagText:
- tagText = None
- sourceServerList["netmask"] = tagText
- tagText = interfaceDom.getTextByTagRoute("gateway")
- if not tagText:
- tagText = None
- sourceServerList["gateway"] = tagText
- sourceServer[interfaceDom.getTextByTagRoute("device")] = sourceServerList
- objServer = {}
- tagText = serverNetworkDomB.getTextByTagRoute(command + "name")
- if not tagText:
- taxText = None
- objServer["name"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "domain-name")
- if not tagText:
- tagText = None
- objServer["domain-name"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "search-domain")
- if not tagText:
- tagText = None
- objServer["search-domain"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns1")
- if not tagText:
- tagText = None
- objServer["dns1"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns2")
- if not tagText:
- tagText = None
- objServer["dns2"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns3")
- if not tagText:
- tagText = None
- objServer["dns3"] = tagText
- for tagE in serverNetworkDomB.getElementsByTagRoute(command + "interface"):
- interfaceDom = XDOM()
- interfaceDom.setDomObj(tagE)
- objServerList = {}
- tagText = interfaceDom.getTextByTagRoute("description")
- if not tagText:
- tagText = None
- objServerList["description"] = tagText
- tagText = interfaceDom.getTextByTagRoute("hwaddr")
- if not tagText:
- tagText = None
- objServerList["hwaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("onboot")
- if not tagText:
- tagText = None
- objServerList["onboot"] = tagText
- tagText = interfaceDom.getTextByTagRoute("bootproto")
- if not tagText:
- tagText = None
- objServerList["bootproto"] = tagText
- tagText = interfaceDom.getTextByTagRoute("ipaddr")
- if not tagText:
- tagText = None
- objServerList["ipaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("netmask")
- if not tagText:
- tagText = None
- objServerList["netmask"] = tagText
- tagText = interfaceDom.getTextByTagRoute("gateway")
- if not tagText:
- tagText = None
- objServerList["gateway"] = tagText
- objServer[interfaceDom.getTextByTagRoute("device")] = objServerList
- return sourceServer == objServer
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py
deleted file mode 100755
index 265823ab..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import Globals
-import Utils
-from VolumeUtils import *
-from XmlHandler import ResponseXml
-
-
-def enumLogType(logCode):
- if "M" == logCode.upper():
- return "EMERGENCY"
- elif "A" == logCode.upper():
- return "ALERT"
- elif "C" == logCode.upper():
- return "CRITICAL"
- elif "E" == logCode.upper():
- return "ERROR"
- elif "W" == logCode.upper():
- return "WARNING"
- elif "N" == logCode.upper():
- return "NOTICE"
- elif "I" == logCode.upper():
- return "INFO"
- elif "D" == logCode.upper():
- return "DEBUG"
- elif "T" == logCode.upper():
- return "TRACE"
- else:
- return "UNKNOWN"
-##--end of enumLogType()
-
-
-def addLog(responseDom, logMessageTag, loginfo):
- logTag = responseDom.createTag("log", None)
- logTag.appendChild(responseDom.createTag("date", loginfo[0]))
- logTag.appendChild(responseDom.createTag("time", loginfo[1]))
- logTag.appendChild(responseDom.createTag("type", enumLogType(loginfo[2])))
- logTag.appendChild(responseDom.createTag("message", loginfo[3]))
- logMessageTag.appendChild(logTag)
- return True
-##--end of addLog()
-
-
-def logSplit(log):
- loginfo = log.strip().split(None, 3)
- loginfo[0] = loginfo[0][1:] #-- Remove '['
- loginfo[1] = loginfo[1][0:-1] #-- Remove ']'
- return loginfo
-##--end of logSplit()
-
-
-def getVolumeLog(volumeName, tailCount):
- rs = ResponseXml()
- if not volumeName:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No volume name given")
- return rs.toprettyxml()
-
- if not tailCount:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No tail count given")
- return rs.toprettyxml()
-
- thisServerName = getCurrentServerName()
- if not thisServerName:
- rs.appendTagRoute("status.code", "-2")
- rs.appendTagRoute("status.message", "Failed to get current server name")
- return rs.toprettyxml()
-
- volumeDom = XDOM()
- partitionList = getPartitionListByServerName(volumeDom, thisServerName)
- if not partitionList:
- rs.appendTagRoute("status.code", "-3")
- rs.appendTagRoute("status.message", "Failed to get server partition details")
- return rs.toprettyxml()
-
- pattern = '\[\d{4}-\d{2}-\d{2}\s{1}\d{2}:\d{2}:\d{2}.\d+\]\s{1}([MACEWNIDT]){1}\s+'
- logMessagesTag = rs.createTag("response.logMessages")
- for partitionName in partitionList:
- logMessageTag = rs.createTag("logMessage")
- logMessageTag.appendChild("disk", "%s:%s" % (thisServerName, partitionName))
-
- logDirectory = "%s/%s/%s/log" % (Globals.GLUSTER_LUN_DIR, partitionList[partitionName], volumeUuid)
- logFileName = "%s/%s-%s-%s-exports-brick1.log" % (logDirectory,
- Globals.GLUSTER_LUN_DIR[1:],
- partitionList[partitionName],
- volumeUuid)
- if not os.path.exists(logFileName):
- Utils.log("volume log file not found %s" % logFileName)
- continue
- fp = open(logFileName)
- lines = [line for line in fp if re.match(pattern, line)]
- fp.close()
- i = len(lines) - int(tailCount)
- if i < 0:
- i = 0
- for log in lines[i:]:
- loginfo = logSplit(log)
- addLog(rs, logMessageTag, loginfo)
- logMessagesTag.appendChild(logMessageTag)
- return rs.toprettyxml()
-##--end of getVolumeLog()
-
-def main():
- if len(sys.argv) != 3:
- print >> sys.stderr, "usage: %s <disk name> <volume name>" % sys.argv[0]
- sys.exit(-1)
-
- volumeName = sys.argv[1]
- tailCount = sys.argv[2]
- print getVolumeLog(volumeName, tailCount)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py
deleted file mode 100755
index c4c97a51..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import os
-import sys
-p1 = os.path.abspath(os.path.dirname(sys.argv[0]))
-p2 = "%s/common" % os.path.dirname(p1)
-if not p1 in sys.path:
- sys.path.append(p1)
-if not p2 in sys.path:
- sys.path.append(p2)
-import Globals
-import Utils
-from VolumeUtils import *
-from XmlHandler import ResponseXml
-
-
-def enumLogType(logCode):
- if "M" == logCode.upper():
- return "EMERGENCY"
- elif "A" == logCode.upper():
- return "ALERT"
- elif "C" == logCode.upper():
- return "CRITICAL"
- elif "E" == logCode.upper():
- return "ERROR"
- elif "W" == logCode.upper():
- return "WARNING"
- elif "N" == logCode.upper():
- return "NOTICE"
- elif "I" == logCode.upper():
- return "INFO"
- elif "D" == logCode.upper():
- return "DEBUG"
- elif "T" == logCode.upper():
- return "TRACE"
- else:
- return "UNKNOWN"
-##--end of enumLogType()
-
-
-def addLog(responseDom, logMessageTag, loginfo):
- logTag = responseDom.createTag("log", None)
- logTag.appendChild(responseDom.createTag("date", loginfo[0]))
- logTag.appendChild(responseDom.createTag("time", loginfo[1]))
- logTag.appendChild(responseDom.createTag("type", enumLogType(loginfo[2])))
- logTag.appendChild(responseDom.createTag("message", loginfo[3]))
- logMessageTag.appendChild(logTag)
- return True
-##--end of addLog()
-
-
-def logSplit(log):
- loginfo = log.strip().split(None, 3)
- loginfo[0] = loginfo[0][1:] #-- Remove '['
- loginfo[1] = loginfo[1][0:-1] #-- Remove ']'
- return loginfo
-##--end of logSplit()
-
-
-def getVolumeLog(volumeName, tailCount):
- rs = ResponseXml()
- if not volumeName:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No volume name given")
- return rs.toprettyxml()
-
- if not tailCount:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No tail count given")
- return rs.toprettyxml()
-
- thisServerName = getCurrentServerName()
- if not thisServerName:
- rs.appendTagRoute("status.code", "-2")
- rs.appendTagRoute("status.message", "Failed to get current server name")
- return rs.toprettyxml()
-
- volumeDom = XDOM()
- partitionList = getPartitionListByServerName(volumeDom, thisServerName)
- if not partitionList:
- rs.appendTagRoute("status.code", "-3")
- rs.appendTagRoute("status.message", "Failed to get server partition details")
- return rs.toprettyxml()
-
- pattern = '\[\d{4}-\d{2}-\d{2}\s{1}\d{2}:\d{2}:\d{2}.\d+\]\s{1}([MACEWNIDT]){1}\s+'
- logMessagesTag = rs.createTag("response.logMessages")
- for partitionName in partitionList:
- logMessageTag = rs.createTag("logMessage")
- logMessageTag.appendChild("disk", "%s:%s" % (thisServerName, partitionName))
-
- logDirectory = "%s/%s/%s/log" % (Globals.GLUSTER_LUN_DIR, partitionList[partitionName], volumeUuid)
- logFileName = "%s/%s-%s-%s-exports-brick1.log" % (logDirectory,
- Globals.GLUSTER_LUN_DIR[1:],
- partitionList[partitionName],
- volumeUuid)
- if not os.path.exists(logFileName):
- Utils.log("volume log file not found %s" % logFileName)
- continue
- fp = open(logFileName)
- lines = [line for line in fp if re.match(pattern, line)]
- fp.close()
- i = len(lines) - int(tailCount)
- if i < 0:
- i = 0
- for log in lines[i:]:
- loginfo = logSplit(log)
- addLog(rs, logMessageTag, loginfo)
- logMessagesTag.appendChild(logMessageTag)
- return rs.toprettyxml()
-##--end of getVolumeLog()
-
-def main():
- if len(sys.argv) != 3:
- print >> sys.stderr, "usage: %s <disk name> <volume name>" % sys.argv[0]
- sys.exit(-1)
-
- volumeName = sys.argv[1]
- tailCount = sys.argv[2]
- print getVolumeLog(volumeName, tailCount)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()