mirror of
https://github.com/auricom/home-cluster.git
synced 2025-09-17 18:24:14 +02:00
🚀 ankr-queries
This commit is contained in:
@@ -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/
|
||||
|
@@ -0,0 +1,3 @@
|
||||
addresses:
|
||||
- address: "0xd14a28667d263efda2033ceb3b466399723c9c9c"
|
||||
memo: "@Defi_Maestro"
|
@@ -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()
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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()
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user