Universidad Nacional de Luján
Departamento de Ciencias Básicas
Sistemas Distribuidos y Programación Paralela 2026 Dr. David Petrocelli
AUTOGRADER
📑 Índice del documento

Autograder — Cronograma de actividades

Corrección automática por ejercicio. Cada lunes, una (o dos) actividades nuevas con corrección instantánea. Forkeás → codeás → pusheás → en ~1 min recibís ✅/❌ con el detalle. Cierre del programa: lunes 15/06/2026.


Cómo funciona — en 30 segundos

Vos pusheás → Grader corre tests ocultos → ✅/❌ comentario en tu commit
                                          → Planilla de Google + Discord + email si fallás

Cada ejercicio es un repo de GitHub que vos forkeás. Implementás siguiendo el README.md del repo, pusheás, y un sistema externo corre tests ocultos sobre tu código y te devuelve feedback automático.

Dónde ver tus resultados

Canal Link Qué encontrás
🏆 Leaderboard público https://unlu-sd2026.github.io/grader/ Ranking del curso, puntaje acumulado, ejercicios resueltos
💬 Comentario en tu commit tu fork → último commit Detalle del último submit: qué tests pasaron, cuáles no, por qué
📊 Planilla de Google (link en #grading) Histórico completo de submissions, deadline tracking
🔔 Discord canal #grading Notificación en tiempo real de cada corrección

El leaderboard se actualiza automáticamente después de cada submit (workflow leaderboard.yml corre y publica a GitHub Pages). Si no ves tu nombre, esperá ~2 minutos.

Reglas mínimas

Workflow completo (paso a paso)
  1. Fork del repo del ejercicio (https://github.com/unlu-sd2026/exercise-XX-...).
  2. Clonar tu fork: git clone https://github.com/TU_USUARIO/exercise-XX-...
  3. Leer el README.md — la spec completa está ahí.
  4. Implementar reemplazando los TODO en src/, Dockerfile, docker-compose.yml.
  5. Probar local:
    docker compose up --build -d
    curl http://localhost:8080/health
    pytest tests/ -v
    docker compose down -v
  6. Push: git add -A && git commit -m "Implement solution" && git push
  7. Esperar el feedback (~1 min). El grader postea un comentario ✅/❌ en tu último commit con detalle de qué tests pasaron y cuáles no.

Para ver tu nota: comentario en el commit del fork · planilla de Google · leaderboard en https://unlu-sd2026.github.io/grader/.

Preguntas frecuentes

¿Cuántas veces puedo entregar? Hasta 5 submissions por ejercicio. Cada push cuenta. Probá local antes.

¿Puedo volver a pushear si fallé? Sí, mientras no pasaste el límite.

Los tests locales pasan pero el grader dice que fallé. El grader corre tests ocultos adicionales (más casos borde + buenas prácticas Docker). Leé el comentario del commit.

¿Puedo ver los tests ocultos? No, están en repo privado. El comentario del commit te dice qué falló y por qué.

¿Y si pusheo después del deadline? Período de gracia de 3 días marcado como LATE. Después, rechazo.

No tengo Docker. Instalá Docker Desktop (https://www.docker.com/products/docker-desktop/). Gratis para uso educativo.

Cualquier duda → canal #grading en Discord.


Cronograma — 9 actividades, 6 semanas

Cada actividad refuerza el TP que están viendo esa semana. No es carga extra — es práctica con corrección automática del concepto que ya están dando.

Clase 1 — Lunes 05/05/2026

01-node-registry — Registro de nodos por sockets

Servicio que registra nodos remotos vía sockets/HTTP, con health-check y persistencia simple. Calentamiento — refuerza lo de TP 1 (registro de contactos + cliente/servidor) ahora con corrección automática.


Clase 2 — Lunes 12/05/2026 · semana doble

02-dashboard — Dashboard de estado de nodos

API + UI mínima que muestra qué nodos están vivos, latencia, último heartbeat. Sirve de base para observabilidad.

03-rabbitmq — Patrones con RabbitMQ

Implementar producer/consumer, DLQ, retry con backoff. Es exactamente el Hit #0 del TP 3 con corrección automática.


Clase 3 — Lunes 19/05/2026 · semana doble

05-observability — Prometheus + Grafana sidecar

Instrumentar un servicio con /metrics, scraping de Prometheus, dashboard de Grafana versionado en repo.

06-cicd — Pipeline GitHub Actions + ghcr.io

Workflow que buildea, testea y pushea imagen Docker a ghcr.io con tags por SHA y latest. Gate de gitleaks obligatorio.


Clase 4 — Lunes 26/05/2026 · semana doble

07-hpa — Horizontal Pod Autoscaler

Configurar HPA contra una métrica custom (CPU, RPS o queue depth), demostrar que escala bajo carga sintética.

08-grpc — Servicio gRPC + Protobuf

Definir un .proto, generar stubs, exponer un servicio gRPC con health-check y reflection.


Clase 5 — Lunes 02/06/2026

09-leader-election — Algoritmo de Bully

Implementar elección de líder Bully en N nodos, simular caída del líder y recuperación.


Clase 6 — Lunes 09/06/2026 · cierre

10-gke — Deploy a Google Kubernetes Engine

Provisión de GKE con Terraform, deploy del Sobel distribuido del TP 3, health checks públicos. Cierre del programa de autograder.


Resumen del cronograma

Clase Fecha Ejercicios Refuerza
1 Lun 05/05 01-node-registry TP 1
2 Lun 12/05 02-dashboard · 03-rabbitmq TP 2 · TP 3 P1 Hit #0
3 Lun 19/05 05-observability · 06-cicd TP 3 P2 Hit #4 · CI/CD
4 Lun 26/05 07-hpa · 08-grpc TP 3 P2 Hit #3 · TP 1 P2
5 Lun 02/06 09-leader-election TP 2
6 Lun 09/06 10-gke TP 3 P2 Hit #2
Dom 15/06 Cierre del programa

Nota: sacamos 04-kubernetes del listado original — es redundante con TP 3 · Parte 0 (bootstrap del cluster) + Hit #1 (Sobel sobre k8s), que ya cubren ese contenido.


Arquitectura (para los curiosos)

┌────────────────────┐   push    ┌─────────────────────┐  POST   ┌──────────────────┐
│  Tu fork           │─────────→│  Sanity Workflow     │────────→│  Cloudflare      │
│  TU_USUARIO/       │          │  (GitHub Actions)    │         │  Worker          │
│  exercise-XX-...   │          │  corre tests visibles│         │  (webhook)       │
└────────────────────┘          └─────────────────────┘         └────────┬─────────┘
                                                                         │ dispara
                                                                         ▼
┌────────────────────┐          ┌─────────────────────┐         ┌──────────────────┐
│  Planilla Google   │◀─────────│  Grader             │────────→│  Discord         │
│  (resultados)      │  reporta │  (GitHub Actions)   │ avisa   │  (#grading)      │
└────────────────────┘          │                     │         └──────────────────┘
                                │  1. Clona tu fork   │
┌────────────────────┐          │  2. Clona tests     │         ┌──────────────────┐
│  Comment commit    │◀─────────│  3. Corre pytest    │         │  Email           │
│  ✅ 24/24 (100%)   │  comenta │  4. Reporta         │         │  (si ❌)         │
└────────────────────┘          └─────────────────────┘         └──────────────────┘