diff --git a/apps/amo/templates/services/monitor.html b/apps/amo/templates/services/monitor.html
index e07a6fb602..e6fe6324a1 100644
--- a/apps/amo/templates/services/monitor.html
+++ b/apps/amo/templates/services/monitor.html
@@ -25,6 +25,21 @@
There must be a minimum of 2 working servers.
+
+
[libs] Libraries and Versions
+
+ {% for lib, result, msg in libraries_results %}
+ - {{ lib }}
+ -
+ {% if success %}
+ {{ msg }}
+ {% else %}
+ {{ msg }}
+ {% endif %}
+
+ {% endfor %}
+
+
[Paths] Paths and Permissions
diff --git a/apps/amo/views.py b/apps/amo/views.py
index 6cac82de73..cf527907d8 100644
--- a/apps/amo/views.py
+++ b/apps/amo/views.py
@@ -1,6 +1,8 @@
import os
import random
+from PIL import Image
import socket
+import StringIO
import urllib2
from urlparse import urlparse
@@ -68,6 +70,17 @@ def monitor(request):
status_summary['memcache'] = False
log.info('Memcache is not configured.')
+ # Check Libraries and versions
+ libraries_results = []
+ status_summary['libraries'] = True
+ try:
+ Image.new('RGB', (16, 16)).save(StringIO.StringIO(), 'JPEG')
+ libraries_results.append(('PIL+JPEG', True, 'Got it!'))
+ except Exception, e:
+ status_summary['libraries'] = False
+ msg = "Failed to create a jpeg image: %s" % e
+ libraries_results.append(('PIL+JPEG', False, msg))
+
# Check file paths / permissions
filepaths = (
(settings.NETAPP_STORAGE, os.R_OK | os.W_OK, "We want read + write."),
@@ -112,6 +125,7 @@ def monitor(request):
return jingo.render(request, 'services/monitor.html',
{'memcache_results': memcache_results,
+ 'libraries_results': libraries_results,
'filepath_results': filepath_results,
'redis_results': redis_results,
'hera_results': hera_results,