File: //scripts/kuma_auto_sync.sh
#!/bin/bash
# ---------------------------
# CONFIGURATION
# ---------------------------
KUMA_URL="https://status.karmanye.in"
API_KEY="uk1_MtY-Zytfs8U9xc3suBAUiogfEgd48jomZJF8i9di"
ALREADY_FILE="/scripts/kuma_added_sites.txt"
TMP_FILE="/scripts/active_sites.txt"
# Ensure files exist
mkdir -p /scripts
touch "$ALREADY_FILE"
touch "$TMP_FILE"
# ---------------------------
# DISCOVER ACTIVE SITES
# ---------------------------
> "$TMP_FILE"
# 1. Nginx sites
NGINX_PATH="/etc/nginx/conf.d"
if [ -d "$NGINX_PATH" ]; then
grep -hR "server_name" "$NGINX_PATH"/* 2>/dev/null | awk '{print $2}' | tr -d ';' >> "$TMP_FILE"
fi
# 2. CyberPanel/OpenLiteSpeed sites (use folder names as domains)
VHOST_PATH="/usr/local/lsws/conf/vhosts"
if [ -d "$VHOST_PATH" ]; then
for FOLDER in "$VHOST_PATH"/*; do
DOMAIN=$(basename "$FOLDER")
# Skip suspended sites (if folder name contains 'suspended')
if [[ "$DOMAIN" != *suspended* ]]; then
echo "$DOMAIN" >> "$TMP_FILE"
fi
done
fi
# Remove duplicates and empty lines
sort -u "$TMP_FILE" -o "$TMP_FILE"
sed -i '/^$/d' "$TMP_FILE"
# ---------------------------
# SYNC WITH UPTIME KUMA
# ---------------------------
while read -r SITE; do
if ! grep -q "^$SITE$" "$ALREADY_FILE"; then
echo "Adding new site to Uptime Kuma: $SITE"
RESPONSE=$(curl -s -X POST "$KUMA_URL/api/monitor/add" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d "{\"name\":\"$SITE\",\"type\":\"http\",\"url\":\"https://$SITE\",\"interval\":60}")
if echo "$RESPONSE" | grep -q "monitorId"; then
echo "$SITE" >> "$ALREADY_FILE"
echo "Added $SITE successfully."
else
echo "Failed to add $SITE. Response: $RESPONSE"
fi
else
echo "$SITE is already in Uptime Kuma."
fi
done < "$TMP_FILE"
echo "Sync completed."