Selaa lähdekoodia

Added Uptime Kuma hook

Paul Wilde 11 kuukautta sitten
vanhempi
sitoutus
27c90b7cf1

+ 10 - 7
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

+ 2 - 0
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,
 }
 
 

+ 1 - 1
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):

+ 7 - 4
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: