Host no es válido en la conexión Moodle Guarani

Hola Leonel, nosotros estamos en la 3.17.0 asi que genial, En el mensaje anterior dice 3.17.1 pero fué un error, asi que buenisimo. De paso te consulto por este mensaje que cargué hace un rato en el foro por este tema… nos podrían dar una mano?

Un abrazo.

Hola, estoy probando la conexión entre Guarani y Moodle en la 3.18 y al querer vincular a los alumnos me da este error:
Falló la actualización de alumnos en Moodle (Mensaje Moodle: invalidparameter - Detectado valor de parámetro no válido)

En el log dice esto:

[DEBUG][guarani] Array
(
[exception] => invalid_parameter_exception
[errorcode] => invalidparameter
[message] => Detectado valor de par.metro no v.lido
[debuginfo] => Username already exists: XXXXXXXX (EL DNI DE UN ALUMNO)
)

El moodle con el que lo tengo relacionado ya tiene cursos y obviamente los alumnos y docentes ya existen, tengo que hacer algo más?
Para la 3.17 nos habían pasado un comando para correr asi vinculaba a los usuarios de guarani con los de moodle.
Hay que usarlo en la 3.18 también?
Saludos
Jacqui

Hola Jacqueline,

No se en que estado esta su instalación de la 3.18, por lo que veo en el error (Username already exists) ya existe un usuario en Moodle con un username dado (ej: pepe), si en SIU-Guaraní existe un usuario cuyo username también es “pepe” va a dar error.

La cuestión es porque ya existe ese usuario en Moodle? Se están conectado al mismo Moodle desde dos o mas instalaciones de SIU-Guaraní?

El Moodle en cuestión ya estuvo conectado con una instalación de SIU-Guaraní, y ahora lo están reconectando con otra instalación nueva?

saludos.
2

En la universidad ya existe un moodle hace años, con cursos y usuarios. Nunca se conectó a ningún guarani, sería la primera vez.
Yo conecté mi copia local de prueba a un modle de prueba con cursos y usuarios y quise actualizar los alumnos del curso de moodle relacionado desde guarani.
Ese alumno ya existe en moodle ya que como te decía, es un moodle con varios años de uso, es decir, están ya todos los alumnos de la universidad como usuarios practicamente.
No deberia detectar que existe, y sólo agregarlo en el curso>?

Hola Jacqueline,

Comprendo ahora!!!

Entonces deberías correr el comando para vincular los usuarios de Moodle con los de SIU-Guaraní:

<PATH-GESTION>$ bin/guarani vincular_usuarios_moodle

saludos.
2

lo corrí, puse manual y username, pero me tiró este error:

Falló la obtención de usuarios de Moodle (ver logs para más información).

en el log no hay nada.

Hola Jacqueline,

Parece que falla cuando llama al Web Service de Moodle core_user_get_users, es la función getUsuarios del archivo php/nucleo/moodle/moodle_nucleo.php.

Revisa el paso 4 de esta documentación, tenes dicha función habilitada en Moodle?

saludos.
2

Mi compañero que se ocupa de Moodle me dice que está bien configurado y que en el log figura que fue llamado ese servicio, sin error. Alguna otra cosa a mirar ?

Hola,

Si en el archivo /instalacion/i__desarrollo/p__guarani/logs/sistema.log no esta escribiendo el error, entonces vamos a hacer que se muestre por consola. En la función validarResponse del archivo /php/nucleo/moodle/moodle_nucleo.php, ni bien empieza la función agrega lo siguiente de forma temporal:

var_dump(print_r($response, true));

Ahora cada vez que corras el comando va a mostrar por consola cuando haya un error de comunicación con Moodle. Envíame lo que te muestra.

saludos.

2

no mostró nada …
solo el error de siempre en color rojo. te subo una imagen para que lo veas


error_vincular_UNGS.jpg

error_vincular_UNGS.png

Hola Jacqueline,

Estoy armando un caso para poder reproducir el problema. Enseguida te doy una respuesta.

saludos.
2

Hola Jacqueline,

Parece que no pusieron bien la linea que les pase en el mensaje anterior, yo la agregue y me muestra el mensaje de error en la consola (provoqué el error deshabilitando la función core_user_get_users en Moodle).

