Error de Time Out en actualizar alumnos en Moodle

Buen día, se nos presenta una situación en la cual obtenemos un mensaje de error en la actualización de los alumnos inscriptos a comisiones cuando estas están vinculadas con cursos en la plataforma de educación virtual.
La vinculación de personas usando el comando de consola de Guaraní funciona correctamente.
La vinculación y actualización de los docentes desde la operación Administrar comisiones funciona correctamente.
Registros de logs del servidor web (error.log)

[Wed Jun 15 19:13:16.003828 2022] [proxy_fcgi:error] [pid 3516] [client 11.0.200.56:22198] AH01071: Got error 'PHP message: Database transaction aborted automatically in /var/www/html/moodle/webservice/rest/server.php'
[Wed Jun 15 19:16:10.435901 2022] [proxy_fcgi:error] [pid 2609] [client 11.0.200.56:22314] AH01071: Got error 'PHP message: Database transaction aborted automatically in /var/www/html/moodle/webservice/rest/server.php'
[Wed Jun 15 19:24:42.425640 2022] [proxy_fcgi:error] [pid 2730] [client 11.0.200.56:23670] AH01071: Got error 'PHP message: Debugging: You need to update your sql to include additional name fields in the user object. in \n* line 3548 of /lib/moodlelib.php: call to debugging()\n* line 6513 of /lib/moodlelib.php: call to fullname()\n* line 260 of /user/externallib.php: call to setnew_password_and_mail()\n* line 1452 of /webservice/lib.php: call to core_user_external::create_users()\n* line 1298 of /webservice/lib.php: call to webservice_base_server->execute()\n* line 44 of /webservice/rest/server.php: call to webservice_base_server->run()\nPHP message: Debugging: You need to update your sql to include additional name fields in the user object. in \n* line 3548 of /lib/moodlelib.php: call to debugging()\n* line 6213 of /lib/moodlelib.php: call to fullname()\n* line 6525 of /lib/moodlelib.php: call to email_to_user()\n* line 260 of /user/externallib.php: call to setnew_password_and_mail()\n* line 1452 of /webservice/lib.php: call to core_user_external::create_users()\n* line 1298 of /webservice/lib.php: call to webservice_base_server->execute()\n* line 44 of /webservice/rest/server.php: call to webservice_base_server->run()\nPHP message: Debugging: You need to update your sql to include additional name fields in the user object. in \n* line 3548 of /lib/moodlelib.php: call to debugging()\n* line 6269 of /lib/moodlelib.php: call to fullname()\n* line 6525 of /lib/moodlelib.php: call to email_to_user()\n* line 260 of /user/externallib.php: call to setnew_password_and_mail()\n* line 1452 of /webservice/lib.php: call to core_user_external::create_users()\n* line 1298 of /webservice/lib.php: call to webservice_base_server->execute()\n* line 44 of /webservice/rest/server.php: call to webservice_base_server->run()\nPHP message: Database transaction aborted automatically in /var/www/html/moodle/webservice/rest/server.php'

Registros de logs del servidor web (access.log):

