# Copyright (c) 2004 The Trustees of Princeton University (Trustees).
#
# Faiyaz Ahmed <faiyaza@cs.princeton.edu>
+# Stephen Soltesz <soltesz@cs.princeton.edu>
#
# $Id: mailer.py,v 1.10 2007/08/08 13:28:06 soltesz Exp $
from emailTxt import *
def _setupRTenvironment():
- os.environ['PATH'] = os.environ['PATH'] + ":" + config.RT_WEB_TOOLS_PATH
+ os.environ['PATH'] = config.RT_WEB_TOOLS_PATH + ":" + os.environ['PATH']
os.environ['RTSERVER'] = config.RT_WEB_SERVER
os.environ['RTUSER'] = config.RT_WEB_USER
os.environ['RTPASSWD'] = config.RT_WEB_PASSWORD
return {}
cmd = "rt edit ticket/%s set status=%s" % (ticket_id, status)
+ print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
value = f_out.read()
l_values = value.split('\n')
if ticket_id == None or ticket_id == "":
return {}
- cmd = "rt show -t ticket -f id,subject,status,queue,created %s" % (ticket_id)
+ cmd = "rt show -t ticket -f id,subject,status,queue,created,told %s" % (ticket_id)
+ print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
value = f_out.read()
l_values = value.split('\n')
r_values[key] = ":".join(vals[1:])
r_values[key] = r_values[key].strip()
- r_values['Created'] = calendar.timegm(time.strptime(r_values['Created']))
+ #if 'Created' in r_values:
+ # r_values['Created'] = calendar.timegm(time.strptime(r_values['Created']))
+ #else:
+ r_values['Created'] = calendar.timegm(time.localtime())
+
+ #r_values['Told'] = calendar.timegm(time.strptime(r_values['Told']))
return r_values
def setAdminCCViaRT(ticket_id, to):
# create a comma-separated list
s_to = ",".join(to)
- cmd = "rt edit ticket/%s set admincc='%s'" % (ticket_id, s_to)
+ cmd = "rt edit ticket/%s set cc='%s'" % (ticket_id, s_to)
+ print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
value = f_out.read()
l_values = value.split()
pass
else:
print "VALUE:", value
- print "ERROR: RT failed to update AdminCC for ticket %s" % ticket_id
+ print "ERROR: RT failed to update CC for ticket %s" % ticket_id
return
i_ticket_id = int(ticket_id)
cmd = "rt edit ticket/%s set subject='%s'" % (ticket_id, subject)
+ print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
value = f_out.read()
l_values = value.split()
i_ticket_id = int(ticket_id)
cmd = "rt comment -m '%s' ticket/%s" % (comment, i_ticket_id)
+ print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
value = f_out.read()
l_values = value.split()
+ l_err = f_err.read()
f_in.close() ; f_out.close() ; f_err.close()
if len(l_values) > 1 and "recorded" in l_values[1]:
# Success
# Error
f_in.close() ; f_out.close() ; f_err.close()
print "ERROR: RT failed to add comment to id %s" % ticket_id
+ print "ERROR: %s" % l_err
return
if not config.debug:
cmd = "rt edit ticket/%s set status=resolved" % i_ticket_id
+ print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
f_in.close()
value = f_out.read()
setAdminCCViaRT(ticket_id, to)
cmd = "rt correspond -m - %s" % ticket_id
+ print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
- f_in.write(text)
+ #f_in.write(input[:32000])
+ f_in.write(text[:32000])
f_in.flush()
f_in.close()
value = f_out.read()
# Set ENV Variables/PATH
_setupRTenvironment()
- # NOTE: AdminCc: (in PLC's RT configuration) gets an email sent.
+ # NOTE: Cc: (in PLC's RT configuration) gets an email sent.
# This is not the case (surprisingly) for Cc:
input_text = "Subject: %s\n"
input_text += "Requestor: %s\n"% FROM
input_text += "id: ticket/new\n"
- input_text += "Queue: Monitor\n"
+ input_text += "Queue: %s\n" % config.RT_QUEUE
for recipient in to:
- input_text += "AdminCc: %s\n" % recipient
+ input_text += "Cc: %s\n" % recipient
+ #input_text += "Cc: %s\n" % config.cc_email
input_text += "Text: %s"
# Add a space for each new line to get RT to accept the file.
if config.mail and not config.debug:
cmd = "rt create -i -t ticket"
+ print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
- f_in.write(input_text % (subject, spaced_text))
+ input = input_text % (subject, spaced_text)
+ print "length: %s" % len(input)
+ # NOTE: RT hangs with larger input, probably due to some internal
+ # buffering. So, chop off messages at 32000
+ #f_in.write(input[:32000])
+ f_in.write(input[:32000])
f_in.flush()
f_in.close()
value = f_out.read()
for mta in [MTA, 'golf.cs.princeton.edu']:
try:
# This is normal operation
- #print MTA
- #print FROM
- #print to
- #print msg
server = smtplib.SMTP(mta)
- #server = smtplib.SMTP('golf.cs.princeton.edu')
server.sendmail(FROM, to, msg)
if config.bcc and not config.debug:
server.sendmail(FROM, config.email, msg)
except Exception, err:
print "Mailer error2: failed using MTA(%s) with: %s" % (mta, err)
else:
- #print "Would mail %s" %to
logger.debug("Would send mail to %s" % to)
if __name__=="__main__":
import smtplib
import emailTxt
import plc
- #email("[spam] bcc test from golf.cs.princeton.edu",
- # "It gets to both recipients",
- # "soltesz@cs.utk.edu")
- #emailViaRT("rt via golf",
- # "It gets to both recipients",
- # "soltesz@cs.utk.edu")
- email("Re: [PL #21323] TEST 7",
- mailtxt.newbootcd_one[1] % {'hostname_list':"hostname list..."},
- [FROM])
- #print "ticketid: %d" % id
- #id = plc.siteId(["alice.cs.princeton.edu"])
- #print id
- #if id:
- #email('TEST', emailTxt.mailtxt.ssh % {'hostname': "ALICE.cs.princeton.edu"}, "tech-" + id + "@sites.planet-lab.org")
- #else:
- # print "No dice."
- #email("TEST111", "I'd like to see if this works anywhere", ["soltesz@cs.princeton.edu", "soltesz@cs.utk.edu"])
- #print "mailer does nothing in main()"
+ emailViaRT("test monitor mail 9", "Let's see if this succeeds...", ["stephen.soltesz@gmail.com"])