aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>2017-10-25 14:39:38 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-11-08 22:23:45 +0000
commit6b61126c386a0a7334cdf475d349b830c436ed82 (patch)
tree4e39f62c7aeffc83937baeab76ebe9a851def045
parent6870c4d11adcb831247dc1e05794bfa6ac1374c0 (diff)
downloadopenembedded-core-contrib-6b61126c386a0a7334cdf475d349b830c436ed82.tar.gz
oe-build-perf-report-email.py: add images as MIME objects
Add images as separate MIME objects instead of directly embedding images in the html (as base64 encoded pngs). This makes the emails better suited for certain email servers/clients. Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
-rwxr-xr-xscripts/contrib/oe-build-perf-report-email.py42
1 files changed, 21 insertions, 21 deletions
diff --git a/scripts/contrib/oe-build-perf-report-email.py b/scripts/contrib/oe-build-perf-report-email.py
index 64e85c26ad..913847bbed 100755
--- a/scripts/contrib/oe-build-perf-report-email.py
+++ b/scripts/contrib/oe-build-perf-report-email.py
@@ -25,6 +25,7 @@ import socket
import subprocess
import sys
import tempfile
+from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
@@ -111,15 +112,6 @@ def decode_png(infile, outfile):
subprocess.check_output(['optipng', outfile], stderr=subprocess.STDOUT)
-def encode_png(pngfile):
- """Encode png into a <img> html element"""
- with open(pngfile, 'rb') as f:
- data = f.read()
-
- b64_data = base64.b64encode(data)
- return '<img src="data:image/png;base64,' + b64_data.decode('utf-8') + '">\n'
-
-
def mangle_html_report(infile, outfile, pngs):
"""Mangle html file into a email compatible format"""
paste = True
@@ -144,9 +136,7 @@ def mangle_html_report(infile, outfile, pngs):
# Replace charts with <img> elements
match = re.match('<div id="(?P<id>\w+)"', stripped)
if match and match.group('id') in pngs:
- #f_out.write('<img src="{}">\n'.format(match.group('id') + '.png'))
- png_file = os.path.join(png_dir, match.group('id') + '.png')
- f_out.write(encode_png(png_file))
+ f_out.write('<img src="cid:{}"\n'.format(match.group('id')))
else:
f_out.write(line)
@@ -170,7 +160,7 @@ def scrape_html_report(report, outdir, phantomjs_extra_args=None):
stderr=subprocess.STDOUT)
pngs = []
- attachments = []
+ images = []
for fname in os.listdir(tmpdir):
base, ext = os.path.splitext(fname)
if ext == '.png':
@@ -178,7 +168,7 @@ def scrape_html_report(report, outdir, phantomjs_extra_args=None):
decode_png(os.path.join(tmpdir, fname),
os.path.join(outdir, fname))
pngs.append(base)
- attachments.append(fname)
+ images.append(fname)
elif ext in ('.html', '.htm'):
report_file = fname
else:
@@ -188,11 +178,13 @@ def scrape_html_report(report, outdir, phantomjs_extra_args=None):
log.debug("Mangling html report file %s", report_file)
mangle_html_report(os.path.join(tmpdir, report_file),
os.path.join(outdir, report_file), pngs)
- return report_file, attachments
+ return (os.path.join(outdir, report_file),
+ [os.path.join(outdir, i) for i in images])
finally:
shutil.rmtree(tmpdir)
-def send_email(text_fn, html_fn, subject, recipients, copy=[], blind_copy=[]):
+def send_email(text_fn, html_fn, image_fns, subject, recipients, copy=[],
+ blind_copy=[]):
"""Send email"""
# Generate email message
text_msg = html_msg = None
@@ -201,8 +193,16 @@ def send_email(text_fn, html_fn, subject, recipients, copy=[], blind_copy=[]):
text_msg = MIMEText("Yocto build performance test report.\n" +
f.read(), 'plain')
if html_fn:
+ html_msg = msg = MIMEMultipart('related')
with open(html_fn) as f:
- html_msg = MIMEText(f.read(), 'html')
+ html_msg.attach(MIMEText(f.read(), 'html'))
+ for img_fn in image_fns:
+ # Expect that content id is same as the filename
+ cid = os.path.splitext(os.path.basename(img_fn))[0]
+ with open(img_fn, 'rb') as f:
+ image_msg = MIMEImage(f.read())
+ image_msg['Content-ID'] = '<{}>'.format(cid)
+ html_msg.attach(image_msg)
if text_msg and html_msg:
msg = MIMEMultipart('alternative')
@@ -251,10 +251,10 @@ def main(argv=None):
try:
log.debug("Storing email parts in %s", outdir)
- html_report = None
+ html_report = images = None
if args.html:
- scrape_html_report(args.html, outdir, args.phantomjs_args)
- html_report = os.path.join(outdir, os.path.basename(args.html))
+ html_report, images = scrape_html_report(args.html, outdir,
+ args.phantomjs_args)
if args.to:
log.info("Sending email to %s", ', '.join(args.to))
@@ -262,7 +262,7 @@ def main(argv=None):
log.info("Copying to %s", ', '.join(args.cc))
if args.bcc:
log.info("Blind copying to %s", ', '.join(args.bcc))
- send_email(args.text, html_report, args.subject,
+ send_email(args.text, html_report, images, args.subject,
args.to, args.cc, args.bcc)
except subprocess.CalledProcessError as err:
log.error("%s, with output:\n%s", str(err), err.output.decode())