Actualizar CLAUDE.md - proyecto completado v1.2
- 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 <noreply@anthropic.com>
This commit is contained in:
parent
dbcf8c696b
commit
dfc75be016
1 changed files with 209 additions and 126 deletions
335
CLAUDE.md
335
CLAUDE.md
|
|
@ -1,165 +1,248 @@
|
||||||
# service-monitor - Monitor de Servicios en Zig
|
# 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
|
**Funcionalidades implementadas**:
|
||||||
|
- Verificacion HTTP/HTTPS con tiempos de respuesta
|
||||||
**Objetivo**: Herramienta de monitoreo simple y ligera, sin dependencias de servicios externos como UptimeRobot.
|
- Verificacion TCP con resolucion DNS
|
||||||
|
- Modo watch (loop continuo con intervalo configurable)
|
||||||
## Servicios a Monitorear
|
- Modo daemon (background con fork() + setsid())
|
||||||
|
- Log a archivo
|
||||||
### Servidor Simba (188.245.244.244)
|
- Configuracion externa (CSV)
|
||||||
|
- Notificaciones desktop (notify-send)
|
||||||
| Servicio | URL/Puerto | Verificación |
|
- Notificaciones email (SMTP con STARTTLS via curl)
|
||||||
|----------|------------|--------------|
|
- Notificaciones Telegram (Bot API via curl)
|
||||||
| **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
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Equipo y Metodología
|
## Estructura del Proyecto
|
||||||
|
|
||||||
### Quiénes Somos
|
```
|
||||||
- **Usuario**: Desarrollador independiente, proyectos comerciales propios
|
service-monitor/
|
||||||
- **Claude**: Asistente de programación (Claude Code)
|
├── 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
|
### 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/
|
/mnt/cello2/arno/re/recode/TEAM_STANDARDS/
|
||||||
```
|
```
|
||||||
|
|
||||||
**Archivos clave a leer**:
|
**Archivos clave a leer**:
|
||||||
- `LAST_UPDATE.md` - **LEER PRIMERO** - Cambios recientes en normas
|
- `LAST_UPDATE.md` - **LEER PRIMERO** - Cambios recientes en normas
|
||||||
- `NORMAS_TRABAJO_CONSENSUADAS.md` - Metodología fundamental
|
- `NORMAS_TRABAJO_CONSENSUADAS.md` - Metodologia fundamental
|
||||||
- `QUICK_REFERENCE.md` - Cheat sheet rápido
|
- `QUICK_REFERENCE.md` - Cheat sheet rapido
|
||||||
- `INFRASTRUCTURE/` - Documentación de servidores (IPs, puertos, servicios)
|
- `INFRASTRUCTURE/` - Documentacion 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
|
|
||||||
|
|
||||||
### Control de Versiones
|
### Control de Versiones
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Este proyecto
|
# Remote
|
||||||
git remote: git@git.reugenio.com:reugenio/service-monitor.git (pendiente crear)
|
git remote: git@git.reugenio.com:reugenio/service-monitor.git
|
||||||
|
|
||||||
# Crear repo en Forgejo cuando esté listo el código inicial
|
# Branches
|
||||||
```
|
main # Codigo estable
|
||||||
|
|
||||||
### 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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Estructura del Proyecto (Planificada)
|
## Ecosistema Zig - Proyectos Relacionados
|
||||||
|
|
||||||
```
|
Este proyecto forma parte del ecosistema Zig desarrollado en 2025:
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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
|
```bash
|
||||||
# Compilar
|
echo -e "From: ...\r\nTo: ...\r\nSubject: ...\r\n\r\nBody" | \
|
||||||
zig build
|
curl -s --url "smtp://smtp.mailbox.org:587" --ssl-reqd \
|
||||||
|
-u "usuario:password" \
|
||||||
# Ejecutar verificación única
|
--mail-from "<from@email.com>" \
|
||||||
zig build run
|
--mail-rcpt "<to@email.com>" -T -
|
||||||
|
|
||||||
# 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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 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*
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue