# Container Restart and Auto-Logout Debugging Setup ## Overview Added comprehensive logging to track container restarts and automatic user logouts. ## Changes Made ### 1. Container Lifecycle Logging #### Backend Container (`backend/container_startup.sh`) - Logs container startup time, hostname, and PID - Detects and logs container restarts (by checking for previous PID file) - Logs environment configuration (Python version, Django settings, DB host) - Warns when restarts are detected and suggests checking Docker logs for SIGTERM signals - Integrated into Dockerfile as ENTRYPOINT #### Frontend Container (`frontend/container_startup.sh`) - Logs container startup time, hostname, and PID - Detects and logs container restarts - Logs Node/NPM versions and Vite configuration - Checks for git directory presence and warns about file watching - Shows last git commit when detected - Integrated into Dockerfile.dev as ENTRYPOINT ### 2. Vite File Watching Fix (`frontend/vite.config.ts`) **ROOT CAUSE IDENTIFIED:** `usePolling: true` was watching ALL files including `.git` directory, causing container restarts on git commits. **Fix Applied:** ```typescript watch: { usePolling: true, ignored: [ '**/node_modules/**', '**/.git/**', // CRITICAL: Ignore git directory '**/dist/**', '**/build/**', '**/.vscode/**', '**/.idea/**', ], interval: 1000, // Poll every 1 second instead of default } ``` ### 3. Auto-Logout Logging (`backend/igny8_core/auth/middleware.py`) Added detailed logging for all automatic logout scenarios: #### Session Contamination - Account ID Mismatch ```python logger.warning( f"[AUTO-LOGOUT] Session contamination: account_id mismatch. " f"Session={stored_account_id}, Current={request.account.id}, " f"User={request.user.id}, Path={request.path}, IP={request.META.get('REMOTE_ADDR')}" ) ``` #### Session Contamination - User ID Mismatch ```python logger.warning( f"[AUTO-LOGOUT] Session contamination: user_id mismatch. " f"Session={stored_user_id}, Current={request.user.id}, " f"Account={request.account.id if request.account else None}, " f"Path={request.path}, IP={request.META.get('REMOTE_ADDR')}" ) ``` #### Account/Plan Validation Failures ```python logger.warning( f"[AUTO-LOGOUT] Account/plan validation failed: {error}. " f"User={request.user.id}, Account={getattr(request, 'account', None)}, " f"Path={request.path}, IP={request.META.get('REMOTE_ADDR')}" ) ``` ### 4. Logging Configuration (`backend/igny8_core/settings.py`) Added two new loggers: - `auth.middleware` - Captures all authentication and auto-logout events - `container.lifecycle` - Captures container startup/restart events Both log to console (captured by Docker logs). ## How to Use ### Viewing Container Restart Logs ```bash # Check backend container logs for restart events docker logs igny8_backend 2>&1 | grep "CONTAINER-STARTUP\|RESTART" # Check frontend container logs for restart events docker logs igny8_frontend 2>&1 | grep "CONTAINER-STARTUP\|RESTART" # Monitor in real-time docker logs -f igny8_backend ``` ### Viewing Auto-Logout Logs ```bash # Check for automatic logout events docker logs igny8_backend 2>&1 | grep "AUTO-LOGOUT" # Filter by specific logout reason docker logs igny8_backend 2>&1 | grep "AUTO-LOGOUT.*contamination" docker logs igny8_backend 2>&1 | grep "AUTO-LOGOUT.*validation failed" # See recent logout events with context docker logs --since 1h igny8_backend 2>&1 | grep -A2 -B2 "AUTO-LOGOUT" ``` ### Correlating Events ```bash # See both container restarts and logouts together docker logs --since 2h igny8_backend 2>&1 | grep -E "CONTAINER-STARTUP|AUTO-LOGOUT|SIGTERM" # Check if git commits correlate with restarts git log --since="2 hours ago" --format="%ai %s" && \ docker logs --since 2h igny8_frontend 2>&1 | grep "CONTAINER-STARTUP" ``` ## Next Steps to Deploy 1. **Rebuild Docker images:** ```bash cd /data/app/igny8/backend docker build -t igny8-backend:latest -f Dockerfile . cd /data/app/igny8/frontend docker build -t igny8-frontend-dev:latest -f Dockerfile.dev . ``` 2. **Restart containers:** ```bash cd /data/app/igny8 docker compose -f docker-compose.app.yml down docker compose -f docker-compose.app.yml up -d ``` 3. **Verify logging is working:** ```bash docker logs igny8_backend 2>&1 | head -30 docker logs igny8_frontend 2>&1 | head -30 ``` 4. **Test git commit trigger (should NOT restart now):** ```bash cd /data/app/igny8 echo "test" >> README.md git add README.md git commit -m "test commit" # Wait 5 seconds and check - containers should NOT restart sleep 5 docker ps --filter "name=igny8" --format "{{.Names}}: {{.Status}}" ``` ## Expected Outcomes 1. **Git commits should NO LONGER trigger container restarts** because `.git` is now ignored by Vite's file watcher 2. **Every container restart will be logged** with timestamp and reason 3. **Every automatic logout will be logged** with user ID, account ID, reason, path, and IP address 4. **You can correlate restarts with git operations** to verify the fix is working ## Troubleshooting If containers still restart after git commits: 1. Check if the new images were built and deployed 2. Verify the vite.config.ts changes are present in the running container 3. Check Docker logs to see what triggered the restart 4. Look for HMR messages in frontend logs mentioning `.git` files