Added progressive backoff and auto-cleanup for unreachable Owncast instances. (Closes #2 and closes #3)
This commit is contained in:
@@ -28,6 +28,35 @@ SECONDS_BETWEEN_NOTIFICATIONS = 20 * 60 # 20 minutes in seconds
|
||||
# - If this time period passes entirely and a stream comes back online after, it's treated as regular going live.
|
||||
TEMPORARY_OFFLINE_NOTIFICATION_COOLDOWN = 7 * 60 # 7 minutes in seconds
|
||||
|
||||
# Counter thresholds for auto-cleanup (based on 60-second polling intervals)
|
||||
CLEANUP_WARNING_THRESHOLD = 83 * 24 * 60 # 119,520 cycles = 83 days
|
||||
CLEANUP_DELETE_THRESHOLD = 90 * 24 * 60 # 129,600 cycles = 90 days
|
||||
|
||||
|
||||
def should_query_stream(failure_counter: int) -> bool:
|
||||
"""
|
||||
Determine if a stream should be queried based on its failure counter.
|
||||
Implements progressive backoff: 60s (5min) -> 2min (5min) -> 3min (5min) -> 5min (15min) -> 15min.
|
||||
|
||||
:param failure_counter: The current failure counter value
|
||||
:return: True if the stream should be queried this cycle, False otherwise
|
||||
"""
|
||||
if failure_counter <= 4:
|
||||
# Query every 60s for first 5 minutes (counters 0-4)
|
||||
return True
|
||||
elif failure_counter <= 9:
|
||||
# Query every 2 minutes for next 5 minutes (counters 5-9)
|
||||
return (failure_counter * 60) % 120 == 0
|
||||
elif failure_counter <= 14:
|
||||
# Query every 3 minutes for next 5 minutes (counters 10-14)
|
||||
return (failure_counter * 60) % 180 == 0
|
||||
elif failure_counter <= 29:
|
||||
# Query every 5 minutes for next 15 minutes (counters 15-29)
|
||||
return (failure_counter * 60) % 300 == 0
|
||||
else:
|
||||
# Query every 15 minutes after 30 minutes (counter 30+)
|
||||
return (failure_counter * 60) % 900 == 0
|
||||
|
||||
|
||||
def domainify(url: str) -> str:
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user