Skip to content

Instantly share code, notes, and snippets.

@1stvamp
Last active December 17, 2015 22:11
Show Gist options
  • Save 1stvamp/d0c9f4bad906d00e43f5 to your computer and use it in GitHub Desktop.
Save 1stvamp/d0c9f4bad906d00e43f5 to your computer and use it in GitHub Desktop.
Scrape Jenkins build failures from an IMAP box and post to a web service
from __future__ import unicode_literals
import os
import re
import requests
from imapclient import IMAPClient
fail_subject_re = re.compile('(Subject: )(Build failed in Jenkins: .+? )')
success_subject_re = re.compile('(Subject: )(Jenkins build is back to normal : .+? )')
link_re = re.compile('(See )(\<http[s]{0,1}://.+?\>)')
host = os.environ['IMAP_HOST']
username = os.environ['IMAP_USERNAME']
password = os.environ['IMAP_PASSWORD']
notify_url = os.environ['NOTIFY_URL']
server = IMAPClient(host, use_uid=True, ssl=True)
server.login(username, password)
server.select_folder('INBOX')
messages = server.search(['UNSEEN'])
response = server.fetch(messages, ['RFC822.SIZE', 'BODY[TEXT]<0.100>',
'BODY[HEADER.FIELDS (SUBJECT)]'])
for _, data in response.iteritems():
subject = fail_subject_re.match(data['BODY[HEADER.FIELDS (SUBJECT)]']) or \
success_subject_re.match(data['BODY[HEADER.FIELDS (SUBJECT)]'])
if not subject:
continue
link = link_re.match(data['BODY[TEXT]<0>'])
message = '{} {}'.format(
subject.group(2).replace(' : ', ': '),
link.group(2))
requests.post(notify_url, data={'message': message})
server.logout()
imapclient >= 1.0.0
requests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment