From 16f415b694de12485feac89a64b7f3beecd6aad1 Mon Sep 17 00:00:00 2001 From: auricom <27022259+auricom@users.noreply.github.com> Date: Sat, 18 Mar 2023 17:49:10 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20ankr-queries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../music-transcode/app/helm-release.yaml | 14 ++- .../ankr-queries/config/config.yaml | 3 + .../ankr-queries/config/script.py | 99 +++++++++++++++++++ .../ankr-queries/helmrelease.yaml | 69 +++++++++++++ .../ankr-queries/kustomization.yaml | 17 ++++ .../ankr-queries/patches/postgres.yaml | 23 +++++ .../ankr-queries/secret.sops.yaml | 33 +++++++ .../github-releases/config/script.py | 6 +- .../github-releases/secret.sops.yaml | 10 +- .../apps/default/pushover-notifier/ks.yaml | 23 +++++ 10 files changed, 288 insertions(+), 9 deletions(-) create mode 100644 kubernetes/apps/default/pushover-notifier/ankr-queries/config/config.yaml create mode 100644 kubernetes/apps/default/pushover-notifier/ankr-queries/config/script.py create mode 100644 kubernetes/apps/default/pushover-notifier/ankr-queries/helmrelease.yaml create mode 100644 kubernetes/apps/default/pushover-notifier/ankr-queries/kustomization.yaml create mode 100644 kubernetes/apps/default/pushover-notifier/ankr-queries/patches/postgres.yaml create mode 100644 kubernetes/apps/default/pushover-notifier/ankr-queries/secret.sops.yaml diff --git a/kubernetes/apps/default/music-transcode/app/helm-release.yaml b/kubernetes/apps/default/music-transcode/app/helm-release.yaml index 4baa1da08..db13334c5 100644 --- a/kubernetes/apps/default/music-transcode/app/helm-release.yaml +++ b/kubernetes/apps/default/music-transcode/app/helm-release.yaml @@ -36,7 +36,19 @@ spec: image: repository: ghcr.io/auricom/freac tag: 1.1.7@sha256:6f2f01265beb627567457d74a9df2f24c0a967baf1f0f9232626a6b903e82a0f - command: ["/app/transcode.sh -c", "/app/transcode.sh -r"] + command: + - "/bin/bash" + - "-c" + - | + #!/bin/bash + + set -o errexit + set -o nounset + + cd /app + + /app/transcode.sh -c + /app/transcode.sh -r env: TRANSCODE_INPUT_DIR: /mnt/music/ TRANSCODE_OUTPUT_DIR: /mnt/music_transcoded/ diff --git a/kubernetes/apps/default/pushover-notifier/ankr-queries/config/config.yaml b/kubernetes/apps/default/pushover-notifier/ankr-queries/config/config.yaml new file mode 100644 index 000000000..e3edf267c --- /dev/null +++ b/kubernetes/apps/default/pushover-notifier/ankr-queries/config/config.yaml @@ -0,0 +1,3 @@ +addresses: + - address: "0xd14a28667d263efda2033ceb3b466399723c9c9c" + memo: "@Defi_Maestro" diff --git a/kubernetes/apps/default/pushover-notifier/ankr-queries/config/script.py b/kubernetes/apps/default/pushover-notifier/ankr-queries/config/script.py new file mode 100644 index 000000000..dc4087038 --- /dev/null +++ b/kubernetes/apps/default/pushover-notifier/ankr-queries/config/script.py @@ -0,0 +1,99 @@ +import requests +import psycopg2 +import yaml +import os +import json + +# Load configuration +with open("config.yaml", "r") as f: + config = yaml.safe_load(f) + +# Pushover credentials +PUSHOVER_API_URL = "https://api.pushover.net/1/messages.json" +PUSHOVER_API_TOKEN = os.environ["PUSHOVER_API_TOKEN"] +PUSHOVER_USER_KEY = os.environ["PUSHOVER_USER_KEY"] + +# PostgreSQL connection +connection = psycopg2.connect( + dbname=os.environ["POSTGRES_DB"], + user=os.environ["POSTGRES_USER"], + password=os.environ["POSTGRES_PASS"], + host=os.environ["POSTGRES_HOST"], + port=os.environ.get("POSTGRES_PORT", "5432"), +) +cursor = connection.cursor() + +# Create the database structure +cursor.execute(""" +CREATE TABLE IF NOT EXISTS ankr_queries_transactions ( + id SERIAL PRIMARY KEY, + address VARCHAR NOT NULL, + tx_hash VARCHAR NOT NULL, + blockchain VARCHAR NOT NULL, + timestamp VARCHAR NOT NULL +); +""") +connection.commit() + + +# Send notification using Pushover +def send_pushover_notification(title, message): + payload = { + 'token': PUSHOVER_API_TOKEN, + 'user': PUSHOVER_USER_KEY, + 'title': title, + 'message': message + } + response = requests.post(PUSHOVER_API_URL, data=payload) + response.raise_for_status() + +# Process new transactions +def process_new_transactions(address, memo): + + url = "https://rpc.ankr.com/multichain/?ankr_getTransactionsByAddress" + headers = {"Content-Type": "application/json"} + payload = { + "id": 1, + "jsonrpc": "2.0", + "method": "ankr_getTransactionsByAddress", + "params": { + "address": f"{address}", + "descOrder": True + } + } + response = requests.post(url, headers=headers, data=json.dumps(payload)) + if response.status_code != 200: + print(f"Failed to fetch transactions: {response.text}") + return + + for tx in response.json()["result"]["transactions"]: + tx_hash = tx['hash'] + timestamp = tx['timestamp'] + blockchain = tx['blockchain'] + + cursor.execute(""" + SELECT COUNT(*) FROM ankr_queries_transactions WHERE address=%s AND tx_hash=%s AND blockchain=%s; + """, (address, tx_hash, blockchain)) + exists = cursor.fetchone()[0] + + if not exists: + cursor.execute(""" + INSERT INTO ankr_queries_transactions (address, tx_hash, blockchain, timestamp) + VALUES (%s, %s, %s, %s); + """, (address, tx_hash, blockchain, timestamp)) + connection.commit() + + send_pushover_notification( + f"New Transaction: {memo}", + f"Transaction Hash: {tx_hash}\nBlockchain: {blockchain}\nTimestamp: {timestamp}" + ) + +# Main function +def main(): + for entry in config["addresses"]: + address = entry["address"] + memo = entry["memo"] + process_new_transactions(address, memo) + +if __name__ == "__main__": + main() diff --git a/kubernetes/apps/default/pushover-notifier/ankr-queries/helmrelease.yaml b/kubernetes/apps/default/pushover-notifier/ankr-queries/helmrelease.yaml new file mode 100644 index 000000000..2cb612583 --- /dev/null +++ b/kubernetes/apps/default/pushover-notifier/ankr-queries/helmrelease.yaml @@ -0,0 +1,69 @@ +--- +# yaml-language-server: $schema=https://kubernetes-schemas.devbu.io/helmrelease_v2beta1.json +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: &app pushover-notifier-ankr-queries + namespace: default +spec: + interval: 15m + chart: + spec: + chart: app-template + version: 1.3.2 + sourceRef: + kind: HelmRepository + name: bjw-s + namespace: flux-system + maxHistory: 3 + install: + createNamespace: true + remediation: + retries: 3 + upgrade: + cleanupOnFail: true + remediation: + retries: 3 + uninstall: + keepHistory: false + values: + controller: + type: cronjob + cronjob: + concurrencyPolicy: Forbid + schedule: "*/30 * * * *" + image: + repository: ghcr.io/auricom/python + tag: rolling@sha256:7bd5bf78236f5e7e0cc61b87e0dbd745bdc3588e3555b811960624930b9799f0 + command: + - python + - /app/script.py + service: + main: + enabled: false + env: + POSTGRES_HOST: ${POSTGRES_HOST} + envFrom: + - secretRef: + name: pushover-notifier-ankr-queries-secret + podAnnotations: + reloader.stakater.com/auto: "true" + resources: + requests: + cpu: 50m + memory: 250Mi + limits: + memory: 250Mi + persistence: + config: + enabled: true + type: configMap + name: pushover-notifier-ankr-queries-configmap + mountPath: /app/config.yaml + subPath: config.yaml + script: + enabled: true + type: configMap + name: pushover-notifier-ankr-queries-configmap + mountPath: /app/script.py + subPath: script.py diff --git a/kubernetes/apps/default/pushover-notifier/ankr-queries/kustomization.yaml b/kubernetes/apps/default/pushover-notifier/ankr-queries/kustomization.yaml new file mode 100644 index 000000000..f4c10c7f0 --- /dev/null +++ b/kubernetes/apps/default/pushover-notifier/ankr-queries/kustomization.yaml @@ -0,0 +1,17 @@ +--- +# yaml-language-server: $schema=https://json.schemastore.org/kustomization +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: default +resources: + - ./helmrelease.yaml + - ./secret.sops.yaml +patchesStrategicMerge: + - ./patches/postgres.yaml +configMapGenerator: + - name: pushover-notifier-ankr-queries-configmap + files: + - ./config/config.yaml + - ./config/script.py +generatorOptions: + disableNameSuffixHash: true diff --git a/kubernetes/apps/default/pushover-notifier/ankr-queries/patches/postgres.yaml b/kubernetes/apps/default/pushover-notifier/ankr-queries/patches/postgres.yaml new file mode 100644 index 000000000..f69ea6877 --- /dev/null +++ b/kubernetes/apps/default/pushover-notifier/ankr-queries/patches/postgres.yaml @@ -0,0 +1,23 @@ +--- +# yaml-language-server: $schema=https://kubernetes-schemas.devbu.io/helmrelease_v2beta1.json +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: pushover-notifier-ankr-queries + namespace: default +spec: + values: + initContainers: + init-db: + image: ghcr.io/onedr0p/postgres-initdb:14.7 + env: + - name: POSTGRES_HOST + value: ${POSTGRES_HOST} + - name: POSTGRES_SUPER_PASS + valueFrom: + secretKeyRef: + name: postgres-superuser + key: password + envFrom: + - secretRef: + name: pushover-notifier-ankr-queries-secret diff --git a/kubernetes/apps/default/pushover-notifier/ankr-queries/secret.sops.yaml b/kubernetes/apps/default/pushover-notifier/ankr-queries/secret.sops.yaml new file mode 100644 index 000000000..93c83de13 --- /dev/null +++ b/kubernetes/apps/default/pushover-notifier/ankr-queries/secret.sops.yaml @@ -0,0 +1,33 @@ +# yamllint disable +apiVersion: v1 +kind: Secret +metadata: + name: pushover-notifier-ankr-queries-secret + namespace: default +type: Opaque +stringData: + POSTGRES_DB: ENC[AES256_GCM,data:QTTAnp99RU4DhC3mn9IUaTw=,iv:VP6oHP3N9mG9TboqQ9jbIUlK+CoVqxWXFIus692bw/I=,tag:Y0CAs3yH4OM+rZlmqYJTfg==,type:str] + POSTGRES_USER: ENC[AES256_GCM,data:wtl7bwSp2EMTwUsA8MzhTXQ=,iv:RccrE8s7XNtNwF2z59BD36GEPmbEw6n6xPVPuS+/6oE=,tag:2xaXDK1cR3KXkljdQtHVNQ==,type:str] + POSTGRES_PASS: ENC[AES256_GCM,data:HifiMzAawK0mls6hrE58j2c23lc=,iv:O59tbU+JN4LAfuhLo+4y+AJx7ZrTPWPxPX9QtGLFvYQ=,tag:xtdaVNj6D0Wr/Ven+p8tJg==,type:str] + PUSHOVER_API_TOKEN: ENC[AES256_GCM,data:waPntuH+JjGBr2t9I4U9D/llZC9KW/QyyMUu3EHH,iv:NU6/tbrYRoUSME5ecachU0LDNsz7W31DkEw1S8fSIqw=,tag:YbmZbOOn81+kkGb4Sf2Q2w==,type:str] + PUSHOVER_USER_KEY: ENC[AES256_GCM,data:zgoGVo8k7xjuT0+W5AyAkGtJpmTkplW3wmAWqZrY,iv:8ZYZT1I7EOK2mfvjSY+4RfRHQeczYmxihfDHcjRpUSI=,tag:Vkq+ny1eVmAOHmBiAutuNg==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1hhurqwmfvl9m3vh3hk8urulfzcdsrep2ax2neazqt435yhpamu3qj20asg + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJaU16anJNV2pBZmxPR3h2 + bWREUnpjcTFvd05ZQ2E4VVBDdm1FL2k4WEYwCkdQSStTNWtpdjNkUW51WS9MekdC + VkpTUUFjSjY2a1JMOUtqOVh5M0JRR2sKLS0tIDRmcWpJSEVvaUp4U1lsaTZYZGNw + OGVKWU0zNUZJSFh4aFJxQWFsYm1VeFkKaDeI/hl7z0Qh8t5W39Kxu9ert1dt4xo+ + LX+MjpVqxiZNcfwROD4bkWeQSN+VsxoGOOyj4L15BlggNnlg+L7Hww== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2023-03-18T15:36:57Z" + mac: ENC[AES256_GCM,data:L1q6+ngZzlrpCreFyBaOCik7v3JoTrNJekv2gxsIynaMQuFTtHVGx8/+m2UvEmt3Upc8tbN6N3JYIxoske91EI2mEuv3DEJPBmHcWtuQ/eXyd5E0kowqobasdnTJHGSo7ym2I0BsbYM4v4ZJj83Zm9fUigjRP874N/QCbs829/A=,iv:xO/iVXiWzbATJNUvyOLkQMt++rK837n+iygS9aWBKrE=,tag:eLMaq/VvvKM65JRNlxtEng==,type:str] + pgp: [] + encrypted_regex: ^(data|stringData)$ + version: 3.7.3 diff --git a/kubernetes/apps/default/pushover-notifier/github-releases/config/script.py b/kubernetes/apps/default/pushover-notifier/github-releases/config/script.py index c8b392579..6d95caf32 100644 --- a/kubernetes/apps/default/pushover-notifier/github-releases/config/script.py +++ b/kubernetes/apps/default/pushover-notifier/github-releases/config/script.py @@ -27,7 +27,7 @@ conn = psycopg2.connect( def create_table(): with conn.cursor() as cursor: cursor.execute(""" - CREATE TABLE IF NOT EXISTS release_tracker ( + CREATE TABLE IF NOT EXISTS github_releases ( repo_name VARCHAR(255) PRIMARY KEY, latest_release VARCHAR(255), release_date TIMESTAMP @@ -61,12 +61,12 @@ def main(): with conn.cursor() as cursor: cursor.execute(""" - INSERT INTO release_tracker (repo_name, latest_release, release_date) + INSERT INTO github_releases (repo_name, latest_release, release_date) VALUES (%s, %s, %s) ON CONFLICT (repo_name) DO UPDATE SET latest_release = EXCLUDED.latest_release, release_date = EXCLUDED.release_date - WHERE EXCLUDED.release_date > release_tracker.release_date + WHERE EXCLUDED.release_date > github_releases.release_date RETURNING * """, (repo_name, latest_tag, release_date)) result = cursor.fetchone() diff --git a/kubernetes/apps/default/pushover-notifier/github-releases/secret.sops.yaml b/kubernetes/apps/default/pushover-notifier/github-releases/secret.sops.yaml index f739cc5bf..dbf35bb10 100644 --- a/kubernetes/apps/default/pushover-notifier/github-releases/secret.sops.yaml +++ b/kubernetes/apps/default/pushover-notifier/github-releases/secret.sops.yaml @@ -6,10 +6,10 @@ metadata: namespace: default type: Opaque stringData: - POSTGRES_DB: ENC[AES256_GCM,data:TnN+0+oj8dnOfK4cLhG7X92uSKnQXYG8,iv:OhJfVcPs7abVQSkVdXfFz/Fquoo5RxJ/Wc3oiV4Bt6s=,tag:fIKiwnzjvmxa8MDMkUQBdw==,type:str] - POSTGRES_USER: ENC[AES256_GCM,data:bVUPMIrL2WLRdwJvraggsxv3NE6PN9KH,iv:k2+xPOalt7Qy/HQSA5TnRcUVWKxiuEAXsAdFMGZaajc=,tag:75ijQQTliXZrOu4gGPEHTw==,type:str] + POSTGRES_DB: ENC[AES256_GCM,data:J+zrbZI47CMW5ITQRUXan3M=,iv:Q97KeB8ssOXDVO2XehQF/NA8P9To4oX+NWmnaxy7PFs=,tag:fTzdivfoRoPakpfU4yXi/w==,type:str] + POSTGRES_USER: ENC[AES256_GCM,data:LNGaeR1bQfgLJ5RC8G2oTog=,iv:oFUjYbX0YkAEaKpPloYaTEYQOB48Sv2Prf3CFyszGR0=,tag:6Q9NC5bml8Kf0M+Ok+U0dA==,type:str] POSTGRES_PASS: ENC[AES256_GCM,data:HifiMzAawK0mls6hrE58j2c23lc=,iv:O59tbU+JN4LAfuhLo+4y+AJx7ZrTPWPxPX9QtGLFvYQ=,tag:xtdaVNj6D0Wr/Ven+p8tJg==,type:str] - PUSHOVER_API_TOKEN: ENC[AES256_GCM,data:3L6WwMNDFwmlOr5fqjvcAAZDzqkC+amE5YLdNVfR,iv:VHAadcQN5Ymr5iH9zZ5rZ5OLvYwe5HDuTQMLfQhIPnA=,tag:EdyCcoDrh8NvbzN3UnCInw==,type:str] + PUSHOVER_API_TOKEN: ENC[AES256_GCM,data:MNsnHE3n1Vqb0IjdPAmUPrTKpfIVrn9lk8GPoSlv,iv:AMVXc/WGdU18GSUNySf1PGlRuJzNA7iLxrtgu10BOdI=,tag:R8zge4m1+aklSds25zGc4w==,type:str] PUSHOVER_USER_KEY: ENC[AES256_GCM,data:zgoGVo8k7xjuT0+W5AyAkGtJpmTkplW3wmAWqZrY,iv:8ZYZT1I7EOK2mfvjSY+4RfRHQeczYmxihfDHcjRpUSI=,tag:Vkq+ny1eVmAOHmBiAutuNg==,type:str] sops: kms: [] @@ -26,8 +26,8 @@ sops: OGVKWU0zNUZJSFh4aFJxQWFsYm1VeFkKaDeI/hl7z0Qh8t5W39Kxu9ert1dt4xo+ LX+MjpVqxiZNcfwROD4bkWeQSN+VsxoGOOyj4L15BlggNnlg+L7Hww== -----END AGE ENCRYPTED FILE----- - lastmodified: "2023-03-18T13:42:19Z" - mac: ENC[AES256_GCM,data:1qGdFDmCJw2rnKQfhLbx/qENNRGKBQnW/r+/xWtrSTFX3qM8L7EK/qqStyfXYiNdxYa7EkvmwzXde7zCMm3kEnfVo3oPjkz30ZR4yEN2dHHfHvaop+b8BtpU9jBi3cDMn3R/jpTjUltVzU/nJjH/ezFzSrnOwKcvlFxOsD2TBvs=,iv:igCtiZAzdpK4k3bmMTT6LFbjZu7wk/9t5JZOTvqgHUg=,tag:7fCVE3/wv3rgXWHb+6wPhg==,type:str] + lastmodified: "2023-03-18T15:35:14Z" + mac: ENC[AES256_GCM,data:sg0K9LM+jAlIhenLH1PercI8Bxz9gRgRB1fGMiPIUpS/n5zTSvkGB9JBVtvzR4NkQz/iYod6R9xtzh3T2FrH/+pAnXugJGwCtcQ6hwGK8lSvg5k4ht23ayS7MSfP/JW9a7etNqgG+QX94C7/peodepMIGJp1zYc4v8lKQ9RAwCQ=,iv:uSfQ27CW62qQnls0jR3BBM+3OaGz75BlyLtudHwVrZM=,tag:2HroSsRaBKHg2g3H84+xRw==,type:str] pgp: [] encrypted_regex: ^(data|stringData)$ version: 3.7.3 diff --git a/kubernetes/apps/default/pushover-notifier/ks.yaml b/kubernetes/apps/default/pushover-notifier/ks.yaml index f0d15e19a..12b972e05 100644 --- a/kubernetes/apps/default/pushover-notifier/ks.yaml +++ b/kubernetes/apps/default/pushover-notifier/ks.yaml @@ -21,3 +21,26 @@ spec: interval: 30m retryInterval: 1m timeout: 3m +--- +# yaml-language-server: $schema=https://kubernetes-schemas.devbu.io/kustomization_v1beta2.json +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: cluster-apps-pushover-notifier-ankr-queries + namespace: flux-system + labels: + substitution.flux.home.arpa/enabled: "true" +spec: + path: ./kubernetes/apps/default/pushover-notifier/ankr-queries + prune: true + sourceRef: + kind: GitRepository + name: home-ops-kubernetes + healthChecks: + - apiVersion: helm.toolkit.fluxcd.io/v2beta1 + kind: HelmRelease + name: pushover-notifier-ankr-queries + namespace: default + interval: 30m + retryInterval: 1m + timeout: 3m