# service-monitor - Monitor de Servicios en Zig > **Ultima actualizacion**: 2025-12-19 > **Lenguaje**: Zig 0.15.2 > **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 "" \ --mail-rcpt "" -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`