🚀 Auto-deploy: BotVPS atualizado em 30/04/2026 12:26:39
This commit is contained in:
34
watchdog.py
34
watchdog.py
@@ -21,6 +21,7 @@ class Watchdog:
|
||||
self.cpu_streak = 0
|
||||
self.last_alert_time = 0
|
||||
self.alert_cooldown = 300 # 5 minutos entre alertas do mesmo tipo
|
||||
self.previous_status = {} # Guarda o último estado conhecido de cada processo
|
||||
|
||||
async def send_telegram_message(self, message: str):
|
||||
if not TOKEN or not CHAT_ID:
|
||||
@@ -40,22 +41,35 @@ class Watchdog:
|
||||
except Exception as e:
|
||||
print(f"[WATCHDOG] Erro ao enviar Telegram: {e}")
|
||||
|
||||
def get_pm2_status(self):
|
||||
def monitor_pm2(self):
|
||||
try:
|
||||
result = subprocess.run(["pm2", "jlist"], capture_output=True, text=True)
|
||||
if result.returncode == 0:
|
||||
data = json.loads(result.stdout)
|
||||
issues = []
|
||||
alerts = []
|
||||
for proc in data:
|
||||
if proc['pm2_env']['status'] != 'online':
|
||||
issues.append(f"🔴 App '{proc['name']}' está {proc['pm2_env']['status']}!")
|
||||
return issues
|
||||
name = proc['name']
|
||||
current_status = proc['pm2_env']['status']
|
||||
prev_status = self.previous_status.get(name)
|
||||
|
||||
# Detecta Queda (Transição de online para qualquer outra coisa)
|
||||
if current_status != 'online' and prev_status == 'online':
|
||||
alerts.append(f"🔴 App '{name}' ACABOU DE CAIR! (Status: {current_status})")
|
||||
|
||||
# Detecta Recuperação (Transição de offline para online)
|
||||
elif current_status == 'online' and prev_status is not None and prev_status != 'online':
|
||||
alerts.append(f"🟢 App '{name}' ESTÁ ONLINE NOVAMENTE! 🚀")
|
||||
|
||||
# Atualiza memória de estado
|
||||
self.previous_status[name] = current_status
|
||||
|
||||
return alerts
|
||||
except Exception as e:
|
||||
print(f"[WATCHDOG] Erro PM2: {e}")
|
||||
return []
|
||||
|
||||
async def run(self):
|
||||
print("[WATCHDOG] Iniciado. Vigilância ativa...")
|
||||
print("[WATCHDOG] Iniciado. Vigilância ativa (Ciclagem Online/Offline)...")
|
||||
|
||||
while True:
|
||||
try:
|
||||
@@ -73,10 +87,10 @@ class Watchdog:
|
||||
)
|
||||
self.last_alert_time = time.time()
|
||||
|
||||
# 2. Monitoramento de PM2
|
||||
pm2_issues = self.get_pm2_status()
|
||||
if pm2_issues:
|
||||
await self.send_telegram_message("\n".join(pm2_issues))
|
||||
# 2. Monitoramento de PM2 (Alertas de mudança de estado)
|
||||
pm2_alerts = self.monitor_pm2()
|
||||
if pm2_alerts:
|
||||
await self.send_telegram_message("\n".join(pm2_alerts))
|
||||
|
||||
# 3. Monitoramento de Espaço em Disco
|
||||
disk = psutil.disk_usage('/')
|
||||
|
||||
Reference in New Issue
Block a user