From fd0e490157f0ec5c6594347ff5d9437d14dbf13f Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Fri, 12 Jun 2009 15:38:21 -0300 Subject: [PATCH] added StatsMailer extension --- docs/ref/extensions.rst | 12 ++++++++++++ docs/ref/settings.rst | 10 ++++++++++ scrapy/conf/default_settings.py | 2 ++ scrapy/contrib/statsmailer.py | 28 ++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 scrapy/contrib/statsmailer.py diff --git a/docs/ref/extensions.rst b/docs/ref/extensions.rst index e52fa911e..b5906b7e0 100644 --- a/docs/ref/extensions.rst +++ b/docs/ref/extensions.rst @@ -192,6 +192,18 @@ one. .. _BeautifulSoup: http://www.crummy.com/software/BeautifulSoup/documentation.html +StatsMailer extension +--------------------- + +.. module:: scrapy.contrib.statsmailer + :synopsis: StatsMailer extension + +.. class:: scrapy.contrib.statsmailer.StatsMailer + +This simple extension can be used to send a notification email every time a +domain has finished scraping, including the Scrapy stats collected. The email +will be sent to all recipients specified in the :setting:`STATSMAILER_RCPTS` +setting. Web console extensions ====================== diff --git a/docs/ref/settings.rst b/docs/ref/settings.rst index 044c5cca8..a8e27219d 100644 --- a/docs/ref/settings.rst +++ b/docs/ref/settings.rst @@ -861,6 +861,16 @@ Default: ``True`` Enable stats collection. +.. setting:: STATSMAILER_RCPTS + +STATSMAILER_RCPTS +----------------- + +Default: ``[]`` (empty list) + +Send Scrapy stats after domains finish scrapy. See +:class:`~scrapy.contrib.statsmailer.StatsMailer` for more info. + .. setting:: TELNETCONSOLE_ENABLED TELNETCONSOLE_ENABLED diff --git a/scrapy/conf/default_settings.py b/scrapy/conf/default_settings.py index 387d10f4b..a37ce43d0 100644 --- a/scrapy/conf/default_settings.py +++ b/scrapy/conf/default_settings.py @@ -189,6 +189,8 @@ STATS_DEBUG = False STATS_WSPORT = 8089 STATS_WSTIMEOUT = 15 +STATSMAILER_RCPTS = [] + TEMPLATES_DIR = abspath(join(dirname(__file__), '..', 'templates')) URLLENGTH_LIMIT = 2083 diff --git a/scrapy/contrib/statsmailer.py b/scrapy/contrib/statsmailer.py new file mode 100644 index 000000000..e93799d49 --- /dev/null +++ b/scrapy/contrib/statsmailer.py @@ -0,0 +1,28 @@ +""" +StatsMailer extension sends an email when a domain finishes scraping. + +Use STATSMAILER_RCPTS setting to enable and give the recipient mail address +""" + +import pprint + +from pydispatch import dispatcher + +from scrapy.stats import stats +from scrapy.mail import MailSender +from scrapy.conf import settings +from scrapy.core import signals +from scrapy.core.exceptions import NotConfigured + +class StatsMailer(object): + + def __init__(self): + self.recipients = settings.getlist("STATSMAILER_RCPTS") + if not self.recipients: + raise NotConfigured + dispatcher.connect(self.send_stats, signal=signals.domain_closed) + + def send_stats(self, domain): + mail = MailSender() + body = pprint.pformat(stats[domain]) + mail.send(self.recipients, "Scrapy stats for: %s" % domain, body)