← back to Cypress Awards
backend/check_server_status.sh
114 lines
#!/bin/bash
# Server Status Check - Runs daily at 6 AM
# Emails steve@designerwallcoverings.com with server status
cd /root/WebsitesMisc/cypresawards/backend
EMAIL="steve@designerwallcoverings.com"
LOG_FILE="/var/log/cypresawards_server_check.log"
# Start logging
echo "$(date): Starting server status check..." >> ${LOG_FILE}
# Initialize status details
STATUS_DETAILS=""
# 1. Check if server is reachable (ping)
if ping -c 3 45.61.58.125 &> /dev/null; then
STATUS_DETAILS="${STATUS_DETAILS}✅ Server Ping: SUCCESS (3/3 packets received)\n"
else
STATUS_DETAILS="${STATUS_DETAILS}❌ Server Ping: FAILED\n"
fi
# 2. Check web server (nginx port 80)
if curl -s -o /dev/null -w "%{http_code}" http://45.61.58.125/ | grep -q "200\|301\|302"; then
STATUS_DETAILS="${STATUS_DETAILS}✅ Web Server (Port 80): UP\n"
else
STATUS_DETAILS="${STATUS_DETAILS}❌ Web Server (Port 80): DOWN\n"
fi
# 3. Check frontend server (port 3500)
if curl -s -o /dev/null -w "%{http_code}" http://localhost:3500/ | grep -q "200"; then
STATUS_DETAILS="${STATUS_DETAILS}✅ Frontend Server (Port 3500): UP\n"
else
STATUS_DETAILS="${STATUS_DETAILS}❌ Frontend Server (Port 3500): DOWN\n"
fi
# 4. Check API server (port 3010)
if curl -s http://localhost:3010/api/stats | grep -q "success"; then
STATUS_DETAILS="${STATUS_DETAILS}✅ API Server (Port 3010): UP\n"
else
STATUS_DETAILS="${STATUS_DETAILS}❌ API Server (Port 3010): DOWN\n"
fi
# 5. Check database connectivity
DB_CHECK=$(node -e "
const { query } = require('./src/models/database');
(async () => {
try {
const result = await query('SELECT COUNT(*) FROM organizations LIMIT 1');
console.log('OK');
} catch (error) {
console.log('ERROR');
}
process.exit(0);
})();
" 2>&1 | tail -1)
if echo "$DB_CHECK" | grep -q "OK"; then
STATUS_DETAILS="${STATUS_DETAILS}✅ Database: CONNECTED\n"
else
STATUS_DETAILS="${STATUS_DETAILS}❌ Database: CONNECTION FAILED\n"
fi
# 6. Get database stats
DB_STATS=$(node -e "
const { query } = require('./src/models/database');
(async () => {
try {
const orgs = await query('SELECT COUNT(*) as count FROM organizations');
const cases = await query('SELECT COUNT(*) as count FROM legal_cases');
const news = await query('SELECT COUNT(*) as count FROM news_articles');
console.log(' - Organizations: ' + orgs.rows[0].count);
console.log(' - Legal Cases: ' + cases.rows[0].count);
console.log(' - News Articles: ' + news.rows[0].count);
} catch (error) {
console.log(' - Error getting stats');
}
process.exit(0);
})();
" 2>&1 | grep -E " -")
STATUS_DETAILS="${STATUS_DETAILS}\nDatabase Statistics:\n${DB_STATS}\n"
# 7. Check disk usage
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
STATUS_DETAILS="${STATUS_DETAILS}\nSystem Resources:\n"
STATUS_DETAILS="${STATUS_DETAILS} - Disk Usage: ${DISK_USAGE}%\n"
if [ "$DISK_USAGE" -gt 80 ]; then
STATUS_DETAILS="${STATUS_DETAILS} ⚠️ WARNING: Disk usage above 80%\n"
fi
# 8. Check memory usage
MEMORY_USAGE=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
STATUS_DETAILS="${STATUS_DETAILS} - Memory Usage: ${MEMORY_USAGE}%\n"
# 9. Check running processes
NODE_PROCESSES=$(ps aux | grep -E "node.*server.js" | grep -v grep | wc -l)
STATUS_DETAILS="${STATUS_DETAILS} - Node.js Processes: ${NODE_PROCESSES}\n"
# Determine overall status
if echo -e "${STATUS_DETAILS}" | grep -q "❌"; then
OVERALL_STATUS="⚠️ ISSUES DETECTED"
else
OVERALL_STATUS="✅ ALL SYSTEMS OPERATIONAL"
fi
# Send email using Node.js script
echo "$(date): Sending status email..." >> ${LOG_FILE}
node send_status_email.js "${OVERALL_STATUS}" "$(echo -e ${STATUS_DETAILS})" >> ${LOG_FILE} 2>&1
echo "$(date): Server status check completed." >> ${LOG_FILE}
echo "" >> ${LOG_FILE}