Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,40 +1,62 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
-
import
|
| 3 |
import time
|
|
|
|
| 4 |
|
| 5 |
def test_antena_remota(ip, usuario, password):
|
| 6 |
try:
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
ssh.connect(ip, username=usuario, password=password, timeout=10)
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
ssh.close()
|
| 14 |
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
| 19 |
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
except Exception as e:
|
| 23 |
-
|
| 24 |
-
error_msg += f"**IP:** {ip}\n"
|
| 25 |
-
error_msg += f"**Error:** {str(e)}\n"
|
| 26 |
-
error_msg += f"**Hora:** {time.strftime('%H:%M:%S')}"
|
| 27 |
-
return error_msg
|
| 28 |
|
| 29 |
-
|
| 30 |
-
|
|
|
|
| 31 |
|
| 32 |
with gr.Row():
|
| 33 |
with gr.Column():
|
| 34 |
-
ip_input = gr.Textbox(label="IP del Equipo", placeholder="192.168.1.
|
| 35 |
-
usuario_input = gr.Textbox(label="Usuario", value="
|
| 36 |
-
password_input = gr.Textbox(label="
|
| 37 |
-
test_btn = gr.Button("Ejecutar Test", variant="primary")
|
| 38 |
|
| 39 |
with gr.Column():
|
| 40 |
resultado_output = gr.Markdown()
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
+
import requests
|
| 3 |
import time
|
| 4 |
+
import json
|
| 5 |
|
| 6 |
def test_antena_remota(ip, usuario, password):
|
| 7 |
try:
|
| 8 |
+
# 1. Primero intentamos login para obtener cookie/token
|
| 9 |
+
session = requests.Session()
|
|
|
|
| 10 |
|
| 11 |
+
# URL de login (común en equipos Ubiquiti)
|
| 12 |
+
login_url = f"http://{ip}/api/login"
|
|
|
|
| 13 |
|
| 14 |
+
# Datos de login
|
| 15 |
+
login_data = {
|
| 16 |
+
"username": usuario,
|
| 17 |
+
"password": password
|
| 18 |
+
}
|
| 19 |
|
| 20 |
+
# Headers comunes
|
| 21 |
+
headers = {
|
| 22 |
+
"Content-Type": "application/json",
|
| 23 |
+
"User-Agent": "Mozilla/5.0"
|
| 24 |
+
}
|
| 25 |
|
| 26 |
+
# Intentar login
|
| 27 |
+
response = session.post(login_url, json=login_data, headers=headers, timeout=10)
|
| 28 |
+
|
| 29 |
+
if response.status_code == 200:
|
| 30 |
+
# Login exitoso, ahora obtener métricas
|
| 31 |
+
status_url = f"http://{ip}/api/v1/status"
|
| 32 |
+
status_response = session.get(status_url, timeout=10)
|
| 33 |
+
|
| 34 |
+
if status_response.status_code == 200:
|
| 35 |
+
metricas = status_response.json()
|
| 36 |
+
resultado = f"# ✅ CONEXIÓN EXITOSA - {ip}\n\n"
|
| 37 |
+
resultado += f"**Estado:** Conectado via API Web\n"
|
| 38 |
+
resultado += f"**Hora:** {time.strftime('%H:%M:%S')}\n\n"
|
| 39 |
+
resultado += "## MÉTRICAS OBTENIDAS:\n"
|
| 40 |
+
resultado += f"```json\n{json.dumps(metricas, indent=2)[:1000]}\n```"
|
| 41 |
+
return resultado
|
| 42 |
+
else:
|
| 43 |
+
return f"# ⚠️ CONECTADO PERO NO MÉTRICAS\n\nError al obtener status: {status_response.status_code}"
|
| 44 |
+
else:
|
| 45 |
+
return f"# ❌ ERROR LOGIN\n\nNo se pudo autenticar: {response.status_code}"
|
| 46 |
+
|
| 47 |
except Exception as e:
|
| 48 |
+
return f"# ❌ ERROR DE CONEXIÓN\n\n**IP:** {ip}\n**Error:** {str(e)}\n**Hora:** {time.strftime('%H:%M:%S')}"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
|
| 50 |
+
# INTERFAZ GRADIO
|
| 51 |
+
with gr.Blocks(title="Test Ubiquiti Web API") as demo:
|
| 52 |
+
gr.Markdown("# 📡 Test Antena Ubiquiti (Web API)")
|
| 53 |
|
| 54 |
with gr.Row():
|
| 55 |
with gr.Column():
|
| 56 |
+
ip_input = gr.Textbox(label="IP del Equipo", placeholder="192.168.1.24", value="192.168.1.24")
|
| 57 |
+
usuario_input = gr.Textbox(label="Usuario", value="admin")
|
| 58 |
+
password_input = gr.Textbox(label="Contraseña", type="password")
|
| 59 |
+
test_btn = gr.Button("🚀 Ejecutar Test Web", variant="primary")
|
| 60 |
|
| 61 |
with gr.Column():
|
| 62 |
resultado_output = gr.Markdown()
|