diff options
| author | Tim <timothyasir@gluster.com> | 2011-05-30 19:54:13 +0530 |
|---|---|---|
| committer | Tim <timothyasir@gluster.com> | 2011-05-30 19:54:13 +0530 |
| commit | 2851c82cc1cd2771602044404a54a64605ece7e2 (patch) | |
| tree | a8bae4c387510329b55a427655a6ab39b71429d4 | |
| parent | ea79ff5d088c25ad07203fd2e8f9f396d031bb21 (diff) | |
Added rrd_update_memory_details.py to update memory details into rrd
| -rwxr-xr-x | src/com.gluster.storage.management.server.scripts/src/rrd_update_memory_details.py | 93 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.server.scripts/src/vmware-discover-servers.py | 83 |
2 files changed, 176 insertions, 0 deletions
diff --git a/src/com.gluster.storage.management.server.scripts/src/rrd_update_memory_details.py b/src/com.gluster.storage.management.server.scripts/src/rrd_update_memory_details.py new file mode 100755 index 00000000..23054769 --- /dev/null +++ b/src/com.gluster.storage.management.server.scripts/src/rrd_update_memory_details.py @@ -0,0 +1,93 @@ +#!/usr/bin/python +# 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 os +import sys +import syslog +from XmlHandler import ResponseXml +import Utils +import Common + +def createMemData(file, step): + rs = ResponseXml() + command = ["rrdtool", "create", file, "--step=%s" % step, + "DS:memused:ABSOLUTE:600:0:U", + "DS:memfree:ABSOLUTE:600:0:U", + "DS:memcache:ABSOLUTE:600:0:U", + "DS:swapused:ABSOLUTE:600:0:U", + "DS:swapfree:ABSOLUTE:600:0:U", + "RRA:AVERAGE:0.5:1:576", + "RRA:AVERAGE:0.5:6:672", + "RRA:AVERAGE:0.5:24:732", + "RRA:AVERAGE:0.5:144:1460"] + + rv = Utils.runCommandFG(command, stdout=True, root=True) + message = Common.stripEmptyLines(rv["Stdout"]) + if rv["Stderr"]: + error = Common.stripEmptyLines(rv["Stderr"]) + message += "Error: [%s]" % (error) + Common.log(syslog.LOG_ERR, "failed to create RRD file for memory usages %s" % file) + rs.appendTagRoute("status.code", rv["Status"]) + rs.appendTagRoute("status.message", message) + return rs.toxml() + return None + +def updateMemData(file): + rs = ResponseXml() + command = ["free", "-b", "-o"] + rv = Utils.runCommandFG(command, stdout=True, root=True) + if rv["Stderr"]: + error = Common.stripEmptyLines(rv["Stderr"]) + message += "Error: [%s]" % (error) + Common.log(syslog.LOG_ERR, "failed to retrieve memory details") + rs.appendTagRoute("status.code", rv["Status"]) + rs.appendTagRoute("status.message", message) + return rs.toxml() + + message = rv["Stdout"].split() + command = ["rrdtool", "update", file, "-t", "memused:memfree:memcache:swapused:swapfree", + "N:%s:%s:%s:%s:%s" % (message[8], message[9], message[12], message[14], message[15])] + rv = Utils.runCommandFG(command, stdout=True, root=True) + if rv["Stderr"]: + error = Common.stripEmptyLines(rv["Stderr"]) + print error, command + message += "Error: [%s]" % (error) + Common.log(syslog.LOG_ERR, "failed to update memory usage into rrd file %s" % file) + rs.appendTagRoute("status.code", rv["Status"]) + rs.appendTagRoute("status.message", message) + return rs.toxml() + return None + + +def main(): + #if len(sys.argv) != 2: + # print >> sys.stderr, "usage: %s <step>" % sys.argv[0] + # sys.exit(-1) + #step = sys.argv[1] + + memRrdFile = "mem.rrd" + if not os.path.exists(memRrdFile): + status = createMemData(memRrdFile, 100) + if status: + print status + status = updateMemData(memRrdFile) + if status: + print status + sys.exit(0) + +if __name__ == "__main__": + main() diff --git a/src/com.gluster.storage.management.server.scripts/src/vmware-discover-servers.py b/src/com.gluster.storage.management.server.scripts/src/vmware-discover-servers.py new file mode 100755 index 00000000..6ac15fed --- /dev/null +++ b/src/com.gluster.storage.management.server.scripts/src/vmware-discover-servers.py @@ -0,0 +1,83 @@ +#!/usr/bin/python +# Copyright (C) 2009 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 sys +import socket +import signal +import struct +import syslog +import Globals +import Common + +class TimeoutException(Exception): + pass + +def timeoutSignal(signum, frame): + raise TimeoutException, "Timed out" + +def serverDiscoveryRequest(multiCastGroup, port): + servers = [] + # Sending request to all the servers + socketSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + socketSend.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) + socketSend.sendto("ServerDiscovery", (multiCastGroup, port)) + + # Waiting for the response + socketReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + socketReceive.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + socketReceive.bind(('', 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)) + + try: + while True: + response = socketReceive.recvfrom(200) + if response and response[0].upper() != "SERVERDISCOVERY": + servers.append(response[0]) + signal.signal(signal.SIGALRM, timeoutSignal) + signal.alarm(3) + except TimeoutException: + return servers + return None + +def main(): + syslog.openlog("discovery server request") + servers = serverDiscoveryRequest(Globals.MULTICAST_GROUP, Globals.MULTICAST_PORT) + if not servers: + Common.log(syslog.LOG_ERR, "Failed to discover new servers") + sys.exit(-1) + + 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__": + main() |
