Spidermon: Как включить сообщение в бота Telegram? - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь реализовать 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-basi c -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,
    ]

Как можно включить текст сообщения в уведомление телеграммы?

enter image description here

...