🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8.3 KiB
service-monitor - Monitor de Servicios en Zig
Tipo: Herramienta Zig (deploy en servidor) Credenciales:
teamdocs/INFRASTRUCTURE/CREDENCIALES.mdCheatsheet:teamdocs/CHEATSHEET.mdEstado: 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
# 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 normasNORMAS_TRABAJO_CONSENSUADAS.md- Metodologia fundamentalQUICK_REFERENCE.md- Cheat sheet rapidoINFRASTRUCTURE/- Documentacion de servidores (IPs, puertos, servicios)
Control de Versiones
# 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):
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