define('R_ERR', 0);
define('R_OK', 1);
-$LOGLEVEL = L_ALL;
+$LOGLEVEL = DEBUG;
$gconf = $CONF['general'];
// Sin cesar.
while (1) {
if (!($mail = $intento->proximo_a_probar())) {
- logs('No hay intento para probar', L_DBG);
+ logs('No hay intento para probar', DEBUG);
sleep($gconf['intervalo']);
continue;
}
enviar_respuesta_error_log($mail, 'Error al cambiar al directorio del tp', $intento);
continue;
}
- logs("Cambio de directorio '$currdir' -> '$intento_dir'", L_DBG);
- logs('Ejecutando el comando: make -f '.escapeshellarg($makefile), L_DBG);
+ logs("Cambio de directorio '$currdir' -> '$intento_dir'", DEBUG);
+ logs('Ejecutando el comando: make -f '.escapeshellarg($makefile), DEBUG);
if (exec_get_info('make -f '.escapeshellarg($makefile), $ret, $err, $out)) {
if ($ret) {
logs('Error al compilar');
- logs("Código de retorno: $ret, mensaje: $err)", L_DBG);
+ logs("Código de retorno: $ret, mensaje: $err)", DEBUG);
//XXX $intento->informar_compilacion(false);
enviar_respuesta(R_ERR, $mail, "ERROR AL COMPILAR!\n\n$err\n\nCódigo de retorno: $ret\n", $intento);
continue;
// comienza la ejecución de casos de prueba
while ($prueba = $intento->pedir_caso_de_prueba()) {
- logs('Prueba: ' . $prueba->to_line(), L_DBG);
+ logs('Prueba: ' . $prueba->to_line(), DEBUG);
// ejecuta con fork
$pid = pcntl_fork();
if ($pid == -1) {
continue 2;
} elseif ($pid) {
// Estamos en el padre, controlamos el tiempo.
- logs("En el padre (hijo: $pid)", L_DBG);
+ logs("En el padre (hijo: $pid)", DEBUG);
// TODO controlar tiempo.
pcntl_waitpid($pid, $exitcode);
- logs("Fin de ejecución de caso de prueba (hijo: $pid, ret: $exitcode)", L_DBG);
+ logs("Fin de ejecución de caso de prueba (hijo: $pid, ret: $exitcode)", DEBUG);
$stderr = false; // FIXME ver si salida de error es vacia.
if ($exitcode or $stderr) {
- logs('Comando ejecutado ERROR', L_DBG);
+ logs('Comando ejecutado ERROR', DEBUG);
if ($ret) {
$msg = "El programa salió con código de error $ret";
$msgs[] = $msg;
- logs($msg, L_DBG);
+ logs($msg, DEBUG);
}
if ($stderr) {
$msg = "El programa imprimió mensajes en la salida de error: '$stderr'";
$msgs[] = $msg;
- logs($msg, L_DBG);
+ logs($msg, DEBUG);
}
$msg = join("\n", $msgs);
$intento->resultado_de_prueba($prueba, false, $msg);
enviar_respuesta(R_ERR, $mail, $msg, $intento);
exit(0); // salgo ok del hijo
} else { // Sin errores en la ejecución.
- logs('Comando ejecutado OK', L_DBG);
+ logs('Comando ejecutado OK', DEBUG);
// TODO
$salidas = array();
foreach ($prueba->salidas as $salida) {
$salidas[$salida] = file_get_contents($salida);
}
}
- logs('Salidas: ' . var_export($salidas, true), L_DBG);
+ logs('Salidas: ' . var_export($salidas, true), DEBUG);
$intento->resultado_de_prueba($prueba, true, 'Salidas: ' . var_export($salidas, true));
enviar_respuesta(R_ERR, $mail, 'Salidas: ' . var_export($salidas, true), $intento);
exit(0); // salgo ok del hijo
}
} else {
// Estamos en el hijo, corremos en chroot.
- logs('En el hijo', L_DBG);
+ logs('En el hijo', DEBUG);
// Hago chroot.
if (!@chroot('chroot')) {
$intento->resultado_de_prueba($prueba, false, 'Error al hacer chroot');
enviar_respuesta_error_log($mail, 'Error al hacer chroot', $intento);
exit(1); // salgo del hijo
}
- logs('Chrooteado, cwd = '.getcwd(), L_DBG);
+ logs('Chrooteado, cwd = '.getcwd(), DEBUG);
if (!@posix_setuid($usrinfo['uid'])) {
$intento->resultado_de_prueba($prueba, false, "Error al cambiar al uid '{$usrinfo['uid']}'");
enviar_respuesta_error_log($mail, "Error al cambiar al uid '{$usrinfo['uid']}'", $intento);
// TODO poner stdout y stderr en archivos para hacer diff o hacer diffs en memoria
$stdout = null;
if (in_array('stdout', $prueba->salidas)) $stdout = '';
- logs('Se ejecutará: chroot chroot /tp ' . escapeshellarg($prueba->params), L_DBG);
+ logs('Se ejecutará: chroot chroot /tp ' . escapeshellarg($prueba->params), DEBUG);
if (!pcntl_exec('/redir', array('tp', 'stdin', 'stdout', 'stderr', '/tp', '0', $prueba->params))) {
logserr('No se pudo ejecutar el comando');
$intento->resultado_de_prueba($prueba, false, 'No se pudo ejecutar el tp');
function enviar_respuesta($tipo, $to, $mensaje = '', $intento = null) {
$mconf = $GLOBALS['CONF']['mail'];
- $subject = $mconf['prefijo'] . ' Prueba ';
+ $subject = '[' . $NAME . '] Prueba ';
if ($tipo == R_OK) $estado = 'OK';
else $estado = 'ERROR';
$subject .= $estado;
$body .= "Estado: $estado\n";
if ($mensaje) $body .= "\n$mensaje\n";
if ($intento) $body .= "\n" . $intento->__toString() . "\n";
- logs("Envío de mail '$subject' a '$to'\n$body\n", L_DBG);
+ logs("Envío de mail '$subject' a '$to'\n$body\n", DEBUG);
$headers = <<<EOT
From: {$mconf['from']}
-Reply-To: {$mconf['mail_admin']}
-X-Mailer: {$mconf['mailer']}
+Reply-To: {$mconf['admin']}
+X-Mailer: $NAME $VERSION
X-Priority: 5
EOT;
mail($to, $subject, $body, $headers);
- mail($GLOBALS['CONF']['mail_admin'], $subject, $body, $headers);
+ //mail($mconf['admin'], $subject, $body, $headers);
return true;
}
function enviar_respuesta_error_log($to, $msg = '', $intento = null) {
logserr($msg);
enviar_respuesta(R_ERR, $to, "ERROR: $msg\n\nSe envió un mail al administrador para revisar el problema.\n", $intento);
- enviar_respuesta(R_ERR, $GLOBALS['CONF']['mail']['mail_admin'], $msg, $intento);
+ enviar_respuesta(R_ERR, $GLOBALS['CONF']['mail']['admin'], $msg, $intento);
}
?>
\ No newline at end of file