|
|
@ -1287,8 +1287,11 @@ def notification_runner():
|
|
|
|
|
|
|
|
|
|
|
|
# Thread runner to check every minute, look for new watches to feed into the Queue.
|
|
|
|
# Thread runner to check every minute, look for new watches to feed into the Queue.
|
|
|
|
def ticker_thread_check_time_launch_checks():
|
|
|
|
def ticker_thread_check_time_launch_checks():
|
|
|
|
|
|
|
|
import random
|
|
|
|
from changedetectionio import update_worker
|
|
|
|
from changedetectionio import update_worker
|
|
|
|
import logging
|
|
|
|
|
|
|
|
|
|
|
|
recheck_time_minimum_seconds = int(os.getenv('MINIMUM_SECONDS_RECHECK_TIME', 20))
|
|
|
|
|
|
|
|
print("System env MINIMUM_SECONDS_RECHECK_TIME", recheck_time_minimum_seconds)
|
|
|
|
|
|
|
|
|
|
|
|
# Spin up Workers that do the fetching
|
|
|
|
# Spin up Workers that do the fetching
|
|
|
|
# Can be overriden by ENV or use the default settings
|
|
|
|
# Can be overriden by ENV or use the default settings
|
|
|
@ -1321,14 +1324,12 @@ def ticker_thread_check_time_launch_checks():
|
|
|
|
while update_q.qsize() >= 2000:
|
|
|
|
while update_q.qsize() >= 2000:
|
|
|
|
time.sleep(1)
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
|
|
# Check for watches outside of the time threshold to put in the thread queue.
|
|
|
|
|
|
|
|
now = time.time()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
recheck_time_minimum_seconds = int(os.getenv('MINIMUM_SECONDS_RECHECK_TIME', 60))
|
|
|
|
recheck_time_system_seconds = int(datastore.threshold_seconds)
|
|
|
|
recheck_time_system_seconds = datastore.threshold_seconds
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Check for watches outside of the time threshold to put in the thread queue.
|
|
|
|
for uuid in watch_uuid_list:
|
|
|
|
for uuid in watch_uuid_list:
|
|
|
|
|
|
|
|
now = time.time()
|
|
|
|
watch = datastore.data['watching'].get(uuid)
|
|
|
|
watch = datastore.data['watching'].get(uuid)
|
|
|
|
if not watch:
|
|
|
|
if not watch:
|
|
|
|
logging.error("Watch: {} no longer present.".format(uuid))
|
|
|
|
logging.error("Watch: {} no longer present.".format(uuid))
|
|
|
@ -1339,20 +1340,33 @@ def ticker_thread_check_time_launch_checks():
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
|
|
# If they supplied an individual entry minutes to threshold.
|
|
|
|
# If they supplied an individual entry minutes to threshold.
|
|
|
|
threshold = now
|
|
|
|
|
|
|
|
watch_threshold_seconds = watch.threshold_seconds()
|
|
|
|
watch_threshold_seconds = watch.threshold_seconds()
|
|
|
|
if watch_threshold_seconds:
|
|
|
|
threshold = watch_threshold_seconds if watch_threshold_seconds > 0 else recheck_time_system_seconds
|
|
|
|
threshold -= watch_threshold_seconds
|
|
|
|
|
|
|
|
else:
|
|
|
|
# #580 - Jitter plus/minus amount of time to make the check seem more random to the server
|
|
|
|
threshold -= recheck_time_system_seconds
|
|
|
|
jitter = datastore.data['settings']['requests'].get('jitter_seconds', 0)
|
|
|
|
|
|
|
|
if jitter > 0:
|
|
|
|
|
|
|
|
if watch.jitter_seconds == 0:
|
|
|
|
|
|
|
|
watch.jitter_seconds = random.uniform(-abs(jitter), jitter)
|
|
|
|
|
|
|
|
|
|
|
|
# Yeah, put it in the queue, it's more than time
|
|
|
|
|
|
|
|
if watch['last_checked'] <= max(threshold, recheck_time_minimum_seconds):
|
|
|
|
seconds_since_last_recheck = now - watch['last_checked']
|
|
|
|
|
|
|
|
if seconds_since_last_recheck >= (threshold + watch.jitter_seconds) and seconds_since_last_recheck >= recheck_time_minimum_seconds:
|
|
|
|
if not uuid in running_uuids and uuid not in update_q.queue:
|
|
|
|
if not uuid in running_uuids and uuid not in update_q.queue:
|
|
|
|
|
|
|
|
print("Queued watch UUID {} last checked at {} queued at {:0.2f} jitter {:0.2f}s, {:0.2f}s since last checked".format(uuid,
|
|
|
|
|
|
|
|
watch['last_checked'],
|
|
|
|
|
|
|
|
now,
|
|
|
|
|
|
|
|
watch.jitter_seconds,
|
|
|
|
|
|
|
|
now - watch['last_checked']))
|
|
|
|
|
|
|
|
# Into the queue with you
|
|
|
|
update_q.put(uuid)
|
|
|
|
update_q.put(uuid)
|
|
|
|
|
|
|
|
|
|
|
|
# Wait a few seconds before checking the list again
|
|
|
|
# Reset for next time
|
|
|
|
time.sleep(3)
|
|
|
|
watch.jitter_seconds = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Wait before checking the list again - saves CPU
|
|
|
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
|
|
# Should be low so we can break this out in testing
|
|
|
|
# Should be low so we can break this out in testing
|
|
|
|
app.config.exit.wait(1)
|
|
|
|
app.config.exit.wait(1)
|