webupdatev1
This commit is contained in:
77
backend/health-check.sh
Executable file
77
backend/health-check.sh
Executable file
@@ -0,0 +1,77 @@
|
||||
#!/bin/bash
|
||||
# Database Health Check Script
|
||||
# Quick verification of database status
|
||||
|
||||
echo "🏥 SkyArtShop Database Health Check"
|
||||
echo "====================================="
|
||||
echo ""
|
||||
|
||||
# Check PostgreSQL is running
|
||||
echo "1️⃣ PostgreSQL Status:"
|
||||
if sudo systemctl is-active --quiet postgresql; then
|
||||
echo " ✅ PostgreSQL is running"
|
||||
else
|
||||
echo " ❌ PostgreSQL is not running"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Check backend server
|
||||
echo "2️⃣ Backend Server:"
|
||||
if pm2 list | grep -q "skyartshop-backend.*online"; then
|
||||
echo " ✅ Backend server is online"
|
||||
else
|
||||
echo " ⚠️ Backend server status unknown"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Test database connection
|
||||
echo "3️⃣ Database Connection:"
|
||||
if node -e "const {pool}=require('./config/database');pool.query('SELECT 1').then(()=>{console.log(' ✅ Connection successful');pool.end();process.exit(0);}).catch(e=>{console.log(' ❌ Connection failed:',e.message);pool.end();process.exit(1);});" 2>/dev/null; then
|
||||
true
|
||||
else
|
||||
echo " ❌ Cannot connect to database"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Check row counts
|
||||
echo "4️⃣ Data Status:"
|
||||
node -e "const {query,pool}=require('./config/database');(async()=>{try{const r=await query('SELECT (SELECT COUNT(*) FROM products) as products, (SELECT COUNT(*) FROM portfolioprojects) as portfolio, (SELECT COUNT(*) FROM blogposts) as blog, (SELECT COUNT(*) FROM pages) as pages');const d=r.rows[0];console.log(' Products:',d.products);console.log(' Portfolio:',d.portfolio);console.log(' Blog:',d.blog);console.log(' Pages:',d.pages);}catch(e){console.log(' ❌',e.message);}finally{await pool.end();}})()" 2>/dev/null
|
||||
echo ""
|
||||
|
||||
# Check indexes
|
||||
echo "5️⃣ Database Indexes:"
|
||||
node -e "const {query,pool}=require('./config/database');(async()=>{try{const r=await query(\"SELECT COUNT(*) as count FROM pg_indexes WHERE schemaname='public' AND tablename IN ('products','product_images','portfolioprojects','blogposts','pages')\");console.log(' Total indexes:',r.rows[0].count);}catch(e){console.log(' ❌',e.message);}finally{await pool.end();}})()" 2>/dev/null
|
||||
echo ""
|
||||
|
||||
# Test API endpoints
|
||||
echo "6️⃣ API Endpoints:"
|
||||
if curl -s http://localhost:5000/api/products > /dev/null 2>&1; then
|
||||
echo " ✅ /api/products"
|
||||
else
|
||||
echo " ❌ /api/products"
|
||||
fi
|
||||
|
||||
if curl -s http://localhost:5000/api/portfolio/projects > /dev/null 2>&1; then
|
||||
echo " ✅ /api/portfolio/projects"
|
||||
else
|
||||
echo " ❌ /api/portfolio/projects"
|
||||
fi
|
||||
|
||||
if curl -s http://localhost:5000/api/categories > /dev/null 2>&1; then
|
||||
echo " ✅ /api/categories"
|
||||
else
|
||||
echo " ❌ /api/categories"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Cache performance
|
||||
echo "7️⃣ Cache Performance:"
|
||||
node -e "const {query,pool}=require('./config/database');(async()=>{try{const r=await query(\"SELECT CASE WHEN sum(heap_blks_hit)+sum(heap_blks_read)>0 THEN round(100.0*sum(heap_blks_hit)/(sum(heap_blks_hit)+sum(heap_blks_read)),2) ELSE 0 END as ratio FROM pg_statio_user_tables WHERE schemaname='public'\");const ratio=r.rows[0].ratio;const status=ratio>99?'✅':ratio>95?'⚠️':'❌';console.log(' ',status,'Cache hit ratio:',ratio+'%','(target: >99%)');}catch(e){console.log(' ❌',e.message);}finally{await pool.end();}})()" 2>/dev/null
|
||||
echo ""
|
||||
|
||||
echo "✅ Health check complete!"
|
||||
echo ""
|
||||
echo "To see detailed analysis, run:"
|
||||
echo " node analyze-queries.js"
|
||||
Reference in New Issue
Block a user