Te pediría que revises y vuelvas a intentar, porque dicho mensaje nos dirá puntualmente cual es el problema.

Pasos:

  1. Ir a la función validarResponse del archivo php/nucleo/moodle/moodle_nucleo.php.
  2. Al principio de todo agregar la siguiente linea: var_dump(print_r($response, true)); (no subir los cambios, es solo algo temporal para ver el error).
  3. Volver a ejecutar el comando.

En mi caso el error es “Access to the function core_user_get_users() is not allowed.”, pero en su caso debe ser otra causa.

saludos.
2


Screenshot from 2020-07-23 10-13-26.png

Screenshot from 2020-07-23 10-13-26.png

La línea está bien puesta, copié igualmente la tuya y la puse y en moodle no da error.
En el log de moodle figura que fue llamada la función sin error.
Probé eliminar la función en moodle y si me mostró el error que adjunto. Pero cuando la agrego, falla sin mostrar nada.


errror_moodle_UNGS.jpg

errror_moodle_UNGS.png

Hola Jacqueline, gracias por el dato!!!

Parece ser que lo que se rompe no es Moodle, sino la llamada que esta haciendo Guaraní.

Probemos con lo siguiente:

  1. Ir a la función getUsuarios del archivo php/nucleo/moodle/moodle_nucleo.php.
  2. Dentro del bloque catch agregar lo siguiente de forma temporal:

		} catch (Exception $e) {
			var_dump($e->getMessage());
			var_dump($e->getTraceAsString());
			toba::logger()->error($e);
		}

  1. Volve a correr el comando, y pasame lo que muestra por consola.

NOTA: Hay un problema en el cual los logs de consola no se están guardando, ya que esta información que te estoy pidiendo debería estar en los logs, vamos a ver de corregirlo.

saludos.
2

te dije que en Moodle funcionaba!
te lo paso acá ya que es largo:

Paginado: 500 usuario/s por bloque.
No incluye usuarios suspendidos en Moodle.
Obteniendo usuarios de Moodle…
string(424) “Error creating resource: [message] fopen(http://virtual.prueba.ungs.edu.ar/moodle/guarani/webservice/rest/server.php?wst oken=xxxxxxxxxxxx&moodlewsrestformat=json&wsfunction=core_user_get_users&criteria%5B0%5D%5Bkey%5D=auth&criteria%5 B0%5D%5Bvalue%5D=manual): failed to open stream: HTTP request failed!
[file] /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
[line] 324”
string(3287) “#0 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php(68): GuzzleHttp\Exception\Reques tException::wrapException(Object(GuzzleHttp\Psr7\Request), Object(RuntimeException))
#1 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(52): GuzzleHttp\Handler\StreamHandler->__invoke(Object (GuzzleHttp\Psr7\Request), Array)
#2 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(37): GuzzleHttp\Handler\Proxy::GuzzleHttp\Hand ler{closure}(Object(GuzzleHttp\Psr7\Request), Array)
#3 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Middleware.php(29): GuzzleHttp\PrepareBodyMiddleware->__invoke(Object(Gu zzleHttp\Psr7\Request), Array)
#4 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(70): GuzzleHttp\Middleware::GuzzleHttp{closure}( Object(GuzzleHttp\Psr7\Request), Array)
#5 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Middleware.php(59): GuzzleHttp\RedirectMiddleware->__invoke(Object(Guzzl eHttp\Psr7\Request), Array)
#6 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/HandlerStack.php(71): GuzzleHttp\Middleware::GuzzleHttp{closure}(Object (GuzzleHttp\Psr7\Request), Array)
#7 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Client.php(352): GuzzleHttp\HandlerStack->__invoke(Object(GuzzleHttp\Psr 7\Request), Array)
#8 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Client.php(163): GuzzleHttp\Client->transfer(Object(GuzzleHttp\Psr7\Requ est), Array)
#9 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Client.php(183): GuzzleHttp\Client->requestAsync(‘get’, Object(GuzzleHtt p\Psr7\Uri), Array)
#10 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Client.php(96): GuzzleHttp\Client->request(‘get’, ‘’, Array)
#11 /usr/local/proyectos/guarani/php/nucleo/moodle/moodle_nucleo.php(1106): GuzzleHttp\Client->__call(‘get’, Array)
#12 /usr/local/proyectos/guarani/php/extension_toba/guarani_modelo.php(2539): moodle_nucleo->getUsuarios(Array)
#13 /usr/local/proyectos/guarani/php/extension_toba/guarani_modelo.php(2629): guarani_modelo->obtener_usuarios_moodle_a_vincular()
#14 /usr/local/proyectos/guarani/php/extension_toba/guarani_modelo.php(2453): guarani_modelo->vincular_usuarios()
#15 /usr/local/proyectos/guarani/php/extension_toba/guarani_comando.php(501): guarani_modelo->vincular_usuarios_moodle(Array)
#16 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/comandos/comando_proyecto.php(87): guarani_comando->opcion__vi ncular_usuarios_moodle(Array)
#17 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/comando.php(90): comando_proyecto->ejecutar_opcion(‘opcion__vi ncula…’, Array)
#18 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/consola.php(78): comando->procesar()
#19 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/consola.php(55): consola->invocar_comando(‘proyecto’, Array)
#20 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/run.php(32): consola->run(Array)
#21 /usr/local/proyectos/guarani/vendor/siu-toba/framework/bin/launcher.php(31): require_once(‘/usr/local/proy…’)
#22 /usr/local/proyectos/guarani/vendor/siu-toba/framework/bin/toba(2): require_once(‘/usr/local/proy…’)
#23 {main}”
Fall▒ la obtenci▒n de usuarios de Moodle (ver logs para m▒s informaci▒n).

Hola Jacqueline, gracias por la información!!!

Ya se a que se puede deber esto:

  1. Tiempo de respuesta de Moodle, si se trata de muchos usuarios Moodle puede tardar mucho en responder el webservice, y esto hace que se produzca un timeout. Estos valores de timeout se pueden incrementar en los servidores donde están instalados Guaraní y Moodle.

  2. También revisar punto 9 de la documentación.

  3. Otra cosa que observo es que Moodle esta devolviendo lo siguiente:


debuginfo	"users => Detectado valor de respuesta no válido: username => Detectado valor de respuesta no válido: Invalid external api response: the value is \"28960853 \" of PHP type \"string\", the server was expecting \"username\" type"

Si te fijas bien tenes un usuario en Moodle cuyo Nombre de usuario es "28960853 " (con un espacio al final). Esto hace que se rompa la respuesta de Moodle, ya que dicho campo no puede contener espacios.

La pregunta es, como llego ese espacio allí? ya que Moodle te valida en el alta de la persona. ustedes dieron de alta via CSV?

saludos.
4

Voy a revisar esos datos que me decís en moodle.
Te voy adelantando que si se suben los usuarios en Mooodle via CSV

Hola Jacqueline,

Dale, ponele mas énfasis al punto 3 que creo que es el mas importante (puse mal el orden).

En cuanto al Nombre de usuario en Moodle, el mismo se encuentra en la tabla mdl_user columna username, se podría correr una query como sigue para sacar los espacios:


UPDATE mdl_user
SET username = trim(username);

saludos.
2

Corrí la consulta para eliminar los espacios en blanco en los usuarios y volví a correr el comando. El error es el siguiente:

Paginado: 500 usuario/s por bloque.
No incluye usuarios suspendidos en Moodle.
Obteniendo usuarios de Moodle…
string(424) “Error creating resource: [message] fopen(http://virtual.prueba.ungs.edu.ar/moodle/guarani/webservice/rest/server.php?w stoken=xxxxxxxxxxxxxxxx&moodlewsrestformat=json&wsfunction=core_user_get_users&criteria%5B0%5D%5Bkey%5D=auth&criter ia%5B0%5D%5Bvalue%5D=manual): failed to open stream: HTTP request failed!
[file] /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
[line] 324”
string(3287) “#0 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php(68): GuzzleHttp\Exception\Requ estException::wrapException(Object(GuzzleHttp\Psr7\Request), Object(RuntimeException))
#1 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(52): GuzzleHttp\Handler\StreamHandler->__invoke(Obje ct(GuzzleHttp\Psr7\Request), Array)
#2 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(37): GuzzleHttp\Handler\Proxy::GuzzleHttp\Ha ndler{closure}(Object(GuzzleHttp\Psr7\Request), Array)
#3 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Middleware.php(29): GuzzleHttp\PrepareBodyMiddleware->__invoke(Object( GuzzleHttp\Psr7\Request), Array)
#4 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(70): GuzzleHttp\Middleware::GuzzleHttp{closure }(Object(GuzzleHttp\Psr7\Request), Array)
#5 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Middleware.php(59): GuzzleHttp\RedirectMiddleware->__invoke(Object(Guz zleHttp\Psr7\Request), Array)
#6 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/HandlerStack.php(71): GuzzleHttp\Middleware::GuzzleHttp{closure}(Obje ct(GuzzleHttp\Psr7\Request), Array)
#7 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Client.php(352): GuzzleHttp\HandlerStack->invoke(Object(GuzzleHttp\P sr7\Request), Array)
#8 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Client.php(163): GuzzleHttp\Client->transfer(Object(GuzzleHttp\Psr7\Re quest), Array)
#9 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Client.php(183): GuzzleHttp\Client->requestAsync(‘get’, Object(GuzzleH ttp\Psr7\Uri), Array)
#10 /usr/local/proyectos/guarani/vendor/guzzlehttp/guzzle/src/Client.php(96): GuzzleHttp\Client->request(‘get’, ‘’, Array)
#11 /usr/local/proyectos/guarani/php/nucleo/moodle/moodle_nucleo.php(1106): GuzzleHttp\Client->call(‘get’, Array)
#12 /usr/local/proyectos/guarani/php/extension_toba/guarani_modelo.php(2539): moodle_nucleo->getUsuarios(Array)
#13 /usr/local/proyectos/guarani/php/extension_toba/guarani_modelo.php(2629): guarani_modelo->obtener_usuarios_moodle_a_vincular()
#14 /usr/local/proyectos/guarani/php/extension_toba/guarani_modelo.php(2453): guarani_modelo->vincular_usuarios()
#15 /usr/local/proyectos/guarani/php/extension_toba/guarani_comando.php(501): guarani_modelo->vincular_usuarios_moodle(Array)
#16 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/comandos/comando_proyecto.php(87): guarani_comando->opcion
vincular_usuarios_moodle(Array)
#17 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/comando.php(90): comando_proyecto->ejecutar_opcion('opcion
vincula…‘, Array)
#18 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/consola.php(78): comando->procesar()
#19 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/consola.php(55): consola->invocar_comando(‘proyecto’, Array)
#20 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/consola/run.php(32): consola->run(Array)
#21 /usr/local/proyectos/guarani/vendor/siu-toba/framework/bin/launcher.php(31): require_once(’/usr/local/proy…‘)
#22 /usr/local/proyectos/guarani/vendor/siu-toba/framework/bin/toba(2): require_once(’/usr/local/proy…')
#23 {main}”

Hola Jacqueline,

Por ahora podes quitar ese var_dump que agregamos, fíjate que en tus mensajes fui borrando el token que es un dato sensible, igual veo que te trata de un entorno de prueba.

El error ahora es este:


debuginfo	"users => Detectado valor de respuesta no válido: username => Detectado valor de respuesta no válido: Invalid external api response: the value is \"IN0001\" of PHP type \"string\", the server was expecting \"username\" type"

Tenes un usuario cuyo Nombre de usuario contiene mayúsculas (IN0001), podes hacer esto para corregirlo:


UPDATE mdl_user
SET username = lower(username);

También tene en cuenta lo del timeout, ya que tarda bastante el Web Service de Moodle, parecen ser muchos usuarios:
http://virtual.prueba.ungs.edu.ar/moodle/guarani/webservice/rest/server.php?wstoken=xxx&moodlewsrestformat=json&wsfunction=core_user_get_users&criteria[0][key]=auth&criteria[0][value]=manual

saludos.
2


Selection_001.png

Selection_001.png