ugg. output hangs on large file contents. truncate data. need a better
[monitor.git] / monitor / wrapper / mailer.py
index 142ba04..cd04f3a 100755 (executable)
@@ -3,6 +3,7 @@
 # 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 *
@@ -27,7 +28,7 @@ def reformat_for_rt(text):
                
 
 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
@@ -40,6 +41,7 @@ def setTicketStatus(ticket_id, status):
                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')
@@ -51,6 +53,7 @@ def getTicketStatus(ticket_id):
                return {}
 
        cmd = "rt show -t ticket -f id,subject,status,queue,created %s" % (ticket_id)
+       print cmd
        (f_in, f_out, f_err) = os.popen3(cmd)
        value = f_out.read()
        l_values = value.split('\n')
@@ -77,6 +80,7 @@ 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)
+       print cmd
        (f_in, f_out, f_err) = os.popen3(cmd)
        value = f_out.read()
        l_values = value.split()
@@ -100,6 +104,7 @@ def setSubjectViaRT(ticket_id, subject):
        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()
@@ -124,9 +129,11 @@ def addCommentViaRT(ticket_id, comment):
        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
@@ -135,6 +142,7 @@ def addCommentViaRT(ticket_id, comment):
                # 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
 
@@ -152,6 +160,7 @@ def closeTicketViaRT(ticket_id, comment):
 
        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()
@@ -183,8 +192,10 @@ def emailViaRT(subject, text, to, ticket_id=None):
                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()
@@ -218,9 +229,10 @@ def emailViaRT_NoTicket(subject, text, to):
        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 += "AdminCc: %s\n" % config.cc_email
        input_text += "Text: %s"
 
        # Add a space for each new line to get RT to accept the file.
@@ -228,8 +240,14 @@ def emailViaRT_NoTicket(subject, text, to):
 
        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()
@@ -352,18 +370,7 @@ if __name__=="__main__":
        #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("mail via RT", "Let's see if this succeeds...", [FROM])
+       #email("Re: [PL #21323] TEST 7", 
+       #                  mailtxt.newbootcd_one[1] % {'hostname_list':"hostname list..."},
+       #                  [FROM])