From dfc75be016a64c3c1ddebc09b860c8a8c78ff57d Mon Sep 17 00:00:00 2001 From: reugenio Date: Mon, 8 Dec 2025 17:48:43 +0100 Subject: [PATCH] Actualizar CLAUDE.md - proyecto completado v1.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Estado actualizado a COMPLETO v1.2 - Estructura real del proyecto (8 archivos src/) - Comandos con path completo a Zig 0.15.2 - Ecosistema Zig documentado (zcatui, zsqlite, zpdf) - Notas tecnicas: migracion Zig 0.15, SMTP STARTTLS - Historial de desarrollo con commits clave - Mejoras futuras pendientes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- CLAUDE.md | 335 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 209 insertions(+), 126 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 8621e18..e745d89 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,165 +1,248 @@ # service-monitor - Monitor de Servicios en Zig -> **Última actualización**: 2025-12-08 +> **Ultima actualizacion**: 2025-12-08 +> **Lenguaje**: Zig 0.15.2 +> **Estado**: PROYECTO COMPLETADO v1.2 +> **Repositorio**: git@git.reugenio.com:reugenio/service-monitor.git -## Descripción del Proyecto +## Descripcion del Proyecto -Monitor que verifica periódicamente que los servicios en nuestro servidor Hetzner (Simba) estén funcionando correctamente, con notificaciones si algo falla. +Monitor que verifica periodicamente que los servicios en nuestro servidor Hetzner (Simba) esten funcionando correctamente, con notificaciones si algo falla. -**Lenguaje**: Zig 0.15.2 - -**Objetivo**: Herramienta de monitoreo simple y ligera, sin dependencias de servicios externos como UptimeRobot. - -## Servicios a Monitorear - -### Servidor Simba (188.245.244.244) - -| Servicio | URL/Puerto | Verificación | -|----------|------------|--------------| -| **Forgejo** | https://git.reugenio.com | HTTP 200 | -| **Forgejo SSH** | git.reugenio.com:2222 | Conexión TCP | -| **Simifactu API** | https://simifactu.com | HTTP 200 | -| **Mundisofa** | https://mundisofa.com | HTTP 200 | -| **Menzuri** | https://menzuri.com | HTTP 200 | - -## Funcionalidades Planificadas - -### Fase 1 - Básico -- [ ] Verificar HTTP status de URLs -- [ ] Verificar puertos TCP abiertos -- [ ] Output en terminal (estado actual) - -### Fase 2 - Monitoreo Continuo -- [ ] Modo daemon (corre en background) -- [ ] Intervalo configurable -- [ ] Log de eventos - -### Fase 3 - Notificaciones -- [ ] Notificación desktop (libnotify) -- [ ] Log a archivo -- [ ] Opcional: webhook/email - -## Stack Técnico - -- **Zig 0.13.0** - Lenguaje principal -- **HTTP Client** - std.http -- **TCP Sockets** - std.net -- **Sin dependencias externas** - Solo stdlib de Zig - -## Filosofía del Proyecto - -- Binario único, pequeño, portable -- Puede correr en el servidor o en máquina local -- Sin dependencias de servicios cloud externos -- Consumo mínimo de recursos +**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) --- -## Equipo y Metodología +## Estructura del Proyecto -### Quiénes Somos -- **Usuario**: Desarrollador independiente, proyectos comerciales propios -- **Claude**: Asistente de programación (Claude Code) +``` +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**: `TEAM_STANDARDS/INFRASTRUCTURE/NOTIFICACIONES.md` + +--- + +## Equipo y Metodologia ### Normas de Trabajo Centralizadas -**IMPORTANTE**: Todas las normas de trabajo están en: +**IMPORTANTE**: Todas las normas de trabajo estan en: ``` /mnt/cello2/arno/re/recode/TEAM_STANDARDS/ ``` **Archivos clave a leer**: - `LAST_UPDATE.md` - **LEER PRIMERO** - Cambios recientes en normas -- `NORMAS_TRABAJO_CONSENSUADAS.md` - Metodología fundamental -- `QUICK_REFERENCE.md` - Cheat sheet rápido -- `INFRASTRUCTURE/` - Documentación de servidores (IPs, puertos, servicios) - -### Protocolo de Comunicación Entre Proyectos - -1. **Al iniciar conversación**: Leer `TEAM_STANDARDS/LAST_UPDATE.md` -2. **Si modificas normas**: Actualizar `LAST_UPDATE.md` con fecha y cambios -3. **Commits**: Siempre a Forgejo (git.reugenio.com), nunca a GitHub +- `NORMAS_TRABAJO_CONSENSUADAS.md` - Metodologia fundamental +- `QUICK_REFERENCE.md` - Cheat sheet rapido +- `INFRASTRUCTURE/` - Documentacion de servidores (IPs, puertos, servicios) ### Control de Versiones ```bash -# Este proyecto -git remote: git@git.reugenio.com:reugenio/service-monitor.git (pendiente crear) +# Remote +git remote: git@git.reugenio.com:reugenio/service-monitor.git -# Crear repo en Forgejo cuando esté listo el código inicial -``` - -### Documentación del Sistema Local - -El ordenador de trabajo está documentado en: -``` -/home/re/cello/claude/claude.md -/home/re/cello/claude/docs/ -``` - -### Documentación del Servidor - -Información detallada del servidor Simba: -``` -/mnt/cello2/arno/re/recode/TEAM_STANDARDS/INFRASTRUCTURE/SERVIDOR_HETZNER.md +# Branches +main # Codigo estable ``` --- -## Estructura del Proyecto (Planificada) +## Ecosistema Zig - Proyectos Relacionados -``` -service-monitor/ -├── CLAUDE.md # Este archivo -├── src/ -│ ├── main.zig # Punto de entrada -│ ├── checker.zig # Lógica de verificación -│ ├── http.zig # Cliente HTTP -│ ├── tcp.zig # Verificación TCP -│ ├── config.zig # Configuración de servicios -│ └── notify.zig # Sistema de notificaciones -├── build.zig # Sistema de build de Zig -├── services.json # Lista de servicios a monitorear (configurable) -└── README.md # Documentación de uso -``` +Este proyecto forma parte del ecosistema Zig desarrollado en 2025: -## Comandos Útiles +| 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 -# Compilar -zig build - -# Ejecutar verificación única -zig build run - -# Modo daemon -zig build run -- --daemon --interval 60 - -# Release para servidor -zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux -``` - -## Ejemplo de Uso (Planificado) - -```bash -# Verificar todos los servicios una vez -$ service-monitor check -✅ git.reugenio.com - 200 OK (45ms) -✅ git.reugenio.com:2222 - TCP OK (12ms) -✅ simifactu.com - 200 OK (89ms) -✅ mundisofa.com - 200 OK (67ms) -✅ menzuri.com - 200 OK (72ms) - -# Modo watch (cada 60 segundos) -$ service-monitor watch --interval 60 +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 - ``` --- -## Notas de Desarrollo +## Historial de Desarrollo -*Esta sección se irá llenando conforme avance el proyecto* +| 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 | --- -**Estado**: Proyecto nuevo, pendiente iniciar desarrollo (después de forgejo-cli) +## 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: `TEAM_STANDARDS/INFRASTRUCTURE/ZIG_0.15_GUIA.md` +- Credenciales: `TEAM_STANDARDS/INFRASTRUCTURE/NOTIFICACIONES.md` +- Servidor Simba: `TEAM_STANDARDS/INFRASTRUCTURE/SERVIDOR_HETZNER.md` + +--- + +**service-monitor - Monitor de Servicios Zig** +*Proyecto completado 2025-12-08*