Daywatch es un Gestor de Tareas de Mantenimiento Institucional multiplataforma, diseñado con una arquitectura limpia (Patrón Estrategia) y una hermosa Interfaz de Usuario de Terminal (TUI).
Permite programar y administrar rutinas de mantenimiento sin lidiar directamente con los complejos comandos de los planificadores de cada sistema operativo. Daywatch traduce tus configuraciones a tareas nativas de Windows o Linux de forma completamente transparente.
- Multiplataforma Real:
- En Linux / WSL, se integra nativamente con el demonio
cron. - En Windows, utiliza
schtaskspara registrar las tareas en el Programador de Tareas. Compatible incluso con consolas heredadas como la de Windows 7.
- En Linux / WSL, se integra nativamente con el demonio
- Interfaz Atractiva (TUI): Construida sobre
prompt_toolkit, ofrece menús interactivos, formularios guiados y una paleta de colores moderna (Catppuccin Mocha). - Plantillas de Mantenimiento Integradas:
- 🗑️ Limpieza Profunda de Archivos Temporales (
.tmp,.log, caché). - 💾 Respaldo de Documentos Administrativos.
- 🔄 Reinicio para Liberación de Memoria.
- 📜 Ejecución de Scripts Personalizados (Soporte inteligente para
.sh,.baty.ps1saltándose restricciones de políticas de ejecución).
- 🗑️ Limpieza Profunda de Archivos Temporales (
- Ejecución Ad-Hoc: Posibilidad de ejecutar rutinas de mantenimiento de forma inmediata en segundo plano ("Ejecutar ahora mismo"), sin dejar rastro en el historial de tareas programadas.
- Persistencia Ligera: Los metadatos de las tareas se guardan de forma segura en
~/.daywatch/tareas.json.
El núcleo de Daywatch está diseñado utilizando el Patrón Estrategia (Strategy Pattern) para aislar la lógica de la interfaz gráfica de la interacción con el Sistema Operativo subyacente:
GestorTareasBase: Clase abstracta que define el contrato y maneja la persistencia en formato JSON.GestorCron: Estrategia implementada para sistemas POSIX (Linux/macOS) que genera y registra sintaxis decrontab.GestorTaskScheduler: Estrategia para entornos NT (Windows) que emite subcomandos para la herramienta CLIschtasks.- Inyección de Dependencias: El archivo
main.pydetecta el SO en tiempo de ejecución, instancia la estrategia correcta y la inyecta a la TUI para que la consuma.
- Python 3.8 o superior.
- En Linux/Ubuntu: Asegurarse de tener el paquete
python3-venvinstalado.
# Crear entorno virtual (Recomendado)
python3 -m venv .venv
# Activar en Linux/WSL/macOS
source .venv/bin/activate
# Activar en Windows (PowerShell)
.\.venv\Scripts\activate# Instalar el paquete en modo editable y descargar dependencias (prompt_toolkit)
pip install -e .Inicia la interfaz gráfica interactiva simplemente escribiendo en tu consola:
daywatch(Alternativa: python -m daywatch)
daywatch/
├── pyproject.toml # Empaquetado y metadatos (Solo prompt_toolkit)
├── test_backend.py # Pruebas unitarias de la arquitectura backend
└── daywatch/
├── main.py # Punto de entrada y detección de SO
├── modelos.py # Clases base, Enums y entidades del sistema
├── plantillas.py # Catálogo de rutinas y comandos (Linux/Win)
├── gestores/
│ ├── base.py # Patrón Estrategia: Clase base
│ ├── cron.py # Patrón Estrategia: Motor Linux
│ └── schtasks.py # Patrón Estrategia: Motor Windows
└── ui/
├── app.py # Menú principal de la TUI y Acerca De
├── estilos.py # Tema visual (Catppuccin Mocha)
├── formulario.py # Asistente de creación de tareas
└── lista_tareas.py# Vista tabular y gestor de eliminación
- Bypass de PowerShell: En Windows, si se carga un archivo
.ps1, la aplicación reescribe la orden para invocarpowershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden, evitando que la tarea falle silenciosamente por restricciones de seguridad. - Manejo de Comillas Múltiples: Escaneo inteligente de rutas obtenidas del portapapeles ("Copy as path") para evitar conflictos sintácticos de doble comilla en Windows al interactuar con cmd.
- Seguridad en Limpieza: Uso de comandos no destructivos para limpieza de temporales, utilizando banderas (
2>nulo2>/dev/null) para evitar fallos catastróficos por colisiones con archivos abiertos por otros procesos en memoria.