diff --git a/apps/wazuh-runtipi/data/scripts/init-dashboard.sh b/apps/wazuh-runtipi/data/scripts/init-dashboard.sh index 4b21015..1d11c60 100644 --- a/apps/wazuh-runtipi/data/scripts/init-dashboard.sh +++ b/apps/wazuh-runtipi/data/scripts/init-dashboard.sh @@ -44,91 +44,7 @@ else echo "DASHBOARD_INIT: Symlink already exists" fi -# Handle keystore initialization idempotently to avoid interactive prompts -KEYSTORE_PATH="/usr/share/wazuh-dashboard/config/opensearch_dashboards.keystore" -if [ ! -f "$KEYSTORE_PATH" ]; then - echo "DASHBOARD_INIT: Creating dashboard keystore..." - # The --allow-root flag is often needed if running as root - /usr/share/wazuh-dashboard/bin/opensearch-dashboards-keystore create 2>/dev/null || true -fi - -# Start dashboard in background echo "DASHBOARD_INIT: Configuration complete, starting dashboard..." -/entrypoint.sh & -DASHBOARD_PID=$! -# Give the process a moment to start and resolve its sub-processes -sleep 5 - -# Robust PID tracking: looking for the actual Node.js process if entrypoint isn't using exec -if ! kill -0 $DASHBOARD_PID 2>/dev/null; then - echo "DASHBOARD_INIT: Main PID $DASHBOARD_PID died, checking for sub-processes..." - # Look for opensearch-dashboards node process - ACTUAL_PID=$(pgrep -f "opensearch-dashboards" || echo "") - if [ -n "$ACTUAL_PID" ]; then - DASHBOARD_PID=$ACTUAL_PID - echo "DASHBOARD_INIT: Found actual dashboard process at PID $DASHBOARD_PID" - else - echo "DASHBOARD_INIT: ERROR - No dashboard process found!" - exit 1 - fi -fi - -# Periodic monitoring with migration lock detection -echo "MIGRATION_WATCHDOG: Monitoring dashboard startup (PID: $DASHBOARD_PID)..." -TIMEOUT=600 # Increase timeout to 10 minutes due to Indexer slowness -ELAPSED=0 -MIGRATION_LOCK_DETECTED_AT=0 - -while [ $ELAPSED -lt $TIMEOUT ]; do - # Check if dashboard process is still alive - if ! kill -0 $DASHBOARD_PID 2>/dev/null; then - echo "MIGRATION_WATCHDOG: ERROR - Dashboard process (PID: $DASHBOARD_PID) died after ${ELAPSED}s!" - exit 1 - fi - - # Check if dashboard API is responding - API_STATUS=$(curl -sk -o /dev/null -w "%{http_code}" https://localhost:5601/api/status 2>/dev/null) - if [[ "$API_STATUS" == "200" || "$API_STATUS" == "302" || "$API_STATUS" == "401" ]]; then - echo "MIGRATION_WATCHDOG: Dashboard is responding (HTTP $API_STATUS) after ${ELAPSED}s" - # We don't break yet, we continue monitoring until it's "Stable" (HTTP 200) - if [ "$API_STATUS" == "200" ]; then - echo "MIGRATION_WATCHDOG: Dashboard is fully UP and Stable." - break - fi - fi - - # Check for migration lock (stuck .kibana_1) - HTTP_CODE=$(curl -sk -u "${INDEXER_USERNAME:-admin}:${INDEXER_PASSWORD:-admin}" -o /dev/null -w "%{http_code}" "https://wazuh.indexer:9200/.kibana_1" 2>/dev/null) - - if [ "$HTTP_CODE" = "200" ] && [ $MIGRATION_LOCK_DETECTED_AT -eq 0 ]; then - MIGRATION_LOCK_DETECTED_AT=$ELAPSED - echo "MIGRATION_WATCHDOG: Detected .kibana_1 index at ${ELAPSED}s, waiting for natural migration..." - fi - - if [ "$HTTP_CODE" = "200" ] && [ $MIGRATION_LOCK_DETECTED_AT -gt 0 ]; then - STUCK_DURATION=$((ELAPSED - MIGRATION_LOCK_DETECTED_AT)) - if [ $STUCK_DURATION -ge 240 ]; then # Increase to 4 minutes - echo "MIGRATION_WATCHDOG: Index stuck for ${STUCK_DURATION}s, cleaning up..." - curl -sk -u "${INDEXER_USERNAME:-admin}:${INDEXER_PASSWORD:-admin}" -X DELETE "https://wazuh.indexer:9200/.kibana_1" 2>/dev/null || true - kill $DASHBOARD_PID 2>/dev/null || true - exit 0 - fi - fi - - sleep 15 - ELAPSED=$((ELAPSED + 15)) - - if [ $((ELAPSED % 60)) -eq 0 ]; then - echo "MIGRATION_WATCHDOG: Still waiting for dashboard (${ELAPSED}s, Status: $API_STATUS)..." - fi -done - -echo "MIGRATION_WATCHDOG: Finalizing monitoring. Entering persistent loop." -# Keep watching the dashboard process -while kill -0 $DASHBOARD_PID 2>/dev/null; do - sleep 60 -done - -echo "DASHBOARD_INIT: Process died. Exiting." -exit 1 +# Just exec the official entrypoint - let it handle everything! +exec /entrypoint.sh