diff --git a/borgmatic/config/schema.yaml b/borgmatic/config/schema.yaml index 0acffbf..f2dc4d3 100644 --- a/borgmatic/config/schema.yaml +++ b/borgmatic/config/schema.yaml @@ -1678,10 +1678,10 @@ properties: documentation for details. uptimekuma: type: object - required: ['ping_url', 'push_code'] + required: ['server', 'push_code'] additionalProperties: false properties: - ping_url: + server: type: string description: | Uptime Kuma base URL or UUID to notify when a backup @@ -1691,9 +1691,10 @@ properties: type: string description: | Uptime Kuma "Push Code" from the push URL you have been given. - For example, the push code for: - 'https://uptime.kuma/api/push/0evpM0MIdE?status=up&msg=OK&ping=' - would be '0evpM0MIdE' + For example, the push code for + https://uptime.kuma/api/push/12345678?status=up&msg=OK&ping= + would be 12345678 + example: 12345678 states: type: array items: @@ -1708,10 +1709,12 @@ properties: "finish", and/or "fail". Defaults to pinging for all states. example: - - start, finish, fail + - start + - finish + - fail description: | Configuration for a monitoring integration with Uptime Kuma using - the 'Push' monitor type. + the Push monitor type. See more information here: https://uptime.kuma.pet cronitor: type: object diff --git a/borgmatic/hooks/dispatch.py b/borgmatic/hooks/dispatch.py index d437c98..0740cdb 100644 --- a/borgmatic/hooks/dispatch.py +++ b/borgmatic/hooks/dispatch.py @@ -13,6 +13,7 @@ from borgmatic.hooks import ( pagerduty, postgresql, sqlite, + uptimekuma ) logger = logging.getLogger(__name__) @@ -30,6 +31,7 @@ HOOK_NAME_TO_MODULE = { 'postgresql_databases': postgresql, 'sqlite_databases': sqlite, 'loki': loki, + 'uptimekuma': uptimekuma, } diff --git a/borgmatic/hooks/monitor.py b/borgmatic/hooks/monitor.py index 0cbfef4..c6edb68 100644 --- a/borgmatic/hooks/monitor.py +++ b/borgmatic/hooks/monitor.py @@ -1,6 +1,6 @@ from enum import Enum -MONITOR_HOOK_NAMES = ('apprise', 'healthchecks', 'cronitor', 'cronhub', 'pagerduty', 'ntfy', 'loki') +MONITOR_HOOK_NAMES = ('apprise', 'healthchecks', 'cronitor', 'cronhub', 'pagerduty', 'ntfy', 'loki', 'uptimekuma') class State(Enum): diff --git a/borgmatic/hooks/uptimekuma.py b/borgmatic/hooks/uptimekuma.py index 02317ef..42eb335 100644 --- a/borgmatic/hooks/uptimekuma.py +++ b/borgmatic/hooks/uptimekuma.py @@ -26,19 +26,22 @@ def ping_monitor(hook_config, config, config_filename, state, monitoring_log_lev dry_run_label = ' (dry run; not actually pinging)' if dry_run else '' - status = state.name.lower() == "fail" ? "down" : "up" + + status = "up" + if state.name.lower() == "fail": + status = "down" - base_url = hook_config.get('server', 'https://example.uptime.kuma') & "/api/push" + base_url = hook_config.get('server', 'https://example.uptime.kuma') + "/api/push" push_code = hook_config.get('push_code') logger.info(f'{config_filename}: Pinging Uptime Kuma push_code {push_code}{dry_run_label}') logger.debug(f'{config_filename}: Using Uptime Kuma ping URL {base_url}/{push_code}') - logger.debug(f'{config_filename}: Full Uptime Kuma state URL {base_url}/{push_code}?status={status}&msg={state.name}&ping=') + logger.debug(f'{config_filename}: Full Uptime Kuma state URL {base_url}/{push_code}?status={status}&msg={state.name.lower()}&ping=') if not dry_run: logging.getLogger('urllib3').setLevel(logging.ERROR) try: - response = requests.post(f'{base_url}/{push_code}?status={status}&msg={state.name}&ping=') + response = requests.get(f'{base_url}/{push_code}?status={status}&msg={state.name.lower()}&ping=') if not response.ok: response.raise_for_status() except requests.exceptions.RequestException as error: