diff --git a/Util.py b/Util.py index 494c94e..7bff2d0 100644 --- a/Util.py +++ b/Util.py @@ -1,81 +1,115 @@ import time import subprocess -import StringIO +# import StringIO import re -from wol import * -import os -import signal +# from wol import * +# import os +# import signal import smtplib from email.MIMEText import MIMEText +from HTMLParser import HTMLParser -def sendTextMail(strFrom, to, strSubject, text ): - #from = "SimpaCluster " + +def sendTextMail(strFrom, to, strSubject, text): + # from = "SimpaCluster " mail = MIMEText(text) mail['From'] = strFrom mail['Subject'] = strSubject mail['To'] = to smtp = smtplib.SMTP('smtp.univ-rennes1.fr', 25) - #smtp.connect() - #smtp.login('guillaume.raffy@univ-rennes1.fr', 'password') + # smtp.connect() + # smtp.login('guillaume.raffy@univ-rennes1.fr', 'password') smtp.sendmail(strFrom, [to], mail.as_string()) smtp.close() -class Error( Exception ): - def __init__( self, strMessage ): - self.m_strMessage = strMessage - + +class Error(Exception): + def __init__(self, strMessage): + self.m_strMessage = strMessage + + def getHostName(): - (returnCode, stdout, stderr) = executeProgram(['hostname', '-s']) - if returnCode != 0: - raise Error(stderr) - strHostName = re.sub(r"\n", "", stdout) - return strHostName + (returnCode, stdout, stderr) = executeProgram(['hostname', '-s']) + if returnCode != 0: + raise Error(stderr) + strHostName = re.sub(r"\n", "", stdout) + return strHostName -def log( message ): - print time.asctime(time.localtime())+' : '+ message -def executeProgram( astrArguments ): - - #log('executeProgram : program [%s]' % (','.join(astrArguments))) - popen = subprocess.Popen( astrArguments, bufsize=1, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) # bufsize=1 seems to prevent deadlocks that happen 50% the time - stdout, stderr = popen.communicate() - #popen.wait() - result = (popen.returncode, stdout, stderr) - #log('executeProgram : command %s popen.pid = %d' % (astrArguments[0], popen.pid)) - #os.kill(popen.pid, signal.SIGTERM) - return result +def log(message): + print time.asctime(time.localtime()) + ' : ' + message -def executeCommand( command ): - """ - executes the shell command such as 'set x=1; myprog $x' - """ - popen = subprocess.Popen( [ command ], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, executable = '/bin/bash' ) # bufsize=1 seems to prevent deadlocks that happen 50% the time - # if we don't specify the optional executable argument, then the default non interactive shell will be used. On debian, the default non-interactive shell is dash, which doesn't understand the keyword 'source' that we use in many places - stdout, stderr = popen.communicate() - #popen.wait() - result = (popen.returncode, stdout, stderr) - return result + +def executeProgram(astrArguments): + # log('executeProgram : program [%s]' % (','.join(astrArguments))) + popen = subprocess.Popen( astrArguments, bufsize=1, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # bufsize=1 seems to prevent deadlocks that happen 50% the time + stdout, stderr = popen.communicate() + # popen.wait() + result = (popen.returncode, stdout, stderr) + # log('executeProgram : command %s popen.pid = %d' % (astrArguments[0], popen.pid)) + # os.kill(popen.pid, signal.SIGTERM) + return result + + +def executeCommand(command): + """ + executes the shell command such as 'set x=1; myprog $x' + """ + popen = subprocess.Popen( [command], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, executable='/bin/bash') # bufsize=1 seems to prevent deadlocks that happen 50% the time + # if we don't specify the optional executable argument, then the default non interactive shell will be used. On debian, the default non-interactive shell is dash, which doesn't understand the keyword 'source' that we use in many places + stdout, stderr = popen.communicate() + # popen.wait() + result = (popen.returncode, stdout, stderr) + return result + + +def executeCommandOn(strTargetMachineName, strCommand): + """ + execute command on a local or remote machine (using ssh then) + """ + # print("comparing %s and %s" % (Lib.Util.getHostName(), strTargetMachineName)) + if getHostName() == strTargetMachineName: + return executeCommand(strCommand) + else: + return executeProgram(['ssh', strTargetMachineName, "%s" % strCommand]) def getUpsStatus(): - try: - url = 'http://Net Vision:public@129.20.27.119/PageMonComprehensive.html' - f = urllib.urlopen(url) - res = f.read() - f.close() - except: - print "bad read" - return - h = MyHTMLParser() - h.feed(res) - tokensList = h.GetTokenList() + + class MyHTMLParser(HTMLParser): + def __init__(self): + HTMLParser.__init__(self) + self.TokenList = [] + + def handle_data( self, data): + data = data.strip() + if data and len(data) > 0: + self.TokenList.append(data) + # print data + + def GetTokenList(self): + return self.TokenList + import urllib2 + + try: + url = 'http://Net Vision:public@129.20.27.119/PageMonComprehensive.html' + f = urllib2.urlopen(url) + res = f.read() + f.close() + except: + print "bad read" + return + h = MyHTMLParser() + h.feed(res) + tokensList = h.GetTokenList() # @UnusedVariable if __name__ == '__main__': - """ - for i in range(30): - machineName = 'simpatix%d' % (i+10) - print 'lom ip of %s is %s' % (machineName, getLightOutManagementIpAddress(machineName)) - """ - wakeUp('simpatix21') - #print putToSleep('simpatix13') - #print isNonRespondingMachineSleeping('simpatix13') \ No newline at end of file + from SimpaDbUtil import wakeUp + """ + for i in range(30): + machineName = 'simpatix%d' % (i+10) + print 'lom ip of %s is %s' % (machineName, getLightOutManagementIpAddress(machineName)) + """ + wakeUp('simpatix21') + # print putToSleep('simpatix13') + # print isNonRespondingMachineSleeping('simpatix13')