Social Bot Scheduler

🗺️ Mapa Completo del Sistema — Archivo por Archivo#

Propósito: Este documento explica cada archivo y directorio del repositorio, su rol en la arquitectura, y por qué existe. Diseñado para que cualquier persona (desarrollador, reclutador o auditor) entienda el sistema completo sin necesidad de leer el código fuente.


📐 Estructura General#

social-bot-scheduler/
├── 🏠 Raíz ................... Configuración, orquestación y entrada principal
├── 🛡️ apache/ ................ Config Apache de hardening (security headers)
├── 📦 cases/ ................. 19 Casos implementados + 1 planificado (ver docs/PLANNED_CASES.md)
├── 📚 docs/ .................. Documentación técnica y guías
├── 🌐 edge/ .................. Caddy reverse proxy (perfil edge)
├── 🔄 n8n/ ................... Workflows de orquestación (JSON exportados)
├── 📊 grafana/ ............... Dashboards y datasources de monitoreo
├── 📈 prometheus/ ............ Configuración de métricas
├── ☸️ k8s/ ................... Manifiestos de Kubernetes (producción)
├── 📝 articulo/ .............. Artículo técnico para LinkedIn
└── 🔧 .github/ ............... CI/CD (GitHub Actions) + Dependabot

🏠 Archivos Raíz (Orquestación y Configuración)#

Infraestructura Docker#

ArchivoImportanciaDescripción
docker-compose.yml🔴 CríticoDefine los servicios del ecosistema completo: 20 receptores, bases de datos externas (SQL, NoSQL, columnar, grafos, vectoriales), n8n, Grafana, Prometheus, cAdvisor, Caddy edge proxy y el dashboard maestro. Contiene perfiles caseXX, full, observability y edge.
docker-compose.dev.yml🟡 MediaOverride para desarrollo local. Añade hot-reload y puertos de depuración.
Dockerfile🟡 MediaImagen Docker multi-stage para el hub. Corre como botuser (no-root).
Makefile🟢 AltaAutomatización de comandos frecuentes: make up, make up-secure, make up-observability, make up-edge, make clean y make nuke.
.gitattributes🟢 AltaNormalización de line endings por tipo de archivo. Scripts shell/Python/Go → LF; scripts Windows → CRLF. Evita errores bad interpreter en contenedores Linux al clonar en Windows.

Automatización y CLI#

ArchivoImportanciaDescripción
hub.py🔴 CríticoHUB CLI — Centro de control del sistema. Permite diagnosticar, levantar, limpiar y auditar todo el ecosistema con comandos como python hub.py up --full, --observability o --edge. Es el "cerebro operacional" del proyecto.
hub.sh🟡 MediaWrapper Bash del HUB CLI para sistemas Linux/Mac.
hub.ps1🟡 MediaWrapper PowerShell del HUB CLI para Windows.
setup.py🟢 AltaAsistente interactivo de configuración inicial. Genera archivos .env con credenciales y URLs de webhook para cada caso.
check_resources.py🟡 MediaScript de diagnóstico que analiza el uso de RAM y disco de los contenedores Docker en ejecución.

Workflows n8n (Gestión)#

ArchivoImportanciaDescripción
import_workflows.py🟢 AltaImporta automáticamente los 19 workflows JSON al motor n8n vía API REST. Esencial para el primer despliegue.
generate_workflows.py🟡 MediaGenera plantillas base de workflows n8n para nuevos casos de integración.
check_workflows.py🟡 MediaVerifica que los workflows importados estén activos y sus webhooks registrados.
diagnose_n8n.py🟡 MediaDiagnóstico profundo del estado de n8n: nodos registrados, credenciales, errores de arranque.

Verificación y Testing#

ArchivoImportanciaDescripción
verify_all_cases.py🟢 AltaEjecuta una verificación end-to-end de los 19 casos: levanta el bot, envía un payload al webhook, y comprueba la respuesta del receptor.
run_all_verifications.py🟢 AltaOrquestador maestro de verificaciones: ejecuta tests unitarios, de integración, y análisis de seguridad en secuencia.
verify_n8n.py🟡 MediaVerifica que n8n esté operativo y que los webhooks de cada caso estén accesibles.
audit_schema.py🟡 MediaAuditoría de esquemas JSON de los workflows para detectar incompatibilidades.

Configuración del Proyecto#

ArchivoImportanciaDescripción
pyproject.toml🟡 MediaConfiguración de herramientas Python (Black, pytest, mypy). Define reglas de formato y testing.
requirements.txt🟢 AltaDependencias Python del proyecto raíz (requests, pydantic, python-dotenv).
.gitignore🟡 MediaDefine qué archivos NO se suben a Git: node_modules/, venv/, n8n/data/, .env.