11.0.201.217 - - [15/Jun/2022:19:13:01 +0000] "POST /webservice/rest/server.php HTTP/1.1" 200 2356 "-" "GuzzleHttp/6.5.5 curl/7.78.0 PHP/7.4.21"
11.0.201.217 - - [15/Jun/2022:19:13:01 +0000] "POST /webservice/rest/server.php HTTP/1.1" 200 13662 "-" "GuzzleHttp/6.5.5 curl/7.78.0 PHP/7.4.21"
11.0.200.56 - - [15/Jun/2022:19:13:15 +0000] "POST /webservice/rest/server.php HTTP/1.1" 200 484 "-" "GuzzleHttp/6.5.5 curl/7.78.0 PHP/7.4.21"
11.0.200.56 - - [15/Jun/2022:19:13:16 +0000] "POST /webservice/rest/server.php HTTP/1.1" 200 2356 "-" "GuzzleHttp/6.5.5 curl/7.78.0 PHP/7.4.21"
11.0.200.56 - - [15/Jun/2022:19:13:16 +0000] "POST /webservice/rest/server.php HTTP/1.1" 200 13662 "-" "GuzzleHttp/6.5.5 curl/7.78.0 PHP/7.4.21"
11.0.200.56 - - [15/Jun/2022:19:13:24 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.201.217 - - [15/Jun/2022:19:13:24 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.200.56 - - [15/Jun/2022:19:13:54 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.201.217 - - [15/Jun/2022:19:13:54 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.200.56 - - [15/Jun/2022:19:14:24 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.201.217 - - [15/Jun/2022:19:14:24 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.200.56 - - [15/Jun/2022:19:14:54 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.201.217 - - [15/Jun/2022:19:14:54 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.200.56 - - [15/Jun/2022:19:15:00 +0000] "POST /webservice/rest/server.php HTTP/1.1" 200 2356 "-" "GuzzleHttp/6.5.5 curl/7.78.0 PHP/7.4.21"
11.0.200.56 - - [15/Jun/2022:19:15:01 +0000] "POST /webservice/rest/server.php HTTP/1.1" 200 13662 "-" "GuzzleHttp/6.5.5 curl/7.78.0 PHP/7.4.21"
11.0.200.56 - - [15/Jun/2022:19:15:24 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.201.217 - - [15/Jun/2022:19:15:24 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.201.217 - - [15/Jun/2022:19:15:45 +0000] "GET /index.php?s=/Index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21 HTTP/1.1" 303 2086 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
11.0.200.56 - - [15/Jun/2022:19:15:54 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.201.217 - - [15/Jun/2022:19:15:54 +0000] "GET /README.txt HTTP/1.1" 200 881 "-" "ELB-HealthChecker/2.0"
11.0.200.56 - - [15/Jun/2022:19:14:00 +0000] "POST /webservice/rest/server.php HTTP/1.1" 200 484 "-" "GuzzleHttp/6.5.5 curl/7.78.0 PHP/7.4.21"

Registros de logs de Guaraní 3:

DEBUG][guarani] base_uri: http://****.com/webservice/rest/server.php      
[DEBUG][guarani] Usuarios a crear en Moodle:                                                                                    
[DEBUG][guarani] array (                                                                                                        
  0 =>                                                                                                                          
  array (                                                                                                                        
    'username' => '51000000',                                                                                                    
    'firstname' => '***',                                                                                                
    'lastname' => 'BLAS',                                                                                                        
    'email' => '*****',                                                                                          
    'idnumber' => 61571,                                                                                                        
    'createpassword' => 1,                                                                                                      
    'auth' => 'manual',                                                                                                          
    'lang' => 'es',                                                                                                              
    'timezone' => 'America/Argentina/Buenos_Aires',                                                                              
    'country' => 'AR',                                                                                                          
  ),                                                                                                                            
  1 =>                                                                                                                          
  array (                                                                                                                        
    'username' => '51000111',                                                                                                    
    'firstname' => '*****',                                                                                                
    'lastname' => 'KUMPI',                                                                                                      
    'email' => '****',                                                                                        
    'idnumber' => 61575,                                                                                                        
    'createpassword' => 1,                                                                                                      
    'auth' => 'manual',                                                                                                          
    'lang' => 'es',                                                                                                              
    'timezone' => 'America/Argentina/Buenos_Aires',
    'country' => 'AR',                                                                                                          
  ),                                                                                                                            
)                                                                                                                                
[ERROR][guarani] Server error: `POST http://***.com/webservice/rest/server
<html>
<head><title>504 Gateway Time-out</title></head>
<body>
<center><h1>504 Gateway Time-out</h1></center>
</body (truncated...)

Versión de G3: 3.20.0
Versión de Moodle: 3.10.11

Saludos
Damián

Hola Damian

La vinculación de personas usando el comando de consola lo que hace es encontrar coincidencias entre los sistemas y generar la vinculación de “Personas”

El botón de las comisiones que actualiza a los docentes es independiente de la que actualiza a los alumnos.
Lo primero que intenta es… a aquellas personas que no encuentra vinculada, las intenta insertar como usuarios en moodle para después vincularlos.
Después matricula a los alumnos en los cursos/aulas correspondientes.

Si te está fallando lo mas probable es
que tengas alumnos que compartan cuentas de mail con otras personas en la base o que tengas alumnos sin mails asignados (que son requisitos indispensables para la vinculación)

Para poder buscar donde se te rompe tendrías que:

En moodle si tenes acceso o si podes pedirle al administrador que haga lo siguiente para la prueba
Ir a Administración del sitio / Desarrollo / Depuración (debugging)
y poner el campo “Mensajes de Depuración” con la opción ‘DESARROLLADOR: mensajes extras de depuración Moodle para desarrolladores’

Una vez que tengas esto configurado, vas a Guaraní y en Administrar comisiones / Moodle, intentas actualizar los alumnos, esto te tiene que mostrar un mensaje de error con el detalle de usuario en el cual se rompe el envío. Así vas a saber cual es el usuario con problemas.

Una vez que tengas el usuario podes ir a Administrar personas y revisar si tiene mail asignado.

lo que podes hacer para ver si hay personas con el mismo mail es la siguiente consulta que podes correr si tenes acceso para hacer consultas SQL:

— obtener personas que comparten email con comision y platafomra—


SELECT  email, count(*) 
FROM mdp_personas_contactos 
WHERE email IN (SELECT  d.email FROM vw_personas as p 
left join mdp_personas_contactos as d ON p.persona = d.persona and contacto_tipo='MP'
where p.persona IN (select persona from sga_alumnos where  alumno in (
select alumno from vw_insc_cursada where comision= <COMISION>) 
)
 and p.persona not in (select persona from int_pv_usuarios where plataforma=$plataforma )) 
GROUP BY email 
HAVING COUNT(*) > 1

Una vez que tengas los mails repetidos asociados a la comisión podes ver que otra persona comparte esos mails


SELECT persona, apellido, nombres, tipo_documento , nro_documento, contacto_tipo, email
FROM vw_personas 
JOIN mdp_personas_contactos as mpc  on mpc.persona 0 vw_personas.persona
WHERE email in ( -- acá irian los emails obtenidos de la consulta anterior ----) 
ORDER BY email

No te olvides de volver la opción de Moodle para que no se hagan un montón los logs.

Cuando tengas esto escribime de nuevo y lo vemos.
Saludos!

Hola Damian, agrego a lo de Luciana:

¿son muchos alumnos inscriptos a comisiones los que se están mandando a Moodle? Ya que veo que el error es 504 Gateway Time-out, puede ser que Moodle este tardando mucho en procesar y responder la petición.

Quizás una posible solución seria incrementar el valor de la directiva max-execution-time en el PHP de Moodle.

Ver también:
https://stackoverflow.com/questions/16171132/how-to-increase-maximum-execution-time-in-php

saludos.
2

Gracias Luciana y Leonel.
Como datos adicionales:
Solo son 2 personas inscritas en la comisión.
Ambas tienen dirección de correo asignada a la comisión. Voy a ejecutar las consultas para ver que resultados me arroja.
Vamos a solicitar a los administradores de la plataforma y coordinar para configurar el nivel de log en esa.
Al actualizar docentes no arroja error.
Si los asociamos a otra plataforma la acción de actualizar alumnos funciona correctamente.
Gracias