Files
aitbc/scripts/workflow/21_maintenance_automation.sh
aitbc1 9061ddaaa6
All checks were successful
Systemd Sync / sync-systemd (push) Successful in 3s
Documentation Validation / validate-docs (push) Successful in 11s
feat: add comprehensive marketplace scenario testing and update production readiness workflow
🛒 Marketplace Testing Enhancement:
• Add complete marketplace workflow test with 6-step scenario
• Test GPU bidding from aitbc server to marketplace
• Test bid confirmation and job creation by aitbc1
• Test Ollama AI task submission and execution monitoring
• Test blockchain payment processing and transaction mining
• Add balance verification for both parties after payment
• Add marketplace status
2026-03-29 18:58:24 +02:00

290 lines
8.9 KiB
Bash
Executable File

#!/bin/bash
# AITBC Maintenance Automation Script
# Automates weekly maintenance tasks
set -e
echo "=== 🔄 AITBC MAINTENANCE AUTOMATION ==="
echo "Timestamp: $(date)"
echo ""
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Log file
LOG_FILE="/var/log/aitbc/maintenance.log"
mkdir -p $(dirname "$LOG_FILE")
# Function to log actions
log_action() {
echo "[$(date)] $1" | tee -a "$LOG_FILE"
}
# Function to check status
check_status() {
if [ $? -eq 0 ]; then
echo -e " ${GREEN}${NC} $1"
log_action "SUCCESS: $1"
else
echo -e " ${RED}${NC} $1"
log_action "FAILED: $1"
fi
}
echo "1. 🧹 SYSTEM CLEANUP"
echo "=================="
# Clean old logs
log_action "Starting log cleanup"
find /var/log/aitbc -name "*.log" -mtime +7 -delete 2>/dev/null || true
find /var/log -name "*aitbc*" -mtime +7 -delete 2>/dev/null || true
check_status "Cleaned old log files"
# Clean temporary files
log_action "Starting temp file cleanup"
find /tmp -name "*aitbc*" -mtime +1 -delete 2>/dev/null || true
find /var/tmp -name "*aitbc*" -mtime +1 -delete 2>/dev/null || true
check_status "Cleaned temporary files"
# Clean old backups (keep last 5)
log_action "Starting backup cleanup"
if [ -d "/opt/aitbc/backups" ]; then
cd /opt/aitbc/backups
ls -t | tail -n +6 | xargs -r rm -rf
check_status "Cleaned old backups (kept last 5)"
else
echo -e " ${YELLOW}⚠️${NC} Backup directory not found"
fi
echo ""
echo "2. 💾 DATABASE MAINTENANCE"
echo "========================"
# Optimize main database
log_action "Starting database optimization"
if [ -f "/var/lib/aitbc/data/ait-mainnet/chain.db" ]; then
sqlite3 /var/lib/aitbc/data/ait-mainnet/chain.db "VACUUM;" 2>/dev/null || true
sqlite3 /var/lib/aitbc/data/ait-mainnet/chain.db "ANALYZE;" 2>/dev/null || true
check_status "Main database optimized"
else
echo -e " ${YELLOW}⚠️${NC} Main database not found"
fi
# Optimize mempool database
if [ -f "/var/lib/aitbc/data/mempool.db" ]; then
sqlite3 /var/lib/aitbc/data/mempool.db "VACUUM;" 2>/dev/null || true
sqlite3 /var/lib/aitbc/data/mempool.db "ANALYZE;" 2>/dev/null || true
check_status "Mempool database optimized"
else
echo -e " ${YELLOW}⚠️${NC} Mempool database not found"
fi
echo ""
echo "3. 🔍 SYSTEM HEALTH CHECK"
echo "========================"
# Check service status
log_action "Starting service health check"
services=("aitbc-blockchain-node" "aitbc-blockchain-rpc")
for service in "${services[@]}"; do
if systemctl is-active --quiet "$service"; then
echo -e " ${GREEN}${NC} $service is running"
log_action "SUCCESS: $service is running"
else
echo -e " ${RED}${NC} $service is not running"
log_action "FAILED: $service is not running"
# Try to restart failed service
systemctl restart "$service" || true
sleep 2
if systemctl is-active --quiet "$service"; then
echo -e " ${YELLOW}⚠️${NC} $service restarted successfully"
log_action "RECOVERED: $service restarted"
fi
fi
done
# Check disk space
log_action "Starting disk space check"
disk_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$disk_usage" -lt 80 ]; then
echo -e " ${GREEN}${NC} Disk usage: ${disk_usage}%"
log_action "SUCCESS: Disk usage ${disk_usage}%"
else
echo -e " ${YELLOW}⚠️${NC} Disk usage high: ${disk_usage}%"
log_action "WARNING: Disk usage ${disk_usage}%"
fi
# Check memory usage
log_action "Starting memory check"
mem_usage=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100.0}')
if [ $(echo "$mem_usage < 80" | bc -l) -eq 1 ]; then
echo -e " ${GREEN}${NC} Memory usage: ${mem_usage}%"
log_action "SUCCESS: Memory usage ${mem_usage}%"
else
echo -e " ${YELLOW}⚠️${NC} Memory usage high: ${mem_usage}%"
log_action "WARNING: Memory usage ${mem_usage}%"
fi
echo ""
echo "4. 🌐 NETWORK CONNECTIVITY"
echo "========================"
# Test RPC endpoints
log_action "Starting RPC connectivity test"
if curl -s http://localhost:8006/rpc/info >/dev/null 2>&1; then
echo -e " ${GREEN}${NC} Local RPC responding"
log_action "SUCCESS: Local RPC responding"
else
echo -e " ${RED}${NC} Local RPC not responding"
log_action "FAILED: Local RPC not responding"
fi
# Test cross-node connectivity
if ssh aitbc "curl -s http://localhost:8006/rpc/info" >/dev/null 2>&1; then
echo -e " ${GREEN}${NC} Cross-node connectivity working"
log_action "SUCCESS: Cross-node connectivity working"
else
echo -e " ${RED}${NC} Cross-node connectivity failed"
log_action "FAILED: Cross-node connectivity failed"
fi
echo ""
echo "5. 🔒 SECURITY CHECK"
echo "=================="
# Check security monitoring
log_action "Starting security check"
if [ -f "/opt/aitbc/scripts/security_monitor.sh" ]; then
# Run security monitor
/opt/aitbc/scripts/security_monitor.sh >/dev/null 2>&1 || true
check_status "Security monitoring executed"
else
echo -e " ${YELLOW}⚠️${NC} Security monitor not found"
fi
# Check for failed SSH attempts
failed_ssh=$(grep "authentication failure" /var/log/auth.log 2>/dev/null | grep "$(date '+%b %d')" | wc -l)
if [ "$failed_ssh" -lt 10 ]; then
echo -e " ${GREEN}${NC} Failed SSH attempts: $failed_ssh"
log_action "SUCCESS: Failed SSH attempts $failed_ssh"
else
echo -e " ${YELLOW}⚠️${NC} High failed SSH attempts: $failed_ssh"
log_action "WARNING: High failed SSH attempts $failed_ssh"
fi
echo ""
echo "6. 📊 PERFORMANCE METRICS"
echo "========================"
# Collect performance metrics
log_action "Starting performance collection"
mkdir -p /opt/aitbc/performance
# Get current metrics
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | sed 's/%us,//')
mem_usage=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100.0}')
disk_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
block_height=$(curl -s http://localhost:8006/rpc/head | jq -r .height 2>/dev/null || echo "0")
total_accounts=$(curl -s http://localhost:8006/rpc/info | jq -r .total_accounts 2>/dev/null || echo "0")
total_transactions=$(curl -s http://localhost:8006/rpc/info | jq -r .total_transactions 2>/dev/null || echo "0")
# Save metrics
cat > "/opt/aitbc/performance/metrics_$(date +%Y%m%d_%H%M%S).txt" << EOF
Maintenance Performance Metrics
Generated: $(date)
System Metrics:
- CPU Usage: ${cpu_usage}%
- Memory Usage: ${mem_usage}%
- Disk Usage: ${disk_usage}%
Blockchain Metrics:
- Block Height: ${block_height}
- Total Accounts: ${total_accounts}
- Total Transactions: ${total_transactions}
Services Status:
- aitbc-blockchain-node: $(systemctl is-active aitbc-blockchain-node)
- aitbc-blockchain-rpc: $(systemctl is-active aitbc-blockchain-rpc)
EOF
check_status "Performance metrics collected"
echo ""
echo "7. 💾 BACKUP CREATION"
echo "===================="
# Create backup
log_action "Starting backup creation"
backup_dir="/opt/aitbc/backups/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$backup_dir"
# Backup configuration files
cp -r /etc/aitbc "$backup_dir/" 2>/dev/null || true
cp -r /var/lib/aitbc/keystore "$backup_dir/" 2>/dev/null || true
# Backup database files
cp -r /var/lib/aitbc/data "$backup_dir/" 2>/dev/null || true
# Create backup manifest
cat > "$backup_dir/manifest.txt" << EOF
AITBC Backup Manifest
Created: $(date)
Hostname: $(hostname)
Block Height: $block_height
Total Accounts: $total_accounts
Total Transactions: $total_transactions
Contents:
- Configuration files
- Wallet keystore
- Database files
EOF
check_status "Backup created: $backup_dir"
echo ""
echo "8. 🔄 SERVICE RESTART (Optional)"
echo "=============================="
# Graceful service restart if needed
echo "Checking if service restart is needed..."
uptime_days=$(uptime -p 2>/dev/null | grep -o '[0-9]*' | head -1 || echo "0")
if [ "$uptime_days" -gt 7 ]; then
echo "System uptime > 7 days, restarting services..."
log_action "Restarting services due to high uptime"
systemctl restart aitbc-blockchain-node aitbc-blockchain-rpc
ssh aitbc 'systemctl restart aitbc-blockchain-node aitbc-blockchain-rpc'
sleep 5
# Verify services are running
if systemctl is-active --quiet aitbc-blockchain-node && systemctl is-active --quiet aitbc-blockchain-rpc; then
check_status "Services restarted successfully"
else
echo -e " ${RED}${NC} Service restart failed"
log_action "FAILED: Service restart failed"
fi
else
echo -e " ${GREEN}${NC} No service restart needed (uptime: $uptime_days days)"
fi
echo ""
echo "=== 🔄 MAINTENANCE COMPLETE ==="
echo ""
echo "Maintenance tasks completed:"
echo "• System cleanup performed"
echo "• Database optimization completed"
echo "• Health checks executed"
echo "• Security monitoring performed"
echo "• Performance metrics collected"
echo "• Backup created"
echo "• Log file: $LOG_FILE"
echo ""
echo -e "${GREEN}✅ Maintenance automation completed successfully!${NC}"