🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
285 lines
8.3 KiB
Markdown
285 lines
8.3 KiB
Markdown
# service-monitor - Monitor de Servicios en Zig
|
|
|
|
> **Tipo:** Herramienta Zig (deploy en servidor)
|
|
> **Credenciales:** `teamdocs/INFRASTRUCTURE/CREDENCIALES.md`
|
|
> **Cheatsheet:** `teamdocs/CHEATSHEET.md`
|
|
> **Estado:** PROYECTO COMPLETADO v1.2
|
|
> **Repositorio:** git@git.reugenio.com:reugenio/service-monitor.git
|
|
|
|
## Nota de Seguridad
|
|
|
|
⚠️ **Credenciales visibles en procesos**: Las notificaciones por Telegram y SMTP
|
|
usan `curl` como subproceso. Esto significa que las credenciales (token de bot,
|
|
usuario/contraseña SMTP) son visibles temporalmente en la lista de procesos
|
|
(`ps aux`) mientras curl se ejecuta.
|
|
|
|
**Implicaciones:**
|
|
- En servidores compartidos, otros usuarios podrían ver las credenciales
|
|
- En servidores propios (caso típico), el riesgo es mínimo
|
|
|
|
**Mejora futura:** Reemplazar curl por `std.http.Client` nativo de Zig para
|
|
eliminar esta exposición. Ver: `docs/auditorias/AUDITORIA_SERVICE_MONITOR.md`
|
|
|
|
---
|
|
|
|
## Descripcion del Proyecto
|
|
|
|
Monitor que verifica periodicamente que los servicios en nuestro servidor Hetzner (Simba) esten funcionando correctamente, con notificaciones si algo falla.
|
|
|
|
**Funcionalidades implementadas**:
|
|
- Verificacion HTTP/HTTPS con tiempos de respuesta
|
|
- Verificacion TCP con resolucion DNS
|
|
- Modo watch (loop continuo con intervalo configurable)
|
|
- Modo daemon (background con fork() + setsid())
|
|
- Log a archivo
|
|
- Configuracion externa (CSV)
|
|
- Notificaciones desktop (notify-send)
|
|
- Notificaciones email (SMTP con STARTTLS via curl)
|
|
- Notificaciones Telegram (Bot API via curl)
|
|
|
|
---
|
|
|
|
## Estructura del Proyecto
|
|
|
|
```
|
|
service-monitor/
|
|
├── CLAUDE.md # Este archivo - especificacion y continuidad
|
|
├── build.zig # Sistema de build Zig
|
|
├── services.conf # Configuracion activa
|
|
├── services.conf.example # Ejemplo documentado
|
|
├── service-monitor # Binario compilado
|
|
├── service-monitor.log # Log de ejecucion
|
|
├── service-monitor.pid # PID en modo daemon
|
|
│
|
|
├── src/
|
|
│ ├── main.zig # Entry point + CLI + logica principal (317 lineas)
|
|
│ ├── http.zig # Cliente HTTP/HTTPS (77 lineas)
|
|
│ ├── tcp.zig # Verificacion TCP (68 lineas)
|
|
│ ├── config.zig # Parser de configuracion (233 lineas)
|
|
│ ├── notify.zig # Notificaciones desktop (77 lineas)
|
|
│ ├── daemon.zig # Daemonizacion (101 lineas)
|
|
│ ├── smtp.zig # Cliente SMTP (260 lineas)
|
|
│ └── telegram.zig # Cliente Telegram (107 lineas)
|
|
│
|
|
└── docs/
|
|
├── PROYECTO_COMPLETO.md # Documentacion tecnica completa
|
|
└── DIARIO_DESARROLLO.md # Historial de desarrollo
|
|
```
|
|
|
|
---
|
|
|
|
## Comandos Utiles
|
|
|
|
```bash
|
|
# Zig path
|
|
ZIG=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2/zig
|
|
|
|
# Compilar
|
|
$ZIG build
|
|
|
|
# Verificar una vez
|
|
./service-monitor
|
|
|
|
# Modo watch (cada 60 segundos)
|
|
./service-monitor --watch
|
|
|
|
# Modo watch cada 30 segundos
|
|
./service-monitor -w -i 30
|
|
|
|
# Con log a archivo
|
|
./service-monitor -w -l
|
|
|
|
# Con notificaciones desktop
|
|
./service-monitor -w -n
|
|
|
|
# Daemon en background
|
|
./service-monitor -w -d
|
|
|
|
# Todo junto
|
|
./service-monitor -w -i 60 -d -l -n
|
|
|
|
# Config personalizado
|
|
./service-monitor -c /ruta/config.conf
|
|
|
|
# Ayuda
|
|
./service-monitor --help
|
|
```
|
|
|
|
---
|
|
|
|
## Servicios Monitoreados (Servidor Simba)
|
|
|
|
| Servicio | Tipo | Endpoint | Puerto |
|
|
|----------|------|----------|--------|
|
|
| Forgejo HTTP | HTTPS | git.reugenio.com | 443 |
|
|
| Forgejo SSH | TCP | git.reugenio.com | 2222 |
|
|
| Simifactu | HTTPS | simifactu.com | 443 |
|
|
| Mundisofa | HTTPS | mundisofa.com | 443 |
|
|
| Menzuri | HTTPS | menzuri.com | 443 |
|
|
|
|
---
|
|
|
|
## Archivo de Configuracion
|
|
|
|
Formato CSV simple en `services.conf`:
|
|
|
|
```
|
|
# Servicios HTTP
|
|
http,Forgejo (HTTP),https://git.reugenio.com
|
|
http,Simifactu API,https://simifactu.com
|
|
http,Mundisofa,https://mundisofa.com
|
|
http,Menzuri,https://menzuri.com
|
|
|
|
# Servicios TCP
|
|
tcp,Forgejo (SSH),git.reugenio.com,2222
|
|
|
|
# Telegram
|
|
telegram,BOT_TOKEN,CHAT_ID
|
|
|
|
# Email
|
|
email,destinatario@email.com
|
|
email_smtp,smtp.servidor.com,587,usuario,password,from@email.com
|
|
```
|
|
|
|
**Credenciales completas**: `teamdocs/INFRASTRUCTURE/NOTIFICACIONES.md`
|
|
|
|
---
|
|
|
|
## Equipo y Metodologia
|
|
|
|
### Normas de Trabajo Centralizadas
|
|
|
|
**IMPORTANTE**: Todas las normas de trabajo estan en:
|
|
```
|
|
/mnt/cello2/arno/re/recode/teamdocs/
|
|
```
|
|
|
|
**Archivos clave a leer**:
|
|
- `LAST_UPDATE.md` - **LEER PRIMERO** - Cambios recientes en normas
|
|
- `NORMAS_TRABAJO_CONSENSUADAS.md` - Metodologia fundamental
|
|
- `QUICK_REFERENCE.md` - Cheat sheet rapido
|
|
- `INFRASTRUCTURE/` - Documentacion de servidores (IPs, puertos, servicios)
|
|
|
|
### Control de Versiones
|
|
|
|
```bash
|
|
# Remote
|
|
git remote: git@git.reugenio.com:reugenio/service-monitor.git
|
|
|
|
# Branches
|
|
main # Codigo estable
|
|
```
|
|
|
|
---
|
|
|
|
## Ecosistema Zig - Proyectos Relacionados
|
|
|
|
Este proyecto forma parte del ecosistema Zig desarrollado en 2025:
|
|
|
|
| Proyecto | Descripcion | Estado | Repo |
|
|
|----------|-------------|--------|------|
|
|
| **service-monitor** | Monitor de servicios (este) | COMPLETO v1.2 | git.reugenio.com/reugenio/service-monitor |
|
|
| **zcatui** | TUI library (ratatui-style) | COMPLETO v1.0 | git.reugenio.com/reugenio/zcatui |
|
|
| **zsqlite** | SQLite wrapper | COMPLETO v0.1 | git.reugenio.com/reugenio/zsqlite |
|
|
| **zpdf** | PDF generator | COMPLETO v0.1 | git.reugenio.com/reugenio/zpdf |
|
|
|
|
### Descripcion de cada proyecto:
|
|
|
|
- **zcatui**: Libreria TUI para Zig inspirada en ratatui (Rust). 13 widgets implementados, 103+ tests.
|
|
- **zsqlite**: Wrapper SQLite que compila sqlite3.c directamente en el binario. API idiomatica Zig.
|
|
- **zpdf**: Generador PDF puro Zig. Texto, graficos, 14 fuentes Type1, PDF 1.4.
|
|
|
|
---
|
|
|
|
## Notas Tecnicas
|
|
|
|
### Migracion a Zig 0.15.2
|
|
|
|
La migracion a Zig 0.15.2 requirio cambios importantes:
|
|
|
|
| Cambio | Antes (0.13) | Despues (0.15) |
|
|
|--------|--------------|----------------|
|
|
| Build.zig | `root_source_file` | `root_module` con `b.createModule()` |
|
|
| stdout | `std.io.getStdOut().writer()` | `std.fs.File.stdout().deprecatedWriter()` |
|
|
| ArrayList | `std.ArrayList(T).init(alloc)` | `std.array_list.Managed(T).init(alloc)` |
|
|
| file.reader() | sin args | `deprecatedReader()` |
|
|
| HTTP Client | `client.open()` + `send()` + `wait()` | `client.fetch()` |
|
|
| sleep | `std.time.sleep()` | `std.Thread.sleep()` |
|
|
|
|
### SMTP con STARTTLS
|
|
|
|
Se usa curl como subprocess para SMTP (mas fiable que TLS nativo):
|
|
|
|
```bash
|
|
echo -e "From: ...\r\nTo: ...\r\nSubject: ...\r\n\r\nBody" | \
|
|
curl -s --url "smtp://smtp.mailbox.org:587" --ssl-reqd \
|
|
-u "usuario:password" \
|
|
--mail-from "<from@email.com>" \
|
|
--mail-rcpt "<to@email.com>" -T -
|
|
```
|
|
|
|
---
|
|
|
|
## Historial de Desarrollo
|
|
|
|
| Fecha | Version | Cambio |
|
|
|-------|---------|--------|
|
|
| 2025-12-08 | v1.2 | Migracion Zig 0.15.2 + SMTP STARTTLS via curl |
|
|
| 2025-12-07 | v1.1 | Telegram + Email + Daemon mode |
|
|
| 2025-12-06 | v1.0 | HTTP/TCP check + watch mode + log + notify |
|
|
|
|
### Commits clave:
|
|
|
|
| Hash | Descripcion |
|
|
|------|-------------|
|
|
| e2e19da | Fase 1: Monitor basico HTTP/TCP |
|
|
| 3946f83 | Fase 2: Modo watch + CLI + timestamps |
|
|
| dfcfd31 | Log a archivo |
|
|
| 5a17d74 | Fase 3: Notificaciones desktop |
|
|
| 655dcb8 | Daemon mode + config externo |
|
|
| a011d9e | SMTP y Telegram |
|
|
| f31ce95 | Migracion a Zig 0.15.2 |
|
|
| 4a9d0e6 | SMTP con STARTTLS via curl |
|
|
|
|
---
|
|
|
|
## Pendiente (Mejoras futuras)
|
|
|
|
- [ ] Notificacion de recuperacion (servicio vuelve a funcionar)
|
|
- [ ] Rate limiting de notificaciones (evitar spam)
|
|
- [ ] Metricas/estadisticas de uptime
|
|
- [ ] Web dashboard (usando zcatui o similar)
|
|
|
|
---
|
|
|
|
## Referencias
|
|
|
|
- Documentacion tecnica completa: `docs/PROYECTO_COMPLETO.md`
|
|
- Guia Zig 0.15: `teamdocs/INFRASTRUCTURE/ZIG_0.15_GUIA.md`
|
|
- Credenciales: `teamdocs/INFRASTRUCTURE/NOTIFICACIONES.md`
|
|
- Servidor Simba: `teamdocs/INFRASTRUCTURE/SERVIDOR_HETZNER.md`
|
|
|
|
---
|
|
|
|
**service-monitor - Monitor de Servicios Zig**
|
|
*Proyecto completado 2025-12-08*
|
|
|
|
---
|
|
|
|
## CLAUDE CODE + ZLS (LSP)
|
|
|
|
Claude Code tiene integración LSP con zls (Zig Language Server).
|
|
|
|
**Plugin:** `$HOME/.claude/plugins/zls-lsp/`
|
|
|
|
**Operaciones disponibles:**
|
|
|
|
| Operación | Uso |
|
|
|-----------|-----|
|
|
| `goToDefinition` | Navegar a definición de símbolo |
|
|
| `findReferences` | Encontrar todas las referencias |
|
|
| `hover` | Info de tipo y documentación |
|
|
| `documentSymbol` | Símbolos del archivo actual |
|
|
| `incomingCalls` | Qué funciones llaman a ésta |
|
|
|
|
**Documentación:** `teamdocs/INFRASTRUCTURE/ZLS_LSP_CLAUDE_CODE.md`
|