El programa sc_deliver, encargado de cerrar una entrega y tomar el último
intento exitoso como entrega final a corregir, corre todos los días a las
-23:30hs, puede modificarlo en el archivo /etc/cron.d/sercom.
-Puede ser necesario modificarlo si el corrector es muy lento compilando y no
-llega terminar de compilar las cosas que, normalmente, se terminan de entregar a
-las 20:00hs.
+20:30hs, puede modificarlo en el archivo /etc/cron.d/sercom.
Tambien puede cambiar la frecuencia de rotación de logs en
/etc/logrotate.d/sercom.
# Ejecuta sc_deliver todos los días después a las 23:30hs
# m h dom mon dow user command
-30 23 * * * sercom /usr/sbin/sc_deliver
+30 20 * * * sercom /usr/sbin/sc_deliver
# -*- encoding: iso-8859-1 -*-
# vim: set et sw=4 sts=4 :
+# Módulos estándar
+import time
# Módulos locales
import sercom
import sercom.sqlo
# Utilizo el directorio de datos como base para todos los SQLObjects
sercom.sqlo.dir_base = conf.get('general', 'data_dir')
+# Atajo
+intervalo = float(conf.get('general', 'intervalo'))
+
# Busco entregas pendientes
for entrega in Entrega.getPendientes(conn):
+ while Intento.faltaCompilar(entrega, conn):
+ time.sleep(intervalo)
log.info('Procesando entrega %d.%d.%d', entrega.curso.curso,
entrega.nroEjercicio, entrega.entrega)
for inscripto in Inscripto.selectBy(cursoID=entrega.cursoID, activo=True,
except IndexError:
return None
+ @classmethod
+ def faltaCompilar(cls, entrega, connection=None):
+ no_compilados = cls.selectBy(entregaID=entrega.id, compila=None,
+ connection=connection).count()
+ no_probados = cls.selectBy(entregaID=entrega.id, compila=True,
+ finPruebas=None, connection=connection).count()
+ return no_compilados + no_probados
+
def _get_path(self):
curso = self.inscripto.curso
entrega = self.entrega