service-monitor/CLAUDE.md
reugenio 3c34d1cc18 docs: Renombrar TEAM_STANDARDS a teamdocs
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 19:33:50 +01:00

7 KiB

service-monitor - Monitor de Servicios en Zig

Ultima actualizacion: 2025-12-08 Lenguaje: Zig 0.15.2 Estado: PROYECTO COMPLETADO v1.2 Repositorio: git@git.reugenio.com:reugenio/service-monitor.git

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 normas
  • NORMAS_TRABAJO_CONSENSUADAS.md - Metodologia fundamental
  • QUICK_REFERENCE.md - Cheat sheet rapido
  • INFRASTRUCTURE/ - 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