- Introduced configuration files for Docker, Podman, and SystemD deployments. - Implemented a comprehensive test suite for HMAC validation, file uploads, and network resilience. - Added debugging scripts for live monitoring of upload issues and service status. - Created minimal configuration for testing purposes. - Developed multiple test scripts to validate HMAC calculations and response handling. - Enhanced upload tests to cover various scenarios including invalid HMAC and unsupported file extensions. - Improved logging and error analysis capabilities for better diagnostics.
224 lines
7.2 KiB
Bash
224 lines
7.2 KiB
Bash
#!/bin/bash
|
|
# Live debugging script for HMAC File Server upload issues
|
|
# Monitors logs in real-time and provides detailed diagnostics
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
|
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
|
|
# Function to check service status
|
|
check_services() {
|
|
log_info "=== SERVICE STATUS CHECK ==="
|
|
|
|
echo "HMAC File Server:"
|
|
systemctl is-active hmac-file-server && echo "✅ Running" || echo "❌ Not running"
|
|
|
|
echo "Nginx:"
|
|
systemctl is-active nginx && echo "✅ Running" || echo "❌ Not running"
|
|
|
|
echo ""
|
|
}
|
|
|
|
# Function to show current configuration
|
|
show_config() {
|
|
log_info "=== CONFIGURATION SUMMARY ==="
|
|
|
|
echo "HMAC File Server Config:"
|
|
echo "- Max Upload Size: $(grep max_upload_size /opt/hmac-file-server/config.toml | cut -d'"' -f2)"
|
|
echo "- Chunk Size: $(grep chunksize /opt/hmac-file-server/config.toml | head -1 | cut -d'"' -f2)"
|
|
echo "- Chunked Uploads: $(grep chunkeduploadsenabled /opt/hmac-file-server/config.toml | cut -d'=' -f2 | tr -d ' ')"
|
|
echo "- Network Events: $(grep networkevents /opt/hmac-file-server/config.toml | cut -d'=' -f2 | tr -d ' ')"
|
|
echo "- Listen Address: $(grep listen_address /opt/hmac-file-server/config.toml | cut -d'"' -f2)"
|
|
|
|
echo ""
|
|
echo "Nginx Config:"
|
|
echo "- Client Max Body Size: $(nginx -T 2>/dev/null | grep client_max_body_size | head -1 | awk '{print $2}' | tr -d ';')"
|
|
echo "- Proxy Buffering: $(nginx -T 2>/dev/null | grep proxy_request_buffering | head -1 | awk '{print $2}' | tr -d ';')"
|
|
echo "- Proxy Timeouts: $(nginx -T 2>/dev/null | grep proxy_read_timeout | head -1 | awk '{print $2}' | tr -d ';')"
|
|
|
|
echo ""
|
|
}
|
|
|
|
# Function to monitor logs in real-time
|
|
monitor_logs() {
|
|
log_info "=== STARTING LIVE LOG MONITORING ==="
|
|
log_warning "Press Ctrl+C to stop monitoring"
|
|
echo ""
|
|
|
|
# Create named pipes for log monitoring
|
|
mkfifo /tmp/hmac_logs /tmp/nginx_logs 2>/dev/null || true
|
|
|
|
# Start log monitoring in background
|
|
journalctl -u hmac-file-server -f --no-pager > /tmp/hmac_logs &
|
|
HMAC_PID=$!
|
|
|
|
tail -f /var/log/nginx/access.log > /tmp/nginx_logs &
|
|
NGINX_PID=$!
|
|
|
|
# Monitor both logs with timestamps
|
|
{
|
|
while read line; do
|
|
echo -e "${BLUE}[HMAC]${NC} $line"
|
|
done < /tmp/hmac_logs &
|
|
|
|
while read line; do
|
|
if [[ "$line" =~ (PUT|POST) ]] && [[ "$line" =~ (40[0-9]|50[0-9]) ]]; then
|
|
echo -e "${RED}[NGINX-ERROR]${NC} $line"
|
|
elif [[ "$line" =~ (PUT|POST) ]]; then
|
|
echo -e "${GREEN}[NGINX-OK]${NC} $line"
|
|
else
|
|
echo -e "${YELLOW}[NGINX]${NC} $line"
|
|
fi
|
|
done < /tmp/nginx_logs &
|
|
|
|
wait
|
|
}
|
|
|
|
# Cleanup on exit
|
|
trap 'kill $HMAC_PID $NGINX_PID 2>/dev/null; rm -f /tmp/hmac_logs /tmp/nginx_logs' EXIT
|
|
}
|
|
|
|
# Function to test file upload
|
|
test_upload() {
|
|
local test_file="$1"
|
|
local test_size="${2:-1MB}"
|
|
|
|
if [ -z "$test_file" ]; then
|
|
test_file="/tmp/test_upload_${test_size}.bin"
|
|
log_info "Creating test file: $test_file ($test_size)"
|
|
|
|
case "$test_size" in
|
|
"1MB") dd if=/dev/urandom of="$test_file" bs=1M count=1 >/dev/null 2>&1 ;;
|
|
"10MB") dd if=/dev/urandom of="$test_file" bs=1M count=10 >/dev/null 2>&1 ;;
|
|
"100MB") dd if=/dev/urandom of="$test_file" bs=1M count=100 >/dev/null 2>&1 ;;
|
|
"1GB") dd if=/dev/urandom of="$test_file" bs=1M count=1024 >/dev/null 2>&1 ;;
|
|
esac
|
|
|
|
log_success "Test file created: $(ls -lh $test_file | awk '{print $5}')"
|
|
fi
|
|
|
|
# Get current timestamp for log filtering
|
|
log_info "=== TESTING UPLOAD: $test_file ==="
|
|
|
|
# Test with curl - simulate XMPP client behavior
|
|
local url="https://share.uuxo.net/test_path/test_file_$(date +%s).bin"
|
|
|
|
log_info "Testing upload to: $url"
|
|
|
|
curl -X PUT \
|
|
-H "Content-Type: application/octet-stream" \
|
|
-H "User-Agent: TestClient/1.0" \
|
|
--data-binary "@$test_file" \
|
|
"$url" \
|
|
-v \
|
|
-w "Response: %{http_code}, Size: %{size_upload}, Time: %{time_total}s\n" \
|
|
2>&1 | tee /tmp/curl_test.log
|
|
|
|
echo ""
|
|
log_info "Upload test completed. Check logs above for details."
|
|
}
|
|
|
|
# Function to analyze recent errors
|
|
analyze_errors() {
|
|
log_info "=== ERROR ANALYSIS ==="
|
|
|
|
echo "Recent 400 errors from Nginx:"
|
|
tail -100 /var/log/nginx/access.log | grep " 400 " | tail -5
|
|
|
|
echo ""
|
|
echo "Recent HMAC file server errors:"
|
|
tail -100 /opt/hmac-file-server/data/logs/hmac-file-server.log | grep -i error | tail -5
|
|
|
|
echo ""
|
|
echo "File extension configuration:"
|
|
grep -A 20 "allowedextensions" /opt/hmac-file-server/config.toml | head -10
|
|
|
|
echo ""
|
|
}
|
|
|
|
# Function to check file permissions and disk space
|
|
check_system() {
|
|
log_info "=== SYSTEM CHECK ==="
|
|
|
|
echo "Disk space:"
|
|
df -h /opt/hmac-file-server/data/uploads
|
|
|
|
echo ""
|
|
echo "Upload directory permissions:"
|
|
ls -la /opt/hmac-file-server/data/uploads/
|
|
|
|
echo ""
|
|
echo "Process information:"
|
|
ps aux | grep hmac-file-server | grep -v grep
|
|
|
|
echo ""
|
|
echo "Network connections:"
|
|
netstat -tlnp | grep :8080
|
|
|
|
echo ""
|
|
}
|
|
|
|
# Main menu
|
|
main_menu() {
|
|
echo -e "${BLUE}╔═══════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${BLUE}║${NC} HMAC File Server Live Debugging Tool ${BLUE}║${NC}"
|
|
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
echo "1) Check service status"
|
|
echo "2) Show configuration summary"
|
|
echo "3) Start live log monitoring"
|
|
echo "4) Test file upload (1MB)"
|
|
echo "5) Test file upload (10MB)"
|
|
echo "6) Test file upload (100MB)"
|
|
echo "7) Analyze recent errors"
|
|
echo "8) Check system resources"
|
|
echo "9) Full diagnostic run"
|
|
echo "0) Exit"
|
|
echo ""
|
|
read -p "Choose an option [0-9]: " choice
|
|
|
|
case $choice in
|
|
1) check_services ;;
|
|
2) show_config ;;
|
|
3) monitor_logs ;;
|
|
4) test_upload "" "1MB" ;;
|
|
5) test_upload "" "10MB" ;;
|
|
6) test_upload "" "100MB" ;;
|
|
7) analyze_errors ;;
|
|
8) check_system ;;
|
|
9)
|
|
check_services
|
|
show_config
|
|
check_system
|
|
analyze_errors
|
|
;;
|
|
0) exit 0 ;;
|
|
*) log_error "Invalid option. Please choose 0-9." ;;
|
|
esac
|
|
|
|
echo ""
|
|
read -p "Press Enter to continue..."
|
|
main_menu
|
|
}
|
|
|
|
# Handle command line arguments
|
|
case "${1:-}" in
|
|
"monitor") monitor_logs ;;
|
|
"test") test_upload "$2" "$3" ;;
|
|
"analyze") analyze_errors ;;
|
|
"status") check_services ;;
|
|
"config") show_config ;;
|
|
"system") check_system ;;
|
|
*) main_menu ;;
|
|
esac
|