102 lines
2.8 KiB
Python
102 lines
2.8 KiB
Python
import os
|
||
from pathlib import Path
|
||
|
||
from utils.common_utils import get_common_utils
|
||
from utils.logging_setup import get_logger
|
||
from utils.settings import get_settings
|
||
from utils.cache_db import get_cache
|
||
|
||
import requests
|
||
from dotenv import load_dotenv
|
||
|
||
logger = get_logger()
|
||
settings = get_settings()
|
||
utils = get_common_utils()
|
||
|
||
load_dotenv()
|
||
|
||
|
||
CACHE_DIR = Path.cwd() / "config" / "cache.db"
|
||
|
||
def gotify(title:str="Test", message:str="testing msg",priority:int=5):
|
||
"""
|
||
Send a message to a Gotify server using a Bearer token.
|
||
|
||
Args:
|
||
server_url (str): Base URL of the Gotify server (e.g., http://10.10.20.8:8080).
|
||
token (str): Gotify app token for authentication.
|
||
title (str): Title of the message.
|
||
message (str): Body of the message.
|
||
priority (int, optional): Message priority (1–10). Defaults to 5.
|
||
|
||
Returns:
|
||
bool: True if the message was sent successfully, False otherwise.
|
||
"""
|
||
server_url = os.getenv("GOTIFY_URL")
|
||
token = os.getenv("GOTIFY_TOKEN")
|
||
|
||
if not server_url or not token:
|
||
print("[!] Missing GOTIFY_URL or GOTIFY_TOKEN in environment.")
|
||
return False
|
||
|
||
url = f"{server_url.rstrip('/')}/message"
|
||
|
||
headers = {
|
||
"Authorization": f"Bearer {token}",
|
||
"Content-Type": "application/json"
|
||
}
|
||
payload = {
|
||
"title": title,
|
||
"message": message,
|
||
"priority": priority
|
||
}
|
||
|
||
try:
|
||
response = requests.post(url, headers=headers, json=payload, timeout=10)
|
||
response.raise_for_status()
|
||
return True
|
||
except requests.RequestException as e:
|
||
print(f"[!] Failed to send Gotify message: {e}")
|
||
return False
|
||
|
||
|
||
def check_dir_changed():
|
||
changed = False
|
||
|
||
dir_to_watch = os.getenv("DIR_TO_WATCH")
|
||
|
||
# create a cache db object and key for this dir (base64 of the dir)
|
||
cache = get_cache(CACHE_DIR)
|
||
cache_key = utils.TextUtils.encode_base64(dir_to_watch)
|
||
|
||
# get the old file listing from cache
|
||
existing_contents = cache.read(cache_key)
|
||
|
||
try:
|
||
# get current files
|
||
current_files = utils.FileUtils.list_files_in_dir_w_subs(dir_to_watch)
|
||
except Exception as e:
|
||
logger.error(f"Unable to check for files due to: {e}")
|
||
return False
|
||
|
||
# if they are different..
|
||
if existing_contents != current_files:
|
||
logger.info(f"The contents of {dir_to_watch} changed")
|
||
changed = True
|
||
|
||
# update the cache
|
||
if existing_contents is None:
|
||
cache.create(cache_key,current_files)
|
||
else:
|
||
cache.update(cache_key,current_files)
|
||
|
||
return changed
|
||
|
||
|
||
if __name__ == "__main__":
|
||
title = "NEW ACTIVITY DETECTED"
|
||
msg = "Your Camera System has uploaded videos!. We have detected activity!"
|
||
|
||
files_changed = check_dir_changed()
|
||
if files_changed:
|
||
gotify(title,msg) |