feat: add CoopCredits Solana media rewards ecosystem
Add complete token system with Plex/Tautulli/Overseer integration: - Anchor program for SPL token mint/burn/transfer - Express backend with OAuth, webhooks, Solana integration - Next.js frontend with dashboard, admin panel, wallet management - Docker deployment for 172.20.1.0/24 infrastructure - Production configs with SSL, Nginx, health monitoring Tautulli webhooks auto-mint on watch events. Overseer integration burns for content requests.
This commit is contained in:
Executable
+228
@@ -0,0 +1,228 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================
|
||||
# CoopCredits Health Check Script
|
||||
# Monitors all services in the infrastructure
|
||||
# ==========================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Configuration
|
||||
PLEX_IP="172.20.1.220"
|
||||
OVERSEER_IP="172.20.1.225"
|
||||
TAUTULLI_IP="172.20.1.255"
|
||||
|
||||
PLEX_PORT="32400"
|
||||
OVERSEER_PORT="5055"
|
||||
TAUTULLI_PORT="8181"
|
||||
|
||||
# Track overall health
|
||||
HEALTHY=0
|
||||
UNHEALTHY=0
|
||||
|
||||
print_header() {
|
||||
echo ""
|
||||
echo "🏥 CoopCredits Health Check"
|
||||
echo "=========================="
|
||||
echo "$(date)"
|
||||
echo ""
|
||||
}
|
||||
|
||||
check_service() {
|
||||
local name=$1
|
||||
local url=$2
|
||||
local expected_code=${3:-200}
|
||||
|
||||
echo -n "Checking $name... "
|
||||
|
||||
if curl -sf -o /dev/null -w "%{http_code}" "$url" 2>/dev/null | grep -q "$expected_code"; then
|
||||
echo -e "${GREEN}✅ OK${NC}"
|
||||
((HEALTHY++))
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ FAIL${NC}"
|
||||
((UNHEALTHY++))
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_docker_service() {
|
||||
local name=$1
|
||||
local container=$2
|
||||
|
||||
echo -n "Checking Docker container: $name... "
|
||||
|
||||
if docker ps --format "{{.Names}}" | grep -q "^${container}$"; then
|
||||
local status=$(docker inspect --format='{{.State.Status}}' "$container" 2>/dev/null)
|
||||
if [ "$status" = "running" ]; then
|
||||
echo -e "${GREEN}✅ Running${NC}"
|
||||
((HEALTHY++))
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ Not running (status: $status)${NC}"
|
||||
((UNHEALTHY++))
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}❌ Not found${NC}"
|
||||
((UNHEALTHY++))
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_network_connectivity() {
|
||||
local name=$1
|
||||
local ip=$2
|
||||
local port=$3
|
||||
|
||||
echo -n "Network connectivity to $name ($ip:$port)... "
|
||||
|
||||
if timeout 5 bash -c "</dev/tcp/$ip/$port" 2>/dev/null; then
|
||||
echo -e "${GREEN}✅ Reachable${NC}"
|
||||
((HEALTHY++))
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ Unreachable${NC}"
|
||||
((UNHEALTHY++))
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_disk_space() {
|
||||
echo ""
|
||||
echo "📊 Disk Space"
|
||||
echo "-------------"
|
||||
|
||||
df -h / | awk 'NR==2 {printf "Root: %s used of %s (%s)\n", $3, $2, $5}'
|
||||
|
||||
local usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
|
||||
if [ "$usage" -gt 90 ]; then
|
||||
echo -e "${RED}⚠️ Critical disk usage!${NC}"
|
||||
((UNHEALTHY++))
|
||||
elif [ "$usage" -gt 80 ]; then
|
||||
echo -e "${YELLOW}⚠️ High disk usage${NC}"
|
||||
else
|
||||
echo -e "${GREEN}✅ Disk usage OK${NC}"
|
||||
((HEALTHY++))
|
||||
fi
|
||||
}
|
||||
|
||||
check_memory() {
|
||||
echo ""
|
||||
echo "🧠 Memory Usage"
|
||||
echo "--------------"
|
||||
|
||||
if command -v free >/dev/null 2>&1; then
|
||||
free -h | grep "Mem:" | awk '{printf "Used: %s / %s\n", $3, $2}'
|
||||
|
||||
local usage=$(free | grep "Mem:" | awk '{printf "%.0f", $3/$2 * 100}')
|
||||
if [ "$usage" -gt 90 ]; then
|
||||
echo -e "${RED}⚠️ Critical memory usage!${NC}"
|
||||
((UNHEALTHY++))
|
||||
elif [ "$usage" -gt 80 ]; then
|
||||
echo -e "${YELLOW}⚠️ High memory usage${NC}"
|
||||
else
|
||||
echo -e "${GREEN}✅ Memory usage OK${NC}"
|
||||
((HEALTHY++))
|
||||
fi
|
||||
else
|
||||
echo "Memory check not available"
|
||||
fi
|
||||
}
|
||||
|
||||
check_ssl_certificate() {
|
||||
echo ""
|
||||
echo "🔒 SSL Certificate"
|
||||
echo "------------------"
|
||||
|
||||
local domain="coop.hobokenchicken.com"
|
||||
local expiry=$(echo | openssl s_client -servername "$domain" -connect "$domain:443" 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
|
||||
|
||||
if [ -n "$expiry" ]; then
|
||||
local expiry_epoch=$(date -d "$expiry" +%s 2>/dev/null || date -j -f "%b %d %H:%M:%S %Y %Z" "$expiry" +%s)
|
||||
local now_epoch=$(date +%s)
|
||||
local days_left=$(( (expiry_epoch - now_epoch) / 86400 ))
|
||||
|
||||
echo "Certificate expires: $expiry ($days_left days)"
|
||||
|
||||
if [ "$days_left" -lt 7 ]; then
|
||||
echo -e "${RED}⚠️ Certificate expires soon!${NC}"
|
||||
((UNHEALTHY++))
|
||||
elif [ "$days_left" -lt 30 ]; then
|
||||
echo -e "${YELLOW}⚠️ Certificate expires in $days_left days${NC}"
|
||||
else
|
||||
echo -e "${GREEN}✅ Certificate valid${NC}"
|
||||
((HEALTHY++))
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Could not check certificate${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
run_checks() {
|
||||
print_header
|
||||
|
||||
# Docker Services
|
||||
echo "🐳 Docker Services"
|
||||
echo "------------------"
|
||||
check_docker_service "Nginx" "coop-nginx"
|
||||
check_docker_service "Frontend" "coop-frontend"
|
||||
check_docker_service "Backend" "coop-backend"
|
||||
check_docker_service "PostgreSQL" "coop-postgres"
|
||||
check_docker_service "Redis" "coop-redis"
|
||||
|
||||
# Network Connectivity
|
||||
echo ""
|
||||
echo "🌐 Network Connectivity"
|
||||
echo "-----------------------"
|
||||
check_network_connectivity "Plex" "$PLEX_IP" "$PLEX_PORT"
|
||||
check_network_connectivity "Tautulli" "$TAUTULLI_IP" "$TAUTULLI_PORT"
|
||||
check_network_connectivity "Overseer" "$OVERSEER_IP" "$OVERSEER_PORT"
|
||||
|
||||
# External Services
|
||||
echo ""
|
||||
echo "🔗 External Services"
|
||||
echo "--------------------"
|
||||
check_service "CoopCredits Website" "https://coop.hobokenchicken.com/health"
|
||||
check_service "Backend API" "https://coop.hobokenchicken.com/api/health"
|
||||
|
||||
# System Resources
|
||||
check_disk_space
|
||||
check_memory
|
||||
|
||||
# SSL
|
||||
check_ssl_certificate
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
echo "📋 Summary"
|
||||
echo "----------"
|
||||
echo -e "${GREEN}✅ $HEALTHY healthy${NC}"
|
||||
if [ $UNHEALTHY -gt 0 ]; then
|
||||
echo -e "${RED}❌ $UNHEALTHY unhealthy${NC}"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${GREEN}All systems operational!${NC}"
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
# Run in watch mode if requested
|
||||
if [ "$1" == "--watch" ]; then
|
||||
while true; do
|
||||
clear
|
||||
run_checks
|
||||
echo ""
|
||||
echo "Refreshing in 30 seconds... (Ctrl+C to stop)"
|
||||
sleep 30
|
||||
done
|
||||
else
|
||||
run_checks
|
||||
fi
|
||||
Reference in New Issue
Block a user