Documentación Raíz#

ArchivoImportanciaDescripción
README.md🔴 CríticoPuerta de entrada principal al proyecto. Contiene visión general, instrucciones de despliegue, arquitectura resumida y enlaces a toda la documentación.
CHANGELOG.md🟢 AltaHistorial de cambios por versión (v1.0.0v4.9.0). Documenta cada feature, fix y breaking change.
ROADMAP.md🟡 MediaPlanificación a futuro: migración a K8s, integración con LangChain, soporte multi-tenant.
CONTRIBUTING.md🟡 MediaGuía para contribuidores: convenciones de commits, branching strategy, y code review.
CODE_OF_CONDUCT.md🟢 BajaCódigo de conducta estándar para la comunidad del proyecto.
SECURITY.md🟢 AltaPolítica de seguridad: cómo reportar vulnerabilidades de forma responsable.
LICENSE🟡 MediaLicencia del proyecto (MIT/Apache).
NOTICE🟢 BajaAtribuciones legales de dependencias de terceros.
index.html🟢 AltaDashboard Maestro (v4.3.0+) — Interfaz web unificada con: (a) detección automática client-side cada 20 s del estado READY/OFFLINE de cada caso vía ping al receptor; (b) modal con docker-compose --profile caseXX up -d y copy-to-clipboard para casos OFFLINE; (c) barra Docker con contadores live + última comprobación + botón Re-comprobar; (d) sistema de toasts para transiciones; (e) badges de RAM en las 20 tarjetas (19 implementadas + 1 planificada, caso 19, pendiente de verificación end-to-end). Sin backend nuevo: el navegador nunca ejecuta docker, solo muestra el comando exacto.
llms.txt🟢 BajaMetadatos del proyecto optimizados para consumo por modelos de lenguaje (LLMs).
COMO_ACTIVAR_WORKFLOWS.md🟢 AltaGuía paso a paso para importar y activar los workflows de n8n.
IMPORT_WORKFLOWS.md🟡 MediaDocumentación técnica del proceso de importación de workflows.
killed.md🟢 BajaLog de servicios terminados por el OOM Killer durante el stress test.

📦 Casos de Integración (cases/)#

Cada caso sigue la misma estructura de 3 carpetas:

cases/XX-origen-to-destino/
├── origin/     → Bot Emisor (código fuente del lenguaje de origen)
├── n8n/        → Workflow JSON del caso (lógica de orquestación)
└── dest/       → Servicio Receptor (código fuente del lenguaje destino + DB)

Case 01: Python → PHP (MySQL)#

ArchivoRolDescripción
origin/bot.py🚀 Entry PointWrapper que manipula PYTHONPATH y delega a main.py.
origin/src/social_bot/main.py🧠 BootstrapPunto de arranque arquitectónico. Inicializa BotService.
origin/src/social_bot/service.py⚙️ CoreServicio de dominio: carga posts, filtra pendientes, envía vía HTTP, persiste estado. Implementa Repository Pattern y Transaction Script.
origin/src/social_bot/config.py🔧 ConfigCarga de variables de entorno con Pydantic Settings.
origin/src/social_bot/models.py📋 ModeloDTO Post con validación Pydantic (id, text, channels, scheduled_at).
origin/posts.json💾 DBBase de datos local en JSON con los posts a publicar.
dest/index.php📥 ReceiverReceptor PHP con routing manual, validación, logging y persistencia en MySQL. Implementa DLQ.
dest/index.html🖥️ DashboardInterfaz web del receptor que muestra logs en tiempo real.
dest/errors.php🚨 DLQManejo de errores y Dead Letter Queue.
n8n/*.json🔄 WorkflowLógica de transformación y enrutamiento en n8n.

Case 02: Python → Go (MariaDB)#

ArchivoRolDescripción
origin/src/social_bot/main.py🧠 BootstrapArranque orientado a alto rendimiento. Go como receptor escala verticalmente.
origin/src/social_bot/service.py⚙️ CoreCliente HTTP para el backend Go. Payload JSON estricto para json.Unmarshal.
dest/main.go📥 ReceiverReceptor de alto rendimiento: Goroutines, sync.Mutex para escritura thread-safe, reintentos de conexión a MariaDB. SQL parametrizado contra Injection. ON DUPLICATE KEY UPDATE para idempotencia.
dest/Dockerfile🐳 BuildCompilación del binario Go dentro del contenedor.
dest/index.html🖥️ DashboardInterfaz web con polling de logs.

Case 03: Go → Node.js (PostgreSQL)#

ArchivoRolDescripción
origin/main.go🚀 DaemonBot en Go con bucle infinito (30s). Binario estático sin dependencias. 12-Factor App.
dest/index.js📥 ReceiverReceptor asíncrono: Express.js + Pool PostgreSQL. Responde antes de persistir (async DB write). ON CONFLICT DO UPDATE para idempotencia.
dest/index.html🖥️ DashboardDashboard Node.js con polling AJAX.

Case 04: Node.js → FastAPI (SQLite)#

ArchivoRolDescripción
origin/index.js🚀 DaemonBot en Node.js con setInterval y Axios. Polling no-bloqueante.
dest/main.py📥 ReceiverReceptor ASGI: FastAPI + Pydantic para validación automática de esquema. SQLite zero-config. INSERT OR REPLACE para idempotencia.
dest/index.html🖥️ DashboardDashboard con fetch API.

Case 05: Laravel → React (MongoDB)#

ArchivoRolDescripción
origin/ArtisanPost.php🚀 WorkerSimulación de comando Artisan (php artisan post:send). HTTP POST con stream_context_create nativo (sin Guzzle).
dest/server.js📥 BFFBackend-for-Frontend: Express + CORS + MongoDB. upsert: true para idempotencia. Responde antes de escribir en DB.
dest/App.jsx🖥️ FrontendComponente React que consume la API /api/logs y renderiza el feed en tiempo real.

Case 06: Go → Symfony (Redis)#

ArchivoRolDescripción
origin/main.go🚀 DaemonBot Go compacto (estilo one-liner). Demuestra la flexibilidad sintáctica del lenguaje.
dest/index.php📥 ReceiverDiseño Dual: Clase OOP SocialBotController (Symfony real) + Script Procedural (Symfony Lite). Persistencia en Redis con TTL de 24h.

Case 07: Rust → Ruby (Cassandra)#

ArchivoRolDescripción
origin/src/main.rs🚀 ProducerEmisor de máxima seguridad: Ownership, match exhaustivo, reqwest::blocking. Si Rust puede enviar datos, cualquier lenguaje puede.
origin/Cargo.toml📦 BuildDependencias Rust: serde, reqwest, dotenv.
dest/app.rb📥 ReceiverReceptor minimalista: Sinatra + Cassandra. Cola FIFO en memoria (20 posts). Rack::Protection desactivado para Docker.
dest/Dockerfile🐳 BuildInstalación de gems (sinatra, cassandra-driver).

Case 08: C# → Flask (MSSQL)#

ArchivoRolDescripción
origin/Program.cs🚀 ProducerEmisor .NET: HttpClient estático (evita Socket Exhaustion), async/await, System.Text.Json.
origin/SocialBot.csproj📦 BuildConfiguración del proyecto .NET (target framework, dependencias).
dest/app.py📥 ReceiverReceptor WSGI: Flask + pyodbc + MSSQL. UPSERT manual con T-SQL. Retry con backoff para esperar a SQL Server.
dest/Dockerfile🐳 BuildImagen Debian (no Alpine) por compatibilidad con ODBC Driver 18 de Microsoft.

📚 Documentación Técnica (docs/)#

ArchivoAudienciaDescripción
ARCHITECTURE.md🏗️ ArquitectosDiagramas del sistema, flujo de datos, y decisiones de diseño.
RECRUITER.md👔 ReclutadoresEvaluación técnica rápida: valor de negocio, complejidad demostrada, skills cubiertos.
BEGINNERS_GUIDE.md🐣 NovatosGuía paso a paso para entender el proyecto sin experiencia previa.
CASES_INDEX.md📊 ReferenciaMatriz técnica de los 20 casos (19 implementados + 1 planificado): lenguajes, DBs, puertos, y estado.
DOCKER_RESOURCES.md🐳 DevOpsAnálisis detallado de uso de RAM y disco. Incluye el Stress Test Report.
RESILIENCE_GUIDE.md🛡️ SREsGuía de resiliencia: Circuit Breakers, DLQ, Idempotencia, y reintentos.
GUARDRAILS.md🔒 SeguridadImplementación de guardrails: validación, sanitización, rate limiting.
TROUBLESHOOTING.md🔧 SoporteResolución de errores comunes (Docker, n8n, dependencias).
VERIFICATION_GUIDE.md🧪 QAManual de pruebas para verificar la salud del repositorio.
REQUIREMENTS.md💻 InstalaciónEspecificaciones de hardware y software recomendadas.
LIMITATIONS.md⚠️ TransparenciaTrade-offs y decisiones técnicas documentadas honestamente.
HUB.md🖥️ CLIDocumentación del HUB CLI (hub.py): comandos, flags, y ejemplos.
INSTALL.md📦 SetupInstrucciones de instalación detalladas.
API.md🔌 IntegradoresDocumentación de los endpoints expuestos por cada receptor.
HEALTH_CHECK.md🏥 MonitoreoEndpoints de health check y métricas de cada servicio.
INSIGHTS.md💡 AnálisisInsights técnicos y lecciones aprendidas durante el desarrollo.
COMPLIANCE.md📋 AuditoríaCumplimiento de estándares (OWASP, 12-Factor App).
SECURITY.md🔐 SeguridadPolítica de seguridad y auditoría de dependencias.
SYSTEMS_CATALOG.md📖 InventarioCatálogo de todos los sistemas y tecnologías utilizados.
USER_MANUAL.md📘 UsuariosManual de usuario final del sistema.
MAINTAINERS.md👥 MantenedoresLista de mantenedores y áreas de responsabilidad.
DOCKER_REPORT.md📊 InformesReporte generado por el script de análisis de recursos Docker.
FILE_MAP.md🗺️ Este docEl documento que estás leyendo ahora.

🔄 Orquestación n8n (n8n/)#

Archivo/DirDescripción
workflows/*.json19 archivos JSON, uno por caso. Contienen la lógica de transformación, enrutamiento y manejo de errores del bus de eventos.
data/Datos persistentes de n8n (base de datos SQLite interna, credenciales, ejecuciones). Excluido de Git.
README.mdDocumentación específica de la configuración de n8n.

📊 Observabilidad (grafana/ + prometheus/)#

Archivo/DirDescripción
grafana/provisioning/datasources/Configuración automática de Prometheus como datasource en Grafana.
prometheus/prometheus.ymlConfiguración de scraping: targets, intervalos, y reglas de alerta.

☸️ Kubernetes (k8s/)#

Archivo/DirDescripción
k8s/base/Manifiestos base (Deployments, Services, ConfigMaps) para despliegue en K8s.
k8s/overlays/dev/Overlay de Kustomize para el entorno de desarrollo (réplicas reducidas, sin TLS).

🔧 CI/CD (.github/)#

Archivo/DirDescripción
.github/workflows/ci-cd.ymlPipeline principal: linting, tests, auditoría de seguridad (Trivy, Gitleaks, pip-audit), detección de bidi/ofuscación (supply-chain-checks) y deploy a GHCR.
.github/workflows/wiki-sync.ymlSincronización de docs/wiki/ al GitHub Wiki.
.github/dependabot.ymlActualizaciones automáticas de dependencias para 12 manifiestos en 6 ecosistemas: github-actions, pip (hub + 3 cases), docker, gomod (3 cases), cargo, npm (2 cases, lockfiles pnpm). Abre PRs con security label.

🛡️ Hardening (apache/)#

ArchivoDescripción
apache/security-headers.confConfiguración Apache de hardening montada en todos los servicios php:8.2-apache. Configura X-Frame-Options, X-Content-Type-Options, Content-Security-Policy, Referrer-Policy, Permissions-Policy y deshabilita el listado de directorios (Options -Indexes). Requiere mod_headers (habilitado vía command: sh -c "a2enmod headers && apache2-foreground").

📝 Artículo Profesional (articulo/)#

ArchivoDescripción
LINKEDIN_ARTICLE.mdArtículo de alto nivel técnico para LinkedIn sobre la experiencia de orquestación políglota.

🔑 Archivos Utilitarios (Raíz)#

ArchivoDescripción
fix_json.pyScript para reparar JSON malformados en workflows de n8n.
check_n8n_db.jsScript Node.js para inspeccionar la base de datos interna de n8n (SQLite).
list_nodes_internal.jsLista los tipos de nodos registrados en la instancia de n8n.
test_node_type.jsonFixture de test para validar la estructura de nodos n8n.
test_node_v2.pyTest unitario para verificar la compatibilidad de versión de nodos.
resources.jsonArchivo generado con el snapshot de recursos Docker (RAM, disco).
hub.audit.logLog de auditoría generado por el HUB CLI.
cookies.txtArchivo temporal para sesiones HTTP (generado durante tests).

💡 Tip: Usa Ctrl+F para buscar cualquier archivo específico. Cada fila enlaza directamente al concepto arquitectónico que justifica la existencia del archivo.