doctorlinux commited on
Commit
14fb0b3
·
verified ·
1 Parent(s): f857d39

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -23
app.py CHANGED
@@ -1,40 +1,62 @@
1
  import gradio as gr
2
- import paramiko
3
  import time
 
4
 
5
  def test_antena_remota(ip, usuario, password):
6
  try:
7
- ssh = paramiko.SSHClient()
8
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
9
- ssh.connect(ip, username=usuario, password=password, timeout=10)
10
 
11
- stdin, stdout, stderr = ssh.exec_command("mca-status")
12
- mca_output = stdout.read().decode()
13
- ssh.close()
14
 
15
- resultado = f"# TEST EXITOSO - {ip}\n\n"
16
- resultado += "## METRICAS OBTENIDAS:\n"
17
- resultado += f"```\n{mca_output[:800]}\n```\n\n"
18
- resultado += f"**Hora:** {time.strftime('%H:%M:%S')}"
 
19
 
20
- return resultado
 
 
 
 
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  except Exception as e:
23
- error_msg = f"# ERROR DE CONEXION\n\n"
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
- with gr.Blocks(title="Test Ubiquiti") as demo:
30
- gr.Markdown("# Test Antena Ubiquiti")
 
31
 
32
  with gr.Row():
33
  with gr.Column():
34
- ip_input = gr.Textbox(label="IP del Equipo", placeholder="192.168.1.20")
35
- usuario_input = gr.Textbox(label="Usuario", value="ubnt")
36
- password_input = gr.Textbox(label="Contrasena", type="password")
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()