From ca3b351bae288785f38a2504b6bc9cfa49f3021a Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Sun, 6 Nov 2022 09:48:07 +0100 Subject: [PATCH] Adding a check counter to watch fetching (#1099) --- changedetectionio/model/Watch.py | 49 +++++++++++++++--------------- changedetectionio/update_worker.py | 6 ++-- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/changedetectionio/model/Watch.py b/changedetectionio/model/Watch.py index 573ef47c..a49fe069 100644 --- a/changedetectionio/model/Watch.py +++ b/changedetectionio/model/Watch.py @@ -16,42 +16,43 @@ class model(dict): __newest_history_key = None __history_n=0 __base_config = { - 'url': None, - 'tag': None, + #'history': {}, # Dict of timestamp and output stripped filename (removed) + #'newest_history_key': 0, (removed, taken from history.txt index) + 'body': None, + 'check_unique_lines': False, # On change-detected, compare against all history if its something new + 'check_count': 0, + 'consecutive_filter_failures': 0, # Every time the CSS/xPath filter cannot be located, reset when all is fine. + 'extract_text': [], # Extract text by regex after filters + 'extract_title_as_title': False, + 'fetch_backend': None, + 'filter_failure_notification_send': strtobool(os.getenv('FILTER_FAILURE_NOTIFICATION_SEND_DEFAULT', 'True')), + 'headers': {}, # Extra headers to send + 'ignore_text': [], # List of text to ignore when calculating the comparison checksum + 'include_filters': [], 'last_checked': 0, - 'paused': False, + 'last_error': False, 'last_viewed': 0, # history key value of the last viewed via the [diff] link - #'newest_history_key': 0, - 'title': None, - 'previous_md5': False, - 'uuid': str(uuid.uuid4()), - 'headers': {}, # Extra headers to send - 'body': None, 'method': 'GET', - #'history': {}, # Dict of timestamp and output stripped filename - 'ignore_text': [], # List of text to ignore when calculating the comparison checksum - # Custom notification content - 'notification_urls': [], # List of URLs to add to the notification Queue (Usually AppRise) - 'notification_title': None, + # Custom notification content 'notification_body': None, 'notification_format': default_notification_format_for_watch, 'notification_muted': False, - 'include_filters': [], - 'last_error': False, - 'extract_text': [], # Extract text by regex after filters + 'notification_title': None, + 'notification_urls': [], # List of URLs to add to the notification Queue (Usually AppRise) + 'paused': False, + 'previous_md5': False, + 'proxy': None, # Preferred proxy connection 'subtractive_selectors': [], - 'trigger_text': [], # List of text or regex to wait for until a change is detected + 'tag': None, 'text_should_not_be_present': [], # Text that should not present - 'fetch_backend': None, - 'filter_failure_notification_send': strtobool(os.getenv('FILTER_FAILURE_NOTIFICATION_SEND_DEFAULT', 'True')), - 'consecutive_filter_failures': 0, # Every time the CSS/xPath filter cannot be located, reset when all is fine. - 'extract_title_as_title': False, - 'check_unique_lines': False, # On change-detected, compare against all history if its something new - 'proxy': None, # Preferred proxy connection # Re #110, so then if this is set to None, we know to use the default value instead # Requires setting to None on submit if it's the same as the default # Should be all None by default, so we use the system default in this case. 'time_between_check': {'weeks': None, 'days': None, 'hours': None, 'minutes': None, 'seconds': None}, + 'title': None, + 'trigger_text': [], # List of text or regex to wait for until a change is detected + 'url': None, + 'uuid': str(uuid.uuid4()), 'webdriver_delay': None, 'webdriver_js_execute_code': None, # Run before change-detection } diff --git a/changedetectionio/update_worker.py b/changedetectionio/update_worker.py index 4a131a90..17d13e97 100644 --- a/changedetectionio/update_worker.py +++ b/changedetectionio/update_worker.py @@ -282,10 +282,12 @@ class update_worker(threading.Thread): self.app.logger.error("Exception reached processing watch UUID: %s - %s", uuid, str(e)) self.datastore.update_watch(uuid=uuid, update_obj={'last_error': str(e)}) - # Always record that we atleast tried + count = self.datastore.data['watching'][uuid].get('check_count', 0) + 1 self.datastore.update_watch(uuid=uuid, update_obj={'fetch_time': round(time.time() - now, 3), - 'last_checked': round(time.time())}) + 'last_checked': round(time.time()), + 'check_count': count + }) # Always save the screenshot if it's available if update_handler.screenshot: