You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@gump.apache.org by aj...@apache.org on 2004/02/25 01:00:03 UTC
cvs commit: jakarta-gump gumpy.py
ajack 2004/02/24 16:00:03
Modified: . gumpy.py
Log:
1) Used minidom (simple DOM reader) to extract information from workspace XML, to config
2) Send log via e-mail (brute force) in failure conditions...
Revision Changes Path
1.3 +72 -4 jakarta-gump/gumpy.py
Index: gumpy.py
===================================================================
RCS file: /home/cvs/jakarta-gump/gumpy.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- gumpy.py 24 Feb 2004 22:14:49 -0000 1.2
+++ gumpy.py 25 Feb 2004 00:00:03 -0000 1.3
@@ -75,7 +75,9 @@
import sys
import socket
import time
-
+import smtplib
+import StringIO
+from xml.dom import minidom
LINE=' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GUMP'
@@ -150,6 +152,22 @@
# Next...
line = input.readline()
+def sendEmail(toaddr,fromaddr,subject,data,server,port=25):
+ rawdata = "Date: %s\r\nFrom: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s" \
+ % ( time.strftime('%d %b %y %H:%M:%S', time.gmtime()),
+ fromaddr, toaddr, subject, data)
+ try:
+ #
+ # Attach to the SMTP server to send....
+ #
+ server = smtplib.SMTP(server,port)
+ #server.set_debuglevel(1)
+ server.sendmail(fromaddr, toaddr, rawdata)
+ server.quit()
+
+ except Exception, details:
+ print 'Failed to send mail: ' + str(details)
+
# Allow a lock
lockFile=os.path.abspath('gumpy.lock')
if os.path.exists(lockFile):
@@ -168,6 +186,11 @@
result=0
+mailserver=None
+mailport=None
+mailfrom=None
+mailto=None
+
try:
try:
@@ -188,11 +211,43 @@
workspaceName = hostname + '.xml'
if os.environ.has_key('GUMP_WORKSPACE'):
workspaceName = os.environ['GUMP_WORKSPACE'] + '.xml'
+
+ workspacePath = os.path.abspath(os.path.join('python',workspaceName))
projectsExpr='*'
if os.environ.has_key('GUMP_PROJECTS'):
- projectsExpr = os.environ['GUMP_PROJECTS']
-
+ projectsExpr = os.environ['GUMP_PROJECTS']
+
+ if not os.path.exists(workspacePath):
+ raise RuntimeError('No such workspace at ' + str(workspacePath))
+
+ #
+ # Process the workspace...
+ #
+ ws = minidom.parse(workspacePath)
+ wsw=ws.firstChild
+ wsName=wsw.getAttribute('name')
+ # Extract the base directory
+ baseDir=wsw.getAttribute('basedir')
+ basePath=os.path.abspath(baseDir)
+ # Mail reporting
+ mailserver=wsw.getAttribute('mailserver')
+ mailport=wsw.getAttribute('mailport') or 25
+ mailto=wsw.getAttribute('mailinglist')
+ mailfrom=wsw.getAttribute('email')
+ # Extract the mail server/address
+ ws.unlink()
+
+ log.write('- GUMP base directory : ' + baseDir + '\n')
+ log.write('- GUMP base path : ' + str(basePath) + '\n')
+ if mailserver:
+ log.write('- GUMP mail server : ' + mailserver + '\n')
+ if mailport:
+ log.write('- GUMP mail port : ' + str(mailport) + '\n')
+ if mailfrom:
+ log.write('- GUMP mail from : ' + mailfrom + '\n')
+ if mailto:
+ log.write('- GUMP mail to : ' + mailto + '\n')
#
# Add Gump to Python Path...
@@ -254,9 +309,22 @@
os.remove(lockFile)
if 1 or result:
+ logTitle='The Apache Gump log...'
+
# Cat log if failed...
- catFile(sys.stdout, logFile, 'The Gump log...')
+ catFile(sys.stdout, logFile, logTitle)
+ if mailserver and mailport and mailto and mailfrom:
+ # :TODO: Sucky to read file into memory...
+ # Need to figure out attachments, if that
+ # helps & doesn't just do same...
+ tmpStream=StringIO.StringIO()
+ catFile(tmpStream, logFile, logTitle)
+ tmpStream.seek(0)
+ logData=tmpStream.read()
+ tmpStream.close()
+ tmpStream=None
+ sendEmail(mailto,mailfrom,logTitle,logData,mailserver,mailport)
# bye!
sys.exit(result)