From 86762f076ff9207662a64e552b8313b5ca803973 Mon Sep 17 00:00:00 2001 From: dvirlabs Date: Fri, 27 Jun 2025 19:17:06 +0300 Subject: [PATCH] Update script --- .woodpecker.yml | 19 +++++- automation/alerts/external-alert-checker.py | 61 +++++++++++++++++++ .../{ => cloudflared}/cloudflared-sync.sh | 0 .../generate-scrape-config.py | 0 automation/{ => prometheus}/scrape-sync.sh | 0 5 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 automation/alerts/external-alert-checker.py rename automation/{ => cloudflared}/cloudflared-sync.sh (100%) rename automation/{ => prometheus}/generate-scrape-config.py (100%) rename automation/{ => prometheus}/scrape-sync.sh (100%) diff --git a/.woodpecker.yml b/.woodpecker.yml index 8fbb8a5..9ff7d34 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -6,7 +6,7 @@ steps: image: alpine commands: - apk add --no-cache git bash curl yq - - bash automation/cloudflared-sync.sh + - bash automation/cloudflared/cloudflared-sync.sh environment: GIT_TOKEN: from_secret: GIT_TOKEN @@ -23,7 +23,22 @@ steps: commands: - apk add --no-cache git bash - pip install ruamel.yaml - - bash automation/scrape-sync.sh + - bash automation/prometheus/scrape-sync.sh environment: GIT_TOKEN: from_secret: GIT_TOKEN + + external-url-alerts: + when: + branch: [master] + name: External Alert Checks (Pushover) + image: python:3.11-alpine + commands: + - apk add --no-cache git curl bash + - pip install pyyaml requests + - python3 automation/alerts/external-alert-checker.py + environment: + PUSHOVER_USER: + from_secret: PUSHOVER_USER + PUSHOVER_TOKEN: + from_secret: PUSHOVER_TOKEN \ No newline at end of file diff --git a/automation/alerts/external-alert-checker.py b/automation/alerts/external-alert-checker.py new file mode 100644 index 0000000..4d679bd --- /dev/null +++ b/automation/alerts/external-alert-checker.py @@ -0,0 +1,61 @@ +import requests +import yaml +import os +import subprocess + +# === CONFIG === +PUSHOVER_TOKEN = os.getenv("PUSHOVER_TOKEN") +PUSHOVER_USER = os.getenv("PUSHOVER_USER") +REPOS = { + "dev-tools": "https://git.dvirlabs.com/dvirlabs/dev-tools.git", + "infra": "https://git.dvirlabs.com/dvirlabs/infra.git" +} +BASE_DIR = "./repos" + +def clone_repos(): + os.makedirs(BASE_DIR, exist_ok=True) + for name, url in REPOS.items(): + repo_path = os.path.join(BASE_DIR, name) + if os.path.exists(repo_path): + subprocess.run(["git", "-C", repo_path, "pull"]) + else: + subprocess.run(["git", "clone", url, repo_path]) + +def send_pushover(message): + requests.post("https://api.pushover.net/1/messages.json", data={ + "token": PUSHOVER_TOKEN, + "user": PUSHOVER_USER, + "message": message + }) + +def check_targets(): + for repo in os.listdir(BASE_DIR): + repo_path = os.path.join(BASE_DIR, repo, "manifests") + if not os.path.isdir(repo_path): + continue + for app in os.listdir(repo_path): + file_path = os.path.join(repo_path, app, "monitoring.yaml") + if not os.path.exists(file_path): + continue + with open(file_path) as f: + config = yaml.safe_load(f) + if not config.get("enabled"): + continue + external = config.get("external_check") + if not external: + continue + url = external.get("url") + alerts = external.get("alerts", []) + try: + r = requests.get(url, timeout=5) + code = r.status_code + for alert in alerts: + if code == alert["code"]: + send_pushover(alert["message"]) + break + except Exception as e: + send_pushover(f"❗ {config.get('app')} unreachable: {e}") + +if __name__ == "__main__": + clone_repos() + check_targets() diff --git a/automation/cloudflared-sync.sh b/automation/cloudflared/cloudflared-sync.sh similarity index 100% rename from automation/cloudflared-sync.sh rename to automation/cloudflared/cloudflared-sync.sh diff --git a/automation/generate-scrape-config.py b/automation/prometheus/generate-scrape-config.py similarity index 100% rename from automation/generate-scrape-config.py rename to automation/prometheus/generate-scrape-config.py diff --git a/automation/scrape-sync.sh b/automation/prometheus/scrape-sync.sh similarity index 100% rename from automation/scrape-sync.sh rename to automation/prometheus/scrape-sync.sh