Sloth Runner Web UI¶
Uma interface web completa para gerenciar e monitorar o Sloth Runner.
Funcionalidades¶
🎯 Dashboard¶
- Visão geral em tempo real do sistema
- Estatísticas de agentes, workflows, hooks e eventos
- Feed de atividades em tempo real
- Monitoramento de agentes ativos
- Tabela de eventos recentes
🖥️ Gerenciamento de Agentes¶
- Listar todos os agentes distribuídos
- Visualizar detalhes completos de cada agente
- Monitorar status e heartbeat em tempo real
- Remover agentes inativos
- Visualizar informações do sistema de cada agente
📋 Workflows (Sloths)¶
- Listar todos os workflows registrados
- Criar novos workflows via interface
- Editar workflows existentes
- Ativar/desativar workflows
- Visualizar estatísticas de uso
- Executar workflows (integração futura)
⚡ Hooks¶
- Gerenciar hooks de eventos
- Habilitar/desabilitar hooks
- Visualizar histórico de execuções
- Monitorar taxa de sucesso/falha
- Ver logs de execução detalhados
📬 Eventos¶
- Monitorar fila de eventos em tempo real
- Visualizar eventos pendentes e processados
- Retentar eventos que falharam
- Filtrar eventos por tipo e status
- Visualizar histórico completo
🔐 Secrets¶
- Visualizar quais secrets existem (nomes apenas)
- Integração segura com CLI
- Documentação de comandos CLI
🔌 SSH Profiles¶
- Gerenciar perfis de conexão SSH
- Visualizar logs de auditoria
- Monitorar uso de perfis
- Estatísticas de conexão
Como Usar¶
Iniciar a UI¶
# Porta padrão (8080)
sloth-runner ui
# Porta personalizada
sloth-runner ui --port 3000
# Com autenticação
sloth-runner ui --auth --username admin --password mysecret
# Modo debug
sloth-runner ui --debug
Acessar¶
Abra o navegador em: http://localhost:8080
Arquitetura¶
Backend¶
- Framework: Gin (Go)
- WebSocket: gorilla/websocket para atualizações em tempo real
- Banco de dados: SQLite (integra com os bancos existentes)
- API: RESTful JSON API
Frontend¶
- HTML5/CSS3/JavaScript puro (sem frameworks pesados)
- Bootstrap 5 para UI responsiva
- WebSocket client para atualizações em tempo real
- Chart.js para gráficos (futuro)
Dados Persistentes¶
Todos os dados vêm diretamente dos bancos SQLite existentes: - .sloth-cache/agents.db
- Agentes - /etc/sloth-runner/sloths.db
- Workflows - .sloth-cache/hooks.db
- Hooks e eventos - ~/.sloth-runner/secrets.db
- Secrets (somente nomes) - ~/.sloth-runner/ssh_profiles.db
- Perfis SSH
Endpoints da API¶
Dashboard¶
GET /api/v1/dashboard
- Estatísticas gerais
Agents¶
GET /api/v1/agents
- Listar agentesGET /api/v1/agents/:name
- Detalhes do agenteDELETE /api/v1/agents/:name
- Remover agente
Workflows¶
GET /api/v1/sloths
- Listar workflowsGET /api/v1/sloths/:name
- Detalhes do workflowPOST /api/v1/sloths
- Criar workflowPUT /api/v1/sloths/:name
- Atualizar workflowDELETE /api/v1/sloths/:name
- Deletar workflowPOST /api/v1/sloths/:name/activate
- AtivarPOST /api/v1/sloths/:name/deactivate
- Desativar
Hooks¶
GET /api/v1/hooks
- Listar hooksGET /api/v1/hooks/:id
- Detalhes do hookPOST /api/v1/hooks
- Criar hookPUT /api/v1/hooks/:id
- Atualizar hookDELETE /api/v1/hooks/:id
- Deletar hookPOST /api/v1/hooks/:id/enable
- HabilitarPOST /api/v1/hooks/:id/disable
- DesabilitarGET /api/v1/hooks/:id/history
- Histórico de execuções
Events¶
GET /api/v1/events
- Listar eventosGET /api/v1/events/pending
- Eventos pendentesGET /api/v1/events/:id
- Detalhes do eventoPOST /api/v1/events/:id/retry
- Retentar evento
Secrets¶
GET /api/v1/secrets/:stack
- Listar secrets (nomes apenas)
SSH¶
GET /api/v1/ssh
- Listar perfis SSHGET /api/v1/ssh/:name
- Detalhes do perfilPOST /api/v1/ssh
- Criar perfilPUT /api/v1/ssh/:name
- Atualizar perfilDELETE /api/v1/ssh/:name
- Deletar perfilGET /api/v1/ssh/:name/audit
- Logs de auditoria
WebSocket¶
WS /api/v1/ws
- Conexão WebSocket para atualizações em tempo real
Mensagens WebSocket¶
A UI recebe atualizações em tempo real através de WebSocket:
{
"type": "agent_update",
"timestamp": 1234567890,
"data": {
"name": "agent-1",
"status": "active"
}
}
Tipos de mensagens: - agent_update
- Atualização de status de agente - event_update
- Novo evento ou mudança de status - hook_execution
- Execução de hook - workflow_update
- Mudança em workflow - system_alert
- Alerta do sistema
Segurança¶
Autenticação¶
Suporta HTTP Basic Authentication:
CORS¶
CORS habilitado por padrão para desenvolvimento.
Secrets¶
Secrets são somente leitura na UI por segurança. Para gerenciar secrets, use a CLI:
Desenvolvimento¶
Estrutura de Arquivos¶
internal/webui/
├── server.go # Servidor principal
├── handlers/ # Handlers da API
│ ├── agent.go
│ ├── dashboard.go
│ ├── event.go
│ ├── hook.go
│ ├── secret.go
│ ├── sloth.go
│ ├── ssh.go
│ ├── websocket.go
│ └── wrappers.go # Wrappers de BD
├── middleware/ # Middlewares
│ ├── auth.go
│ └── cors.go
├── static/ # Arquivos estáticos
│ ├── css/
│ │ └── main.css
│ └── js/
│ ├── websocket.js
│ ├── dashboard.js
│ └── agents.js
└── templates/ # Templates HTML
├── index.html
├── agents.html
├── workflows.html
├── hooks.html
├── events.html
├── secrets.html
└── ssh.html
Adicionar Nova Funcionalidade¶
- Backend: Criar handler em
internal/webui/handlers/
- Rota: Adicionar rota em
server.go
- Frontend: Criar template em
templates/
e JS emstatic/js/
- WebSocket: Adicionar tipo de mensagem se necessário
Roadmap¶
- Gráficos e métricas visuais
- Execução de workflows pela UI
- Editor de código com syntax highlighting
- Logs em tempo real
- Notificações push
- Dashboard customizável
- Exportação de dados
- Tema dark mode
- Multi-idioma
- Suporte a múltiplos usuários
Screenshots¶
Dashboard¶
Agents¶
Workflows¶
Troubleshooting¶
Porta já em uso¶
WebSocket não conecta¶
Verifique se não há proxy ou firewall bloqueando a conexão WebSocket.
Dados não aparecem¶
Verifique se os bancos de dados SQLite existem nos caminhos corretos:
Contribuindo¶
Para contribuir com a UI:
- Fork o repositório
- Crie uma branch para sua feature
- Implemente a feature (backend + frontend)
- Teste localmente
- Submeta um Pull Request
Licença¶
Mesma licença do projeto principal Sloth Runner.