service-monitor/docs/DIARIO_DESARROLLO.md
reugenio dbcf8c696b Documentación final proyecto completado
- docs/PROYECTO_COMPLETO.md: v1.2, SMTP STARTTLS documentado
- docs/DIARIO_DESARROLLO.md: Sesión 3 con migración Zig 0.15 y SMTP

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 01:24:15 +01:00

4.2 KiB

Diario de Desarrollo - service-monitor

2025-12-08 - Sesión 3: Migración Zig 0.15 + SMTP STARTTLS

Contexto

  • Migrar de Zig 0.13 a 0.15.2
  • Implementar SMTP con STARTTLS para notificaciones por email

Migración a Zig 0.15.2

Cambios requeridos:

Componente Antes (0.13) Después (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 requiere buffer, usar deprecatedReader()
HTTP Client client.open() + send() + wait() client.fetch()
sleep std.time.sleep() std.Thread.sleep()

Commits:

  • f31ce95 - Migración a Zig 0.15.2

SMTP con STARTTLS

Problema inicial: Se intentó implementar TLS nativo con std.crypto.tls.Client, pero la nueva API de I/O de Zig 0.15 resultó demasiado compleja (cambios en Reader/Writer interfaces).

Solución adoptada: Usar curl como subprocess, igual que para Telegram. Ventajas:

  • curl maneja STARTTLS con --ssl-reqd transparentemente
  • Código mucho más simple y mantenible
  • Fiable y probado

Configuración SMTP (Mailbox.org):

Host: smtp.mailbox.org
Puerto: 587 (STARTTLS)
Usuario: reugenio@mailbox.org
Password: App password (en NOTIFICACIONES.md)

Commits:

  • 4a9d0e6 - SMTP con STARTTLS via curl

Estado Final del Proyecto

Todas las funcionalidades implementadas:

  • Verificación HTTP/HTTPS
  • Verificación TCP
  • Modo watch (loop continuo)
  • Modo daemon (background)
  • Log a archivo
  • Config externo (CSV)
  • Notificación desktop (notify-send)
  • Notificación Telegram (Bot API via curl)
  • Notificación Email (SMTP STARTTLS via curl)

Estructura final:

service-monitor/
├── build.zig
├── CLAUDE.md
├── services.conf
├── docs/
│   ├── DIARIO_DESARROLLO.md
│   └── PROYECTO_COMPLETO.md
└── src/
    ├── main.zig      # Entry point + CLI
    ├── http.zig      # Cliente HTTP (fetch API)
    ├── tcp.zig       # Verificación TCP
    ├── config.zig    # Parser CSV
    ├── notify.zig    # notify-send
    ├── daemon.zig    # fork + setsid
    ├── smtp.zig      # SMTP via curl
    └── telegram.zig  # Bot API via curl

2025-12-07 - Sesión 2: Fases 2 y 3

Implementado

  • Modo watch con intervalo configurable
  • Modo daemon con fork/setsid
  • Log a archivo
  • Config externo (services.conf)
  • Notificaciones desktop (notify-send)
  • Notificaciones Telegram (Bot API)
  • SMTP básico (sin STARTTLS)

2025-12-07 - Sesión 1: Inicio proyecto

Contexto

  • Proyecto nuevo: Monitor de servicios para servidor Hetzner (Simba)
  • Lenguaje: Zig 0.13.0
  • Objetivo: Herramienta ligera, sin dependencias externas, potencialmente open source

Implementado - Fase 1 Básica

Estructura creada:

service-monitor/
├── build.zig         # Sistema build Zig
├── CLAUDE.md         # Especificación proyecto
├── docs/             # Documentación
│   └── DIARIO_DESARROLLO.md
└── src/
    ├── main.zig      # Entry point + output terminal
    ├── http.zig      # Verificación HTTP/HTTPS (std.http.Client)
    ├── tcp.zig       # Verificación TCP (std.net)
    └── config.zig    # Lista servicios hardcoded

Servicios configurados:

  1. Forgejo HTTP - https://git.reugenio.com
  2. Forgejo SSH - git.reugenio.com:2222
  3. Simifactu API - https://simifactu.com
  4. Mundisofa - https://mundisofa.com
  5. Menzuri - https://menzuri.com

Detalles técnicos Zig 0.13:

  • std.http.Client.open() requiere server_header_buffer obligatorio
  • std.time.Timer debe ser var (no const) para llamar .read()
  • Output con colores ANSI: \x1b[32m verde, \x1b[31m rojo, \x1b[0m reset

Normas aplicadas:

  • Doc comments (///) en todas las funciones públicas
  • Código idiomático Zig (snake_case, error handling explícito)
  • Preparado para open source

Comandos

zig build           # Compilar
zig build run       # Ejecutar verificación