【发布时间】:2020-09-17 23:24:37
【问题描述】:
我正在尝试实现 spidermon 来监控 scrapyd:
https://github.com/scrapinghub/spidermon/blob/master/spidermon/contrib/scrapy/monitors.py https://spidermon.readthedocs.io/en/latest/monitors.html#is-there-a-basic-scrapy-suite-ready-to-use
目前它监控最小项目数和最大错误数量。如果出现错误,它会通过电报发送消息。不知何故,文档一定是错误的,或者我的实现,因为错误或项目的数量不会包含在消息中:
from spidermon import Monitor, MonitorSuite, monitors
from spidermon.contrib.actions.telegram.notifiers import SendTelegramMessageSpiderFinished
from spidermon.contrib.monitors.mixins import StatsMonitorMixin
@monitors.name('Item count')
class ItemCountMonitor(Monitor):
@monitors.name('Minimum number of items')
def test_minimum_number_of_items(self):
item_extracted = getattr(
self.data.stats, 'item_scraped_count', 0)
minimum_threshold = 500
msg = 'Extracted less than {} items'.format(
minimum_threshold)
self.assertTrue(
item_extracted >= minimum_threshold, msg=msg
)
@monitors.name("Error Count Monitor")
class ErrorCountMonitor(Monitor):
"""Check for errors in the spider log.
You can configure the expected number of ERROR log messages using
``SPIDERMON_MAX_ERRORS``. The default is ``0``."""
@monitors.name("Should not have any errors")
def test_max_errors_in_log(self):
errors_threshold = self.crawler.settings.getint(SPIDERMON_MAX_ERRORS, 0)
no_of_errors = self.stats.get("log_count/ERROR", 0)
msg = "Found {} errors in log, maximum expected is " "{}".format(
no_of_errors, errors_threshold
)
self.assertTrue(no_of_errors <= errors_threshold, msg=msg)
class SpiderCloseMonitorSuite(MonitorSuite):
monitors = [
ItemCountMonitor,
# ItemValidationMonitor,
ErrorCountMonitor
]
monitors_failed_actions = [
SendTelegramMessageSpiderFinished,
]
如何将消息文本包含在电报通知中?
【问题讨论】:
-
我认为
msg只出现在标准输出中,因为它在 Slack 中过于冗长,据我所知,文档并没有说明,所以我认为没有这里有一个文档错误。你想要的可能可以用 Spidermon 模板完成,但我对它们不够熟悉,无法提供帮助:( -
@Gallaecio 我认为文档中可能缺少一两件事。 source code 中的设置
SPIDERMON_SLACK_NOTIFIER_INCLUDE_OK_ATTACHMENTS和SPIDERMON_SLACK_NOTIFIER_INCLUDE_ERROR_ATTACHMENTS似乎与我在回答中提到的关于 Telegram 的设置类似。