Change Request: fas=>bugzilla sync script that does not email invalid users

Toshio Kuratomi a.badger at gmail.com
Tue Aug 10 21:08:35 UTC 2010


We've had a few complaints about our bugzilla sync script sending out too
much email.  I'd like to apply this hotfix to the export-bugzilla script on
fas01 (where the cron job runs) and the associated config change to stop
sending out email to the invalid users.

Can I get two +1's?

-Toshio

diff --git a/scripts/export-bugzilla.py b/scripts/export-bugzilla.py
index 413cd27..2306b6f 100755
--- a/scripts/export-bugzilla.py
+++ b/scripts/export-bugzilla.py
@@ -14,7 +14,7 @@ from email.Message import Message
 import turbogears
 import bugzilla
 from turbogears import config
-turbogears.update_config(configfile="/etc/export-bugzilla.cfg")
+turbogears.update_config(configfile="./export-bugzilla.cfg")
 from turbogears.database import session
 from fas.model import BugzillaQueue
 
@@ -23,6 +23,7 @@ BZUSER = config.get('bugzilla.username')
 BZPASS = config.get('bugzilla.password')
 MAILSERVER = config.get('mail.server', 'localhost')
 ADMINEMAIL = config.get('mail.admin_email', 'admin at fedoraproject.org')
+NOTIFYEMAIL = config.get('mail.notify_email', ['admin at fedoraproject.org'])
 
 if __name__ == '__main__':
     opts, args = getopt.getopt(sys.argv[1:], '', ('usage', 'help'))
@@ -77,39 +78,66 @@ if __name__ == '__main__':
         session.delete(entry)
         session.flush()
 
-    # Mail the people without bugzilla accounts
-    for person in no_bz_account:
-        smtplib.SMTP(MAILSERVER)
-        msg = Message()
-        message = '''Hello %(name)s,
+# Mail the people without bugzilla accounts
+    if '$USER' in NOTIFYEMAIL:
+        for person in no_bz_account:
+            smtplib.SMTP(MAILSERVER)
+            msg = Message()
+            message = '''Hello %(name)s,
+
+    As a Fedora packager, we grant you permissions to make changes to bugs in
+    bugzilla to all Fedora bugs.  This lets you work together with other Fedora
+    developers in an easier fashion.  However, to enable this functionality, we
+    need to have your bugzilla email address stored in the Fedora Account System.
+    At the moment you have:
 
-As a Fedora packager, we grant you permissions to make changes to bugs in
-bugzilla to all Fedora bugs.  This lets you work together with other Fedora
-developers in an easier fashion.  However, to enable this functionality, we
-need to have your bugzilla email address stored in the Fedora Account System.
-At the moment you have:
+        %(email)s
 
-    %(email)s
+    which bugzilla is telling us is not an account in bugzilla.  If you could
+    please set up an account in bugzilla with this address or change your email
+    address on your Fedora Account to match an existing bugzilla account this would
+    let us go forward.
 
-which bugzilla is telling us is not an account in bugzilla.  If you could
-please set up an account in bugzilla with this address or change your email
-address on your Fedora Account to match an existing bugzilla account this would
-let us go forward.
+    Note: this message is being generated by an automated script.  You'll continue
+    getting this message until the problem is resolved.  Sorry for the
+    inconvenience.
 
-Note: this message is being generated by an automated script.  You'll continue
-getting this message until the problem is resolved.  Sorry for the
-inconvenience.
+    Thank you,
+    The Fedora Account System
+    %(admin_email)s
+    ''' % {'name': person.person.human_name, 'email': person.email,
+            'admin_email': ADMINEMAIL}
+
+            msg.add_header('To', person.email)
+            msg.add_header('From', ADMINEMAIL)
+            msg.add_header('Subject', 'Fedora Account System and Bugzilla Mismatch')
+            msg.set_payload(message)
+            smtp = smtplib.SMTP(MAILSERVER)
+            smtp.sendmail(ADMINEMAIL, [person.email], msg.as_string())
+            smtp.quit()
+            #print 'Message to %s: %s' % (person.email, message,)
+    recipients = ', '.join([e for e in NOTIFYEMAIL if e != '$USER'])
+    if recipients and no_bz_account:
+        smtplib.SMTP(MAILSERVER)
+        msg = Message()
+        people = []
+        for person in no_bz_account:
+            people.append('  %(user)s  --  %(name)s  --  %(email)s' %
+                    {'name': person.person.human_name, 'email': person.email,
+                     'user': person.person.username})
+        people = '\n'.join(people)
+        message = '''
+The following people are in the packager group but do not have email addresses
+that are valid in bugzilla:
+%s
 
-Thank you,
-The Fedora Account System
-%(admin_email)s
-''' % {'name': person.person.human_name, 'email': person.email,
-        'admin_email': ADMINEMAIL}
+''' % people
 
-        msg.add_header('To', person.email)
         msg.add_header('From', ADMINEMAIL)
+        msg.add_header('To', recipients)
         msg.add_header('Subject', 'Fedora Account System and Bugzilla Mismatch')
         msg.set_payload(message)

diff --git a/scripts/export-bugzilla.cfg b/scripts/export-bugzilla.cfg
index ead23f6..89d1945 100644
--- a/scripts/export-bugzilla.cfg
+++ b/scripts/export-bugzilla.cfg
@@ -1,14 +1,19 @@
 [global]
 # bugzilla.url = https://bugdev.devel.redhat.com/bugzilla-cvs/xmlrpc.cgi
-# bugzilla.url = https://bugzilla.redhat.com/xmlrpc.cgi
-bugzilla.url = "https://bzprx.vip.phx.redhat.com/xmlrpc.cgi"
-bugzilla.username = "<%= bugzillaUser %>"
-bugzilla.password = "<%= bugzillaPassword %>"
+bugzilla.url = "https://bugzilla.redhat.com/xmlrpc.cgi"
+#bugzilla.url = "https://bzprx.vip.phx.redhat.com/xmlrpc.cgi"
+bugzilla.username = "fedora-admin-xmlrpc at redhat.com"
+bugzilla.password = "MOLPiNsy2c"
 
 # Mail server for sending invalid bugzilla account messages
-mail.server = 'localhost'
+mail.server = 'bastion'
 mail.admin_email = 'admin at fedoraproject.org'
 
+# This is a list (*must* have a comma) of email addresses to send messages about
+# invalid bugzilla accounts to.  The strin '$USER' is special.  If present in the
+# list, it will send an email to the user whose email address is not in bugzilla.
+mail.notify_email = '$USER', 'admin at fedoraproject.org'
+
 # At the moment, we have to extract this information directly from the fas2
 # database.  We can build a json interface for it at a later date.
-sqlalchemy.dburi = "postgres://fedora:bunbunbun@localhost/fas2"
+sqlalchemy.dburi = "postgres://fas:DsjBks9dn3Sakz9Gsnd55@db02/fas2"

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
Url : http://lists.fedoraproject.org/pipermail/infrastructure/attachments/20100810/f7517f72/attachment.bin 


More information about the infrastructure mailing list