46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import subprocess
|
|
import os
|
|
import psutil
|
|
|
|
def run_bash_command(command: str) -> str:
|
|
"""Executa um comando bash na VPS e retorna a saída."""
|
|
try:
|
|
# Executa comando arriscado com root de forma segura dentro da VPS
|
|
result = subprocess.run(
|
|
command,
|
|
shell=True,
|
|
capture_output=True,
|
|
text=True,
|
|
timeout=60 # Limite de tempo de execução
|
|
)
|
|
output = result.stdout.strip()
|
|
error = result.stderr.strip()
|
|
|
|
if result.returncode != 0:
|
|
return f"ERRO ({result.returncode}):\n{error}"
|
|
|
|
return output if output else "Comando executado com sucesso (sem saída)."
|
|
except subprocess.TimeoutExpired:
|
|
return "ERRO: O comando demorou muito e foi cancelado (timeout)."
|
|
except Exception as e:
|
|
return f"ERRO fatal ao rodar bash: {str(e)}"
|
|
|
|
def get_system_health() -> str:
|
|
"""Retorna um texto base rápido da saúde atual do servidor para a IA analisar."""
|
|
cpu = psutil.cpu_percent(interval=0.1)
|
|
ram = psutil.virtual_memory().percent
|
|
disk = psutil.disk_usage('/').percent
|
|
return f"CPU: {cpu}% | RAM Usada: {ram}% | Disco Usado: {disk}%"
|
|
|
|
# Mapeamento estático para o LLM entender quais tools ele possui
|
|
AVAILABLE_TOOLS = {
|
|
"run_bash_command": {
|
|
"description": "Executa qualquer comando Linux no terminal da VPS. Use para criar arquivos, rodar git, verificar logs do docker, etc.",
|
|
"func": run_bash_command
|
|
},
|
|
"get_system_health": {
|
|
"description": "Verifica como está o uso de RAM, CPU e Disco agora.",
|
|
"func": get_system_health
|
|
}
|
|
}
|