summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server.scripts
diff options
context:
space:
mode:
authorTim <timothyasir@gluster.com>2011-06-23 15:40:21 +0530
committerTim <timothyasir@gluster.com>2011-07-01 14:45:00 +0530
commit19ed9b4866499d9c264c8db8fc616fb5a5e36ce3 (patch)
tree0e213b6464dbb356aa08888c9945022152ee0b8e /src/com.gluster.storage.management.server.scripts
parent9db0e9b38e9721d5e802f910787df58f915d56f7 (diff)
parent356b3102e5aa24ab1eaae6d1460401be4d546152 (diff)
Updated get_server_details.py to provide raid disk details.
Merge remote branch 'upstream/master'
Diffstat (limited to 'src/com.gluster.storage.management.server.scripts')
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/FsTabUtils.py92
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/RRDUtils.py72
2 files changed, 164 insertions, 0 deletions
diff --git a/src/com.gluster.storage.management.server.scripts/src/FsTabUtils.py b/src/com.gluster.storage.management.server.scripts/src/FsTabUtils.py
new file mode 100644
index 00000000..fcac4196
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/FsTabUtils.py
@@ -0,0 +1,92 @@
+# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
+# This file is part of Gluster Storage Platform.
+#
+# Gluster Storage Platform is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3 of
+# the License, or (at your option) any later version.
+#
+# Gluster Storage Platform is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+
+import Globals
+
+def readFsTab(fsTabFile=Globals.FSTAB_FILE):
+ try:
+ fsTabfp = open(fsTabFile)
+ except IOError, e:
+ log("readFsTab(): " + str(e))
+ return None
+
+ fsTabEntryList = []
+ for line in fsTabfp:
+ tokens = line.strip().split()
+ if not tokens or tokens[0].startswith('#'):
+ continue
+ fsTabEntry = {}
+ fsTabEntry["Device"] = None
+ fsTabEntry["MountPoint"] = None
+ fsTabEntry["FsType"] = None
+ fsTabEntry["Options"] = None
+ fsTabEntry["DumpOption"] = 0
+ fsTabEntry["fsckOrder"] = 0
+ try:
+ fsTabEntry["Device"] = tokens[0]
+ fsTabEntry["MountPoint"] = tokens[1]
+ fsTabEntry["FsType"] = tokens[2]
+ fsTabEntry["Options"] = tokens[3]
+ fsTabEntry["DumpOption"] = tokens[4]
+ fsTabEntry["fsckOrder"] = tokens[5]
+ except IndexError:
+ pass
+ if fsTabEntry["Device"] and fsTabEntry["MountPoint"] and fsTabEntry["FsType"] and fsTabEntry["Options"]:
+ fsTabEntryList.append(fsTabEntry)
+
+ fsTabfp.close()
+ return fsTabEntryList
+
+def writeFsTab(fsTabEntryList, fsTabFile=Globals.FSTAB_FILE):
+ try:
+ fsTabfp = open(fsTabFile, "w")
+ for fsTabEntry in fsTabEntryList:
+ fsTabfp.write("%s\t%s\t%s\t%s\t%s\t%s\n" %
+ (fsTabEntry["Device"], fsTabEntry["MountPoint"],
+ fsTabEntry["FsType"], fsTabEntry["Options"],
+ fsTabEntry["DumpOption"], fsTabEntry["fsckOrder"]))
+ fsTabfp.close()
+ except IOError, e:
+ log("writeFsTab(): " + str(e))
+ return False
+ return True
+
+def addFsTabEntry(fsTabEntry, fsTabFile=Globals.FSTAB_FILE):
+ try:
+ fsTabfp = open(fsTabFile, "a")
+ fsTabfp.write("%s\t%s\t%s\t%s\t%s\t%s\n" %
+ (fsTabEntry["Device"], fsTabEntry["MountPoint"],
+ fsTabEntry["FsType"], fsTabEntry["Options"],
+ fsTabEntry["DumpOption"], fsTabEntry["fsckOrder"]))
+ fsTabfp.close()
+ except IOError, e:
+ log("addFsTabEntry(): " + str(e))
+ return False
+ return True
+
+def removeFsTabEntry(fsTabEntry, fsTabFile=Globals.FSTAB_FILE):
+ fsTabEntryList = readFsTab(fsTabFile)
+ if not fsTabEntryList:
+ return False
+
+ try:
+ fsTabEntryList.remove(fsTabEntry)
+ except ValueError:
+ return False
+
+ return writeFsTab(fsTabEntryList, fsTabFile)
+
diff --git a/src/com.gluster.storage.management.server.scripts/src/RRDUtils.py b/src/com.gluster.storage.management.server.scripts/src/RRDUtils.py
new file mode 100644
index 00000000..1ad0deee
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/RRDUtils.py
@@ -0,0 +1,72 @@
+import rrdtool
+import os
+from socket import gethostname
+from itertools import groupby
+
+class RRD:
+ def __init__ (self):
+ self.COLORS = [0xff7777, 0x7777ff, 0x55ff55, 0xffcc77, 0xff77ff, 0x77ffff,0xffff77, 0x55aaff]
+ self.HOST = gethostname()
+ self.DIR = "/var/lib/collectd"
+
+ def fade_component(self, component):
+ return ((component + 255 * 5) / 6)
+
+ def fade_color(self, color):
+ r = 0;
+ for i in [0,1,2]:
+ shft = (i * 8)
+ component = ((color >> shft) & 255)
+ r |= (self.fade_component(component) << shft)
+ return r
+
+ def generate_pngs(self):
+
+ rrdlist = os.popen ("find %s -type f -name '*.rrd'" % self.DIR)
+
+ for rrd in rrdlist:
+ self.dss = []
+ self.defs = ""
+
+ rrdinfo = rrdtool.info(rrd.strip())
+
+ for key in rrdinfo.keys():
+ if key.split('[')[0] == 'ds':
+ self.dss.append(key.split('[')[1].split(']')[0])
+ self.dss.sort()
+
+ self.dss = [a for a,b in groupby(self.dss)]
+
+ for ds in self.dss:
+ self.defs = self.defs + " DEF:%s_avg=%s:%s:AVERAGE " % (ds, rrd.strip(), ds)
+ self.defs = self.defs + " DEF:%s_max=%s:%s:MAX " % (ds, rrd.strip(), ds)
+
+ j = 0
+ for ds in self.dss:
+ color = self.COLORS[j % len(self.COLORS)]
+ j = j + 1
+ faded_color = self.fade_color(color)
+ self.defs = self.defs + " AREA:%s_max#%06x " % (ds, faded_color)
+
+ j = 0
+ for ds in self.dss:
+ color = self.COLORS[j % len(self.COLORS)]
+ j = j + 1
+ self.defs = self.defs + " LINE2:%s_avg#%06x:%s " % (ds, color, ds)
+ self.defs = self.defs + " GPRINT:%s_avg:AVERAGE:%%5.1lf%%sAvg " % ds
+ self.defs = self.defs + " GPRINT:%s_max:MAX:%%5.1lf%%sMax " % ds
+
+ for span in ['1hour', '1day', '1week', '1month']:
+ os.system ("mkdir -p %s/%s" % (self.DIR, self.HOST))
+ image = os.path.dirname(rrd.strip()) + "-" + span + ".png"
+ cmd = "rrdtool graph " + image + " -t \"%s %s\"" % (os.path.dirname(rrd.strip()), span) + " --imgformat PNG --width 600 --height 100 --start now-" + span + " --end now --interlaced " + self.defs + " >/dev/null 2>&1"
+ os.system(cmd)
+
+
+def main ():
+
+ rrd = RRD ()
+ rrd.generate_pngs ()
+
+if __name__ == "__main__":
+ main()