From 7dcf83dc4a13197d986d491ecc15a4681e0398e1 Mon Sep 17 00:00:00 2001 From: sinavir Date: Tue, 17 Dec 2024 10:27:53 +0100 Subject: [PATCH] feat: Add exponential retry for api connection --- stateless_uptime_kuma/cli.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/stateless_uptime_kuma/cli.py b/stateless_uptime_kuma/cli.py index 43c3227..41fa025 100644 --- a/stateless_uptime_kuma/cli.py +++ b/stateless_uptime_kuma/cli.py @@ -1,9 +1,11 @@ import json import logging import sys +import time import click import click_log +import uptime_kuma_api from uptime_kuma_api import UptimeKumaApi from .hydratation import hydrate_http_probes @@ -14,6 +16,20 @@ logger = logging.getLogger(__name__) click_log.basic_config() +def get_api_with_retries(host, retries=5): + delay = 5 + while True: + try: + return UptimeKumaApi(host) + except uptime_kuma_api.exceptions.UptimeKumaException: + logger.warn(f"Error while connectiong, retrying in {delay}s.") + if retries == 0: + raise + retries -= 1 + time.sleep(delay) + delay *= 4 + + @click.group() def cli(): pass @@ -76,7 +92,8 @@ def apply_json( logger.debug( f"Flags value:\n - scrape_http_keywords: {scrape_http_keywords}\n - no_autocreate_tags: {no_autocreate_tags}\n - keywords_fallback: {keywords_fallback}" ) - with UptimeKumaApi(host) as api: + + with get_api_with_retries(host) as api: logging.debug("Reading json") data = json.load(file) logging.debug("Parsing json")