From a3615f1ad71cc1145456376b7c0ee748352dfccd Mon Sep 17 00:00:00 2001 From: Jiri Uhlir Date: Wed, 3 Jun 2026 13:36:28 +0200 Subject: [PATCH] Add alerting database and default alert script --- alerts/log-alert.sh | 8 +++++ scripts/migrate-alerting-db.sh | 56 ++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100755 alerts/log-alert.sh create mode 100755 scripts/migrate-alerting-db.sh diff --git a/alerts/log-alert.sh b/alerts/log-alert.sh new file mode 100755 index 0000000..a1a1ff2 --- /dev/null +++ b/alerts/log-alert.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "ALERT" +echo "EVENT_TYPE=${APPFACTORY_ALERT_EVENT_TYPE:-}" +echo "SERVICE_ID=${APPFACTORY_ALERT_SERVICE_ID:-}" +echo "INCIDENT_ID=${APPFACTORY_ALERT_INCIDENT_ID:-}" +echo "PAYLOAD=${APPFACTORY_ALERT_PAYLOAD_JSON:-}" diff --git a/scripts/migrate-alerting-db.sh b/scripts/migrate-alerting-db.sh new file mode 100755 index 0000000..71a2125 --- /dev/null +++ b/scripts/migrate-alerting-db.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +set -euo pipefail + +DB_FILE="/opt/appfactory/data/appfactory/appfactory.db" + +python3 - "$DB_FILE" <<'PY' +import sqlite3 +import sys + +con = sqlite3.connect(sys.argv[1]) + +con.execute(""" +CREATE TABLE IF NOT EXISTS alert_rules ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + description TEXT, + event_type TEXT NOT NULL, + service_id TEXT, + script_name TEXT NOT NULL, + is_enabled INTEGER NOT NULL DEFAULT 1, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP +) +""") + +con.execute(""" +CREATE TABLE IF NOT EXISTS alert_events ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + rule_id INTEGER, + event_type TEXT NOT NULL, + service_id TEXT, + incident_id INTEGER, + status TEXT NOT NULL DEFAULT 'queued', + job_id INTEGER, + error_text TEXT, + payload_json TEXT, + created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, + processed_at TEXT +) +""") + +con.execute(""" +CREATE INDEX IF NOT EXISTS idx_alert_rules_event +ON alert_rules(event_type, is_enabled) +""") + +con.execute(""" +CREATE INDEX IF NOT EXISTS idx_alert_events_status +ON alert_events(status, created_at) +""") + +con.commit() +con.close() + +print("Alerting migration completed.") +PY