Backend: - Servidor model: AgentToken, AgentLastSeen, MetricasJson nuevos campos - AgentHeartbeat: endpoint público POST /agent/heartbeat (auth por token) - GenerateAgentToken: endpoint protegido POST /app/servidor/:id/agent-token - Ruta pública /agent/install.sh sirve el script de instalación Agente Go (agent/): - agent/main.go: binario independiente con gopsutil - Recolecta RAM, CPU, Disco, Uptime, OS, Load average - Lee agent.yml o flags --api-url / --token - Envía POST a /agent/heartbeat cada N segundos - Instala como servicio systemd via install.sh - agent/go.mod: módulo independiente (usite-agent) - agent/agent.yml.sample: configuración de ejemplo - agent/install.sh: instalador en 1 curl para Linux (systemd) Frontend servidor_dashboard.html: - Cards: badge ● En línea / ● Fuera / ○ Sin agente - Barras de progreso live: RAM%, CPU%, Disco% - Valores: GB usado/total, núcleos, uptime, OS real - Tiempo desde último reporte - Botón 'Agente' en cada card → modal de configuración - Modal agente: estado, token con copy, comando curl 1 línea, instalación manual/avanzada con collapse, métricas actuales Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
49 lines
2.8 KiB
Go
Executable File
49 lines
2.8 KiB
Go
Executable File
package routes
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/sujit-baniya/fiber-boilerplate/rest/controllers"
|
|
apiControllers "github.com/sujit-baniya/fiber-boilerplate/rest/controllers/api"
|
|
"github.com/sujit-baniya/fiber-boilerplate/rest/middlewares"
|
|
)
|
|
|
|
func RutasPublicas(web fiber.Router) {
|
|
web.Get("/", controllers.Landing)
|
|
web.Get("/index", controllers.Index)
|
|
//web.Get("/login", controllers.Login)
|
|
web.Get("/ping", Pong)
|
|
web.Get("/all-routes", AllRoutes)
|
|
web.Get("/do/verify-email", middlewares.ValidateConfirmToken, controllers.VerifyRegisteredEmail)
|
|
|
|
// ─── Webhooks públicos (sin autenticación) ────────────────────────────
|
|
// Bold requiere respuesta HTTP 200 rápida, sin middleware de sesión.
|
|
web.Post("/webhooks/bold", apiControllers.BoldWebhook)
|
|
// dLocal requiere respuesta HTTP 200 inmediata.
|
|
web.Post("/webhooks/dlocal", apiControllers.DlocalWebhook)
|
|
// Webhook entrante por integración SaaS (token único por config)
|
|
web.Post("/webhooks/saas-in/:token", controllers.SaasWebhookInHandler)
|
|
web.Get("/webhooks/saas-in/:token", controllers.SaasWebhookInHandler) // algunos SaaS verifican con GET
|
|
|
|
// ─── Página de confirmación de pago ───────────────────────────────────
|
|
web.Get("/pago-exitoso", apiControllers.PagoExitosoPage)
|
|
// Ruta fuera del prefijo /api para evitar que AuthApi() la intercepte
|
|
web.Get("/pago/estado", apiControllers.PagoEstadoAPI)
|
|
// ─── Documentación pública ────────────────────────────────────────────────
|
|
web.Get("/docs/:saas", controllers.DocsPublicoIndex)
|
|
web.Get("/docs/:saas/:slug", controllers.DocsPublicaPagina)
|
|
// ─── Webhook de Telegram para vinculación del portal ──────────────────────
|
|
// Configurar en el bot: POST https://api.telegram.org/bot{TOKEN}/setWebhook?url={HOST}/webhooks/telegram-portal
|
|
web.Post("/webhooks/telegram-portal", controllers.TelegramPortalWebhook)
|
|
|
|
// ─── Agente de monitoreo de servidores ────────────────────────────────────
|
|
// El agente instalado en cada servidor reporta métricas aquí (sin sesión, auth por token).
|
|
web.Post("/agent/heartbeat", controllers.AgentHeartbeat)
|
|
// Servir el script de instalación del agente
|
|
web.Get("/agent/install.sh", func(c *fiber.Ctx) error {
|
|
c.Set("Content-Type", "text/plain; charset=utf-8")
|
|
return c.SendFile("./agent/install.sh")
|
|
})
|
|
// ─── Página de estado del sistema (Atlassian Statuspage) ────────────────
|
|
web.Get("/status", controllers.StatusPage)
|
|
}
|