Пример #1
0
    def test_contains(self):
        rule = '-contain 变化'
        content = '变化'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-contain 变化'
        content = '你好'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)
Пример #2
0
    def test_no_rule(self):
        rule = ''
        content = '变化'
        last_content = '变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)

        rule = ''
        content = '变化'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 3)
Пример #3
0
    def test_without(self):
        rule = '-without 变化'
        content = 'abcdas'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-without 变化'
        content = '我发生变化了'
        last_content = '不变化'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)
Пример #4
0
    def test_equal(self):
        rule = '-equal 3'
        content = '3.1'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)

        rule = '-equal 3'
        content = '3'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-equal 3'
        content = '3'
        last_content = '3'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)
Пример #5
0
    def test_less(self):
        rule = '-less 3'
        content = '3'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)

        rule = '-less 3'
        content = '2.9'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-less 3.1'
        content = '3'
        last_content = '3'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)
Пример #6
0
    def test_decrease(self):
        rule = '-decrease 3'
        content = '1882.1'
        last_content = '1885.1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)

        rule = '-decrease 3'
        content = '1882'
        last_content = '1885.1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-decrease 0'
        content = '1888.1'
        last_content = '1888.1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)

        rule = '-decrease 0'
        content = '1888.0'
        last_content = '1888.1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)
Пример #7
0
    def test_multi_rules(self):
        rule = '-contain 3;-contain 4'
        content = '3'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-contain 3;-contain 4'
        content = '4'
        last_content = '2'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-contain 3;-contain 4'
        content = '2'
        last_content = '1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 1)

        rule = '-contain 3;-contain 4'
        content = '3'
        last_content = '3'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)

        rule = '-contain 3;-contain 4'
        content = '4'
        last_content = '4'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 0)

        rule = '-contain 2;-more 4'
        content = '5'
        last_content = '1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)

        rule = '-contain 2;-more 4'
        content = '2'
        last_content = '1'
        res = is_changed(rule, content, last_content)
        self.assertEqual(res, 2)
Пример #8
0
 def test_last_content_empty(self):
     rule = ''
     content = '变化'
     last_content = ''
     res = is_changed(rule, content, last_content)
     self.assertEqual(res, 3)
Пример #9
0
def monitor(id, type):
    status = ''
    global_content = None
    try:
        if type == 'html':
            task = Task.objects.get(pk=id)
            name = task.name
            url = task.url
            selector_type = task.selector_type
            selector = task.selector
            is_chrome = task.is_chrome
            content_template = task.template

            notifications = [i for i in task.notification.iterator()]

            regular_expression = task.regular_expression
            rule = task.rule
            headers = task.headers

            try:
                last = Content.objects.get(task_id=id, task_type=type)
            except Exception:
                last = Content(task_id=id)

            last_content = last.content
            content = get_content(url, is_chrome, selector_type, selector,
                                  content_template, regular_expression,
                                  headers)
            global_content = content
            status_code = is_changed(rule, content, last_content)
            logger.info(
                'rule: {}, content: {}, last_content: {}, status_code: {}'.
                format(rule, content, last_content, status_code))
            if status_code == 1:
                status = '监测到变化,但未命中规则,最新值为{}'.format(content)
                last.content = content
                last.save()
            elif status_code == 2:
                status = '监测到变化,且命中规则,最新值为{}'.format(content)
                msg = wraper_msg(content, url)
                send_message(msg, name, notifications)
                last.content = content
                last.save()
            elif status_code == 3:
                status = '监测到变化,最新值为{}'.format(content)
                msg = wraper_msg(content, url)
                send_message(msg, name, notifications)
                last.content = content
                last.save()
            elif status_code == 0:
                status = '成功执行但未监测到变化,当前值为{}'.format(content)
        elif type == 'rss':
            rss_task = RSSTask.objects.get(id=id)
            url = rss_task.url
            name = rss_task.name

            notifications = [i for i in rss_task.notification.iterator()]

            try:
                last = Content.objects.get(task_id=id, task_type=type)
            except Exception:
                last = Content(task_id=id, task_type='rss')

            last_guid = last.content
            item = get_rss_content(url)
            global_content = item['guid']
            if item['guid'] != last_guid:
                content = wraper_rss_msg(item)
                send_message(content, name, notifications)
                last.content = item['guid']
                last.save()
                status = '监测到变化,最新值:' + item['guid']
            else:
                status = '成功执行但未监测到变化,当前值为{}'.format(last_guid)

    except FunctionTimedOut:
        logger.error(traceback.format_exc())
        status = '解析RSS超时'
    except PartNotificationError as e:
        logger.error(traceback.format_exc())
        status = repr(e)
        last.content = global_content
        last.save()
    except Exception as e:
        logger.error(traceback.format_exc())
        status = repr(e)

    task_status = TaskStatus.objects.get(task_id=id, task_type=type)
    task_status.last_run = datetime.now()
    task_status.last_status = status
    task_status.save()