#!/bin/bash

# Script de monitoramento do WebSocket
# Este script monitora e reinicia o socket se necessário

LOG_FILE="/var/log/socket_monitor.log"
SOCKET_SCRIPT="/var/www/html/websocket/src/socket.php"
PID_FILE="/var/www/html/websocket/src/socket.pid"

# Função para log
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Função para verificar se o processo está rodando
is_running() {
    # Verificar se há processo PHP rodando na porta 8081
    if pgrep -f "WorkerMan.*websocket.*8081" > /dev/null 2>&1; then
        return 0
    fi
    
    # Verificar se há processo PHP rodando o socket.php
    if pgrep -f "php.*socket.php" > /dev/null 2>&1; then
        return 0
    fi
    
    # Verificar se a porta 8081 está em uso
    if netstat -tlnp 2>/dev/null | grep -q ":8081 "; then
        return 0
    fi
    
    return 1
}

# Função para parar o socket
stop_socket() {
    log "Parando socket..."
    if [ -f "$SOCKET_SCRIPT" ]; then
        php "$SOCKET_SCRIPT" stop 2>&1
        sleep 3
        
        # Se ainda estiver rodando, forçar parada
        if is_running; then
            log "Forçando parada do processo..."
            pkill -f "WorkerMan.*websocket.*8081" 2>/dev/null
            pkill -f "php.*socket.php" 2>/dev/null
            sleep 2
        fi
    fi
}

# Função para iniciar o socket
start_socket() {
    log "Iniciando socket..."
    if [ -f "$SOCKET_SCRIPT" ]; then
        cd "$(dirname "$SOCKET_SCRIPT")"
        nohup php "$SOCKET_SCRIPT" start > /dev/null 2>&1 &
        sleep 3
        
        if is_running; then
            log "Socket iniciado com sucesso"
            return 0
        else
            log "Erro ao iniciar socket"
            return 1
        fi
    else
        log "Erro: Script do socket não encontrado em $SOCKET_SCRIPT"
        return 1
    fi
}

# Função para reiniciar o socket
restart_socket() {
    log "Reiniciando socket..."
    stop_socket
    sleep 2
    start_socket
}

# Verificar se o socket está rodando
if ! is_running; then
    log "Socket não está rodando. Iniciando..."
    start_socket
else
    log "Socket está rodando normalmente"
fi

# Verificar se a porta 8081 está respondendo
if command -v netstat > /dev/null 2>&1; then
    if netstat -tlnp 2>/dev/null | grep -q ":8081 "; then
        log "Porta 8081 está ativa"
    else
        log "Porta 8081 não está respondendo. Reiniciando socket..."
        restart_socket
    fi
fi

log "Monitoramento concluído" 
