import gradio as gr import requests import time def test_antena(ip, usuario, password): try: session = requests.Session() login_url = f"http://{ip}/api/login" login_data = {"username": usuario, "password": password} response = session.post(login_url, json=login_data, timeout=10) if response.status_code == 200: status_url = f"http://{ip}/api/v1/status" status_response = session.get(status_url, timeout=10) if status_response.status_code == 200: resultado = "✅ CONEXIÓN EXITOSA\n\n" resultado += f"IP: {ip}\n" resultado += f"Usuario: {usuario}\n" resultado += f"Hora: {time.strftime('%H:%M:%S')}\n\n" resultado += "📊 Métricas obtenidas correctamente via API" return resultado else: return f"⚠️ LOGIN OK pero no métricas\n\nError status: {status_response.status_code}" else: return f"❌ ERROR DE LOGIN\n\nCódigo: {response.status_code}" except Exception as e: return f"🔴 ERROR DE CONEXIÓN\n\nDetalle: {str(e)}" # Interfaz con área de resultados GRANDE with gr.Blocks() as demo: gr.Markdown("# 📡 TEST UBIQUITI") with gr.Row(): with gr.Column(scale=1): ip_input = gr.Textbox(label="IP del equipo", value="192.168.1.24") user_input = gr.Textbox(label="Usuario", value="admin") pass_input = gr.Textbox(label="Contraseña", type="password") btn = gr.Button("🚀 EJECUTAR TEST", variant="primary") with gr.Column(scale=2): # Área de resultados MÁS GRANDE output = gr.Textbox( label="RESULTADOS", lines=10, # 10 líneas de alto max_lines=20, show_copy_button=True ) btn.click( fn=test_antena, inputs=[ip_input, user_input, pass_input], outputs=output ) demo.launch()