diff --git a/src/analyzer/alerters.py b/src/analyzer/alerters.py
index 04f42096..f6e87bd2 100644
--- a/src/analyzer/alerters.py
+++ b/src/analyzer/alerters.py
@@ -23,6 +23,9 @@
def alert_smtp(alert, metric):
# For backwards compatibility
+ server = settings.SMTP_OPTS['server']
+ port = settings.SMTP_OPTS['port']
+
if '@' in alert[1]:
sender = settings.ALERT_SENDER
recipient = alert[1]
@@ -42,7 +45,7 @@ def alert_smtp(alert, metric):
link = settings.GRAPH_URL % (metric[1])
body = 'Anomalous value: %s
Next alert in: %s seconds
' % (metric[0], alert[2], link, link)
msg.attach(MIMEText(body, 'html'))
- s = SMTP('127.0.0.1')
+ s = SMTP(server, port)
s.sendmail(sender, recipient, msg.as_string())
s.quit()
diff --git a/src/analyzer/analyzer.py b/src/analyzer/analyzer.py
index 51bf4d95..b1ddc334 100644
--- a/src/analyzer/analyzer.py
+++ b/src/analyzer/analyzer.py
@@ -1,4 +1,5 @@
import logging
+import traceback
from Queue import Empty
from redis import StrictRedis
from time import time, sleep
@@ -201,6 +202,7 @@ def run(self):
except Exception as e:
logger.error("couldn't send alert: %s" % e)
+ logger.error("stacktrace: %s" % str(traceback.format_exc()))
# Write anomalous_metrics to static webapp directory
filename = path.abspath(path.join(path.dirname(__file__), '..', settings.ANOMALY_DUMP))
diff --git a/src/settings.py.example b/src/settings.py.example
index 5a65a1f0..d8a81f03 100644
--- a/src/settings.py.example
+++ b/src/settings.py.example
@@ -127,6 +127,10 @@ ALERTS = (
# Each alert module requires additional information.
SMTP_OPTS = {
+ # The SMTP server to use
+ "server": "localhost",
+ # The SMTP port to use on the above server
+ "port": "25",
# This specifies the sender of email alerts.
"sender": "skyline-alerts@etsy.com",
# recipients is a dictionary mapping metric names