feat: Implement monitoring heartbeat
All checks were successful
Mirror to Forgejo / mirror-to-codeberg (push) Successful in 3s
All checks were successful
Mirror to Forgejo / mirror-to-codeberg (push) Successful in 3s
This commit is contained in:
parent
daaf79cdbc
commit
608a967fc4
2 changed files with 35 additions and 10 deletions
|
@ -1,13 +1,17 @@
|
||||||
{
|
{
|
||||||
"ntfy_base_url": "https://ntfy.sh",
|
"ntfy_base_url": "https://ntfy.sh",
|
||||||
"ntfy_topic": "nextcloud",
|
"ntfy_topic": "nextcloud",
|
||||||
"ntfy_auth": "false",
|
"ntfy_auth": false,
|
||||||
"ntfy_token": "authentication_token",
|
"ntfy_token": "authentication_token",
|
||||||
|
|
||||||
"nextcloud_base_url": "https://nextcloud.example.com",
|
"nextcloud_base_url": "https://nextcloud.example.com",
|
||||||
|
|
||||||
"nextcloud_username": "user",
|
"nextcloud_username": "user",
|
||||||
"nextcloud_password": "application_password",
|
"nextcloud_password": "application_password",
|
||||||
|
|
||||||
|
"heartbeat": false,
|
||||||
|
"heartbeat_url": "url",
|
||||||
|
"heartbeat_interval": 30,
|
||||||
|
|
||||||
"nextcloud_poll_interval_seconds": 60,
|
"nextcloud_poll_interval_seconds": 60,
|
||||||
"nextcloud_error_sleep_seconds": 600,
|
"nextcloud_error_sleep_seconds": 600,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import logging as log
|
import logging as log
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
import threading
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
import base64
|
import base64
|
||||||
|
@ -12,6 +13,7 @@ from datetime import datetime
|
||||||
# - 1: Response from 'ntfy' was < 400 while pushing notification
|
# - 1: Response from 'ntfy' was < 400 while pushing notification
|
||||||
# - 2: No ntfy authentication token was provided
|
# - 2: No ntfy authentication token was provided
|
||||||
# - 3: Provided 'ntfy' authentication token is invalid
|
# - 3: Provided 'ntfy' authentication token is invalid
|
||||||
|
# - 4: No heartbeat url was given
|
||||||
|
|
||||||
log_levels = {
|
log_levels = {
|
||||||
"DEBUG": log.DEBUG,
|
"DEBUG": log.DEBUG,
|
||||||
|
@ -116,12 +118,15 @@ def load_config(config_file: str) -> dict:
|
||||||
default_config = {
|
default_config = {
|
||||||
"ntfy_base_url": "https://ntfy.sh",
|
"ntfy_base_url": "https://ntfy.sh",
|
||||||
"ntfy_topic": "nextcloud",
|
"ntfy_topic": "nextcloud",
|
||||||
"ntfy_auth": "false",
|
"ntfy_auth": False,
|
||||||
"ntfy_token": "authentication_token",
|
"ntfy_token": "authentication_token",
|
||||||
"nextcloud_base_url": "https://nextcloud.example.com",
|
"nextcloud_base_url": "https://nextcloud.example.com",
|
||||||
"nextcloud_notification_path": "/ocs/v2.php/apps/notifications/api/v2/notifications",
|
"nextcloud_notification_path": "/ocs/v2.php/apps/notifications/api/v2/notifications",
|
||||||
"nextcloud_username": "user",
|
"nextcloud_username": "user",
|
||||||
"nextcloud_password": "application_password",
|
"nextcloud_password": "application_password",
|
||||||
|
"heartbeat": False,
|
||||||
|
"heartbeat_url": "url",
|
||||||
|
"heartbeat_interval": 30,
|
||||||
"nextcloud_poll_interval_seconds": 60,
|
"nextcloud_poll_interval_seconds": 60,
|
||||||
"nextcloud_error_sleep_seconds": 600,
|
"nextcloud_error_sleep_seconds": 600,
|
||||||
"nextcloud_204_sleep_seconds": 3600,
|
"nextcloud_204_sleep_seconds": 3600,
|
||||||
|
@ -138,22 +143,25 @@ def load_config(config_file: str) -> dict:
|
||||||
if key not in config_data:
|
if key not in config_data:
|
||||||
config_data[key] = value
|
config_data[key] = value
|
||||||
|
|
||||||
if config_data["ntfy_auth"] == "false":
|
if config_data["ntfy_auth"] == False:
|
||||||
config_data["ntfy_token"] == ""
|
config_data["ntfy_token"] == ""
|
||||||
elif config_data["ntfy_auth"] == "true" and (
|
elif config_data["ntfy_auth"] == True and (
|
||||||
config_data["ntfy_token"] == ""
|
config_data["ntfy_token"] == ""
|
||||||
or config_data["ntfy_token"] == "authentication_token"
|
or config_data["ntfy_token"] == "authentication_token"):
|
||||||
):
|
|
||||||
print(
|
print(
|
||||||
"Error: Option 'ntfy_auth' is set to 'true' but not 'ntfy_token' was set!"
|
"Error: Option 'ntfy_auth' is set to 'true' but not 'ntfy_token' was set!"
|
||||||
)
|
)
|
||||||
exit(2)
|
exit(2)
|
||||||
elif config_data["ntfy_auth"] == "true" and not config_data[
|
elif config_data["ntfy_auth"] == True and not config_data[
|
||||||
"ntfy_token"
|
"ntfy_token" ].startswith("tk_"):
|
||||||
].startswith("tk_"):
|
|
||||||
print("Error: Authentication token set in 'ntfy_token' is invalid!")
|
print("Error: Authentication token set in 'ntfy_token' is invalid!")
|
||||||
exit(3)
|
exit(3)
|
||||||
|
|
||||||
|
if config_data["heartbeat"] == True:
|
||||||
|
if config_data["heartbeat_url"] == "url" or config_data["heartbeat_url"] == "":
|
||||||
|
print("Error: 'heartbeat' is set to 'true' but no url was given.")
|
||||||
|
exit(4)
|
||||||
|
|
||||||
return config_data
|
return config_data
|
||||||
|
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
|
@ -165,6 +173,13 @@ def load_config(config_file: str) -> dict:
|
||||||
return default_config
|
return default_config
|
||||||
|
|
||||||
|
|
||||||
|
def monitoring_heartbeat(url, interval):
|
||||||
|
while True:
|
||||||
|
response = requests.get(url)
|
||||||
|
log.info("Sent heartbeat.")
|
||||||
|
log.debug(f"Response: {response}")
|
||||||
|
sleep(interval)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
args = arg_parser()
|
args = arg_parser()
|
||||||
config = load_config(args.config_file)
|
config = load_config(args.config_file)
|
||||||
|
@ -177,6 +192,13 @@ def main():
|
||||||
)
|
)
|
||||||
log.info("Started Nextcloud to ntfy.sh notification bridge.")
|
log.info("Started Nextcloud to ntfy.sh notification bridge.")
|
||||||
|
|
||||||
|
if config["heartbeat"] == True:
|
||||||
|
heartbeat = threading.Thread(target=monitoring_heartbeat,
|
||||||
|
daemon=True,
|
||||||
|
args=("https://uptime.stfka.eu/api/push/pRCW5ARYxn?status=up&msg=OK&ping=",
|
||||||
|
config["heartbeat_interval"]))
|
||||||
|
heartbeat.start()
|
||||||
|
|
||||||
last_datetime = datetime.fromisoformat("1970-01-01T00:00:00Z")
|
last_datetime = datetime.fromisoformat("1970-01-01T00:00:00Z")
|
||||||
nextcloud_auth_header = f"Basic {base64.b64encode(f"{config["nextcloud_username"]}:{config["nextcloud_password"]}".encode("utf-8")).decode("utf-8")}"
|
nextcloud_auth_header = f"Basic {base64.b64encode(f"{config["nextcloud_username"]}:{config["nextcloud_password"]}".encode("utf-8")).decode("utf-8")}"
|
||||||
nextcloud_request_headers = {
|
nextcloud_request_headers = {
|
||||||
|
@ -281,6 +303,5 @@ def main():
|
||||||
|
|
||||||
sleep(config["nextcloud_poll_interval_seconds"])
|
sleep(config["nextcloud_poll_interval_seconds"])
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in a new issue