service-monitor/claude.md
R.Eugenio ba594309be Estandarizar: CLAUDE.md → claude.md + refs CREDENCIALES
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 15:14:01 +01:00

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`