Recolección de recursos de servicios remotos¶
GeoNode puede recopilar metadatos de recursos de múltiples servicios remotos.
La recolección es el proceso mediante el cual un catálogo de metadatos, es decir, un GeoNodo, puede conectarse a otros catálogos remotos y recuperar información sobre sus recursos. Este proceso suele realizarse de forma periódica, con el fin de mantener el catálogo local sincronizado con el remoto.
Cuando se configura correctamente, GeoNode se pondrá en contacto con el servicio remoto, extraerá una lista de recursos relevantes que se pueden recopilar y creará recursos locales para cada recurso remoto. También mantendrá los recursos sincronizados con el servicio remoto actualizándolos periódicamente.
De fábrica, GeoNode se entrega con soporte para la recolección de:
También es posible agregar soporte para fuentes de recolección adicionales.
Conceptos de recolección de GeoNode¶
Cuando se configura un harvester, GeoNode es capaz de usar su correspondiente harvester worker para contactar con el servicio remoto y generar una lista de recursos cosechables. Luego, el usuario puede seleccionar cuáles de esos recursos son de interés. Dependiendo de la frecuencia de actualización configurada, en algún momento posterior, el programador de cosecha creará nuevas sesiones de cosecha para crear recursos locales en GeoNode a partir de los recursos cosechables remotos que el usuario haya marcado como relevantes.
La descripción anterior utiliza los siguientes conceptos clave:
- harvester
Este es el objeto de configuración que se utiliza para parametrizar la recolección de datos de un servicio remoto. Es configurable en tiempo de ejecución y se conserva en la base de datos de GeoNode.
Los recolectores y sus propiedades se pueden administrar visitando la sección
Harvesting -> Harvestersdel área de administración de GeoNode, o visitando el punto final de la APIapi/v2/harvesters/con un usuario administrador.Entre otros parámetros, una cosechadora contiene:
- remote_url
URL base del servicio remoto que se está recopilando, por ejemplo
https://stable.demo.geonode.org- harvester_type
Tipo de trabajador de cosecha que se utilizará para realizar la cosecha. Consulte las secciones Concepto de trabajador de cosechadora y Trabajadores de cosechadora estándar a continuación para obtener más detalles. Ejemplo:
geonode.harvesting.harvesters.geonodeharvester.GeonodeUnifiedHarvesterWorker.- scheduling_enabled
Si la recolección se realizará periódicamente mediante el programador de recolección o no.
- harvesting_session_update_frequency
¿Con qué frecuencia (en minutos) se deben programar automáticamente las nuevas sesiones de recolección <harvesting-session-label>`?
- refresh_harvestable_resources_update_frequency
¿Con qué frecuencia (en minutos) se deben programar automáticamente las nuevas sesiones de actualización <refresh-session-label>`?
- default_owner
Qué usuario de GeoNode se convertirá en el propietario de los recursos recolectados
- harvest_new_resources_by_default
¿Se deben recolectar automáticamente los nuevos recursos remotos? Cuando se selecciona esta opción, el usuario no necesita especificar qué recursos recolectables <harvestable-resource-label>` se deben recolectar, ya que GeoNode los marcará automáticamente para que los recolecte.
- delete_orphan_resources_automatically
Los recursos huérfanos son aquellos que se han creado previamente mediante una operación de recolección, pero que GeoNode ya no puede encontrar en el servicio remoto que se está recolectando. ¿Se deben eliminar estos recursos de GeoNode automáticamente? Esto también se aplica cuando se elimina una configuración de recolección, en cuyo caso todos los recursos que se originaron a partir de esa recolección ahora se consideran huérfanos.
- harvester worker
Los trabajadores de cosecha implementan la recuperación de datos para tipos de servicios remotos concretos. Cada Harvester utiliza un trabajador específico, según el tipo de servicio remoto del que obtiene los datos. Los trabajadores de Harvester pueden aceptar sus propios parámetros de configuración adicionales.
Los trabajadores de cosecha se configuran como el atributo
harvester_typeen un harvester. Su configuración se configura como un objeto JSON en el atributoharvester_type_specific_configurationde la cosechadora.GeoNode se entrega con los siguientes trabajadores recolectores:
GeoNode - Permite la recolección de otras implementaciones de GeoNode
WMS - Permite la recolección de datos desde servidores WMS de OGC
Servicios REST de ArcGIS - Permite la recolección de datos desde los servicios REST de ArcGIS
También es posible agregar nuevos trabajadores recolectores. Esto permite que las implementaciones de GeoNode personalizadas agreguen compatibilidad con la recolección desde otras fuentes remotas.
- harvestable resource
Un recurso que está disponible en el servidor remoto. Los recursos que se pueden recolectar se conservan en la base de datos de GeoNode. Se crean durante las operaciones de actualización <update-harvestable-resources-action-label>`, cuando el trabajador del recolector interactúa con el servicio remoto para descubrir qué recursos remotos se pueden recolectar.
Los recursos cosechables se pueden administrar visitando la sección
Harvesting -> Harvestable resourcesdel área de administración de GeoNode, o visitando el punto final de APIapi/v2/harvesters/{harvester-id}/harvestable-resourcescon un usuario administrador.Para que el programador de recolección <harvesting-scheduler-label>` pueda recolectar un recurso, este debe tener su atributo
should_be_harvestedestablecido enTrue. Este atributo puede ser configurado manualmente por el usuario o puede ser configurado automáticamente por el trabajador del recolector, en caso de que el recolector correspondiente esté configurado conharvest_new_resources_by_default = True
- harvesting session
En GeoNode, el descubrimiento de recursos remotos y su recolección siempre se realiza en el marco de una sesión de recolección. Estas sesiones se almacenan en la base de datos de GeoNode y se pueden inspeccionar visitando la sección
Harvesting -> Asynchronous harvesting sessionsdel área de administración de GeoNode.Las sesiones de recolección se utilizan para realizar un seguimiento del progreso de la ejecución de las operaciones de recolección pertinentes. Se actualizan mientras se ejecuta cada operación. Existen dos tipos de sesiones:
- refresh session
Esta sesión se crea durante la operación de actualización de recursos aprovechables <update-harvestable-resources-action-label>. Tiene
type=discover-harvestable-resources. Durante una sesión de actualización, el trabajador del recolector descubre recursos remotos y crea sus respectivos recursos aprovechables <harvestable-resource-label> en la base de datos GeoNode. Una vez finalizada dicha sesión, el usuario puede inspeccionar los recursos aprovechables encontrados y marcar aquellos que sean relevantes conshould_be_harvester=True.
- harvesting session
Esta sesión se crea durante la operación de recolección de datos <perform-harvesting-action-label>. Tiene el tipo
type=harvesting. Durante una sesión de recolección de datos, el trabajador de recolección de datos crea o actualiza nuevos recursos de GeoNode en función de los recursos que se pueden recolectar y que se han configurado conshould_be_harvested=True.
Además del «tipo» mencionado anteriormente, las sesiones de recolección también llevan el atributo «estado», que proporciona contexto sobre el estado actual de la sesión (y, en consecuencia, de la operación de recolección subyacente).
- harvesting scheduler
El programador es responsable de iniciar nuevas operaciones de recolección <harvesting-operations-label> de manera automática. Periódicamente, el programador revisa la lista de recolectores existentes y verifica si es el momento de enviar una de las operaciones de recolección mencionadas en la siguiente sección.
La frecuencia de operación del programador se puede configurar definiendo una configuración
HARVESTER_SCHEDULER_FREQUENCY_MINUTES: el valor predeterminado es activar el programador cada 30 segundos.Nota
Dado que el programador de recolección solo verifica si hay trabajo que hacer una vez cada
xsegundos (el valor predeterminado es 30 segundos, como se mencionó anteriormente), generalmente habrá un retraso entre el momento en que se supone que se debe programar una operación de recolección y el momento en que realmente se programa. Además, el programador de recolección se implementa como una tarea de celery. Esto significa que, si el trabajador de celery está ocupado, eso también puede causar un retraso en la programación de las operaciones de recolección, ya que la tarea de celery del programador puede no activarse de inmediato.
Harvesting workflows¶
Hay dos posibles flujos de trabajo de recolección principales:
Cosecha continua¶
Este flujo de trabajo se basa en el programador de recolección para garantizar que los recursos recolectados se mantengan continuamente actualizados con sus contrapartes remotas.
El usuario crea un recolector y establece su atributo
scheduling_enabledenTrue;Cuando llega el momento, el programador de recolección llama a la operación de actualización de la lista de recursos que se pueden recolectar <update-harvestable-resources-action-label>. Como alternativa, el usuario puede llamar a esta operación manualmente la primera vez.
Cuando se realiza la operación anterior, el usuario recorre la lista de recursos cosechables generados <harvestable-resource-label> y, para cada recurso cosechable relevante, establece su atributo
should_be_harvestedenTrue. Alternativamente, si el recolector tiene su atributoharvest_new_resources_automaticallyestablecido enTrue, los recursos cosechables ya estarán marcados como para ser cosechados, sin requerir la intervención manual del usuario;Cuando llega el momento, el programador de recolección llama a la operación de recolección <perform-harvesting-action-label>. Esto hace que se recopilen los recursos remotos. Ahora, estos aparecen como recursos en el GeoNode local.
Cosecha única¶
Este flujo de trabajo se ejecuta en su mayoría de forma manual por el usuario.
El usuario crea un recolector y establece su atributo
scheduling_enabledenFalse;El usuario llama a la operación actualizar la lista de recursos aprovechables;
Una vez realizada la operación anterior, el usuario recorre la lista de recursos cosechables generados <harvestable-resource-label>` y, para cada recurso cosechable relevante, establece su atributo
should_be_harvestedenTrue;Luego, el usuario procede a llamar a la operación de recolección de datos <perform-harvesting-action-label>. Esto hace que se recopilen los recursos remotos. Ahora, estos aparecen como recursos en el GeoNode local.
Operaciones de cosechadora¶
Cada recolector de GeoNode puede realizar un conjunto finito de operaciones. Estas pueden realizarse de las siguientes formas:
De manera automatizada, se envía mediante el programador de recolección. La recolección automática solo se realiza cuando el harvester correspondiente tiene
scheduling_enabled=True;A pedido, por solicitud explícita del usuario. La ejecución a pedido se puede solicitar de dos maneras:
Seleccionando los recolectores relevantes en la sección
Harvesting -> Harvestersdel área de administración de GeoNode y luego seleccionando y ejecutando una acción desde el menú desplegable;Interactuando con la API REST de GeoNode, las acciones de cosecha se solicitan mediante el envío de solicitudes
HTTP PATCHal endpoint/api/v2/harvesters/{harvester-id}/. La carga útil de tales solicitudes debe especificar el estado correspondiente. Por ejemplo, al enviar una solicitud como:curl -X PATCH http:/localhost/api/v2/harvesters/1/ \ -H "Content-Type: application/json" \ -u "myuser:mypass" \ --data '{"status": "updating-harvestable-resources"}'
Estamos solicitando que el estado del cosechador cambie a
updating-harvestable-resources. Si el servidor acepta esta solicitud, se desencadenará la operación de actualización de la lista de recursos cosechables.Nota
El servidor no aceptará la solicitud de API si el estado actual del recolector no es
ready.
Mientras se realiza una acción, la propiedad status del recolector cambia de ready a cualquier estado relacionado con la acción que corresponda (como se indica a continuación). A medida que la operación termina de ejecutarse, el estado del recolector vuelve a cambiar a `ready. Si el recolector tiene un estado distinto de ready, entonces está ocupado en ese momento. Cuando un recolector está ocupado, no puede ejecutar otras operaciones; deberá esperar hasta que finalice la operación actual.
Comprobar si el servicio remoto está disponible para su operación¶
Esta operación hace que el recolector realice una comprobación de estado simple en el servicio remoto para verificar si responde correctamente. La respuesta se almacena en la propiedad remote_available del recolector. Esta operación se realiza en el mismo proceso del GeoNode principal (es decir, se ejecuta de manera sincrónica).
Cuando se activa, esta operación hace que el estado del recolector pase a verificando disponibilidad. Cuando la operación finaliza, el estado del recolector vuelve a ready.
La invocación a través del administrador de GeoNode se realiza seleccionando el comando Check availability of selected harvesters.
La invocación a través de la API REST de GeoNode se realiza emitiendo una solicitud HTTP PATCH con una carga útil que establece el estado del recolector.
Actualizar la lista de operaciones de recursos aprovechables¶
Esta operación hace que el recolector interactúe con el servicio remoto para descubrir qué recursos están disponibles para su recolección. Los recursos remotos existentes se guardan como recursos que se pueden recolectar.
Dado que esta operación puede tardar mucho tiempo en completarse (ya que no sabemos cuántos recursos pueden existir en el servicio remoto), se ejecuta mediante un proceso en segundo plano. GeoNode crea una nueva sesión de actualización <refresh-session-label> y la utiliza para realizar un seguimiento del progreso de esta operación.
Cuando se activa, esta operación hace que el estado del recolector cambie a updating-harvestable-resources. Cuando la operación finaliza, el estado del recolector vuelve a cambiar a ready.
La invocación a través del administrador de GeoNode se realiza seleccionando el comando Actualizar recursos aprovechables para los recolectores seleccionados.
La invocación a través de la API REST de GeoNode se realiza emitiendo una solicitud HTTP PATCH con una carga útil que establece el estado del recolector.
Realizar la operación de cosecha¶
Esta operación hace que el recolector verifique qué recursos recolectables están actualmente marcados como recolectables y luego, para cada uno, recolecta el recurso del servidor remoto.
Dado que esta operación puede tardar mucho tiempo en completarse (ya que no sabemos cuántos recursos pueden existir en el servicio remoto), se ejecuta mediante un proceso en segundo plano. GeoNode crea una nueva sesión de recolección <harvesting-session-label>` y la utiliza para realizar un seguimiento del progreso de esta operación.
Cuando se activa, esta operación hace que el estado del recolector cambie a recolección de recursos. Cuando la operación finaliza, el estado del recolector vuelve a cambiar a ready.
La invocación a través del administrador de GeoNode se realiza seleccionando el comando Perform harvesting on selected harvesters.
La invocación a través de la API REST de GeoNode se realiza emitiendo una solicitud HTTP PATCH con una carga útil que establece el estado del recolector.
Cancelar la operación de actualización de recursos aprovechables¶
Esta operación provoca que el cosechador aborte una operación en curso de actualización de la lista de recursos cosechables.
Cuando se activa, esta operación hace que el estado del recolector cambie a aborting-update-harvestable-resources. Cuando la operación finaliza, el estado del recolector vuelve a cambiar a ready.
La invocación a través del administrador de GeoNode se realiza seleccionando el comando Abort on-going update of harvestable resources for selected harvesters.
La invocación a través de la API REST de GeoNode se realiza emitiendo una solicitud HTTP PATCH con una carga útil que establece el estado del recolector.
Cancelar la operación de recolección¶
Esta operación provoca que el cosechador aborte una operación en curso de realización de la operación de cosecha.
Cuando se activa, esta operación hace que el estado del recolector cambie a aborting-performing-harvesting. Cuando la operación finaliza, el estado del recolector vuelve a cambiar a ready.
La invocación a través del administrador de GeoNode se realiza seleccionando el comando Abort on-going harvesting sessions for selected harvesters.
La invocación a través de la API REST de GeoNode se realiza emitiendo una solicitud HTTP PATCH con una carga útil que establece el estado del recolector.
Restablecer el funcionamiento de la cosechadora¶
Esta operación hace que el estado de la cosechadora vuelva a ser ready. Es útil principalmente para solucionar posibles errores, con el fin de desbloquear cosechadoras que pueden quedar atrapadas en un estado no procesable cuando ocurre algún error imprevisto.
Cuando se activa, esta operación hace que el estado del recolector pase a ready inmediatamente.
La invocación a través del administrador de GeoNode se realiza seleccionando el comando Reset harvester status.
Esta operación no se puede realizar a través de la API de GeoNode.
Trabajadores de cosechadoras estándar¶
Nota
Recuerda que, como se indicó anteriormente, un trabajador recolector se configura mediante la configuración de los atributos harvester_type y harvester_type_specific_configuration en harvester.
Además, el formato del atributo harvester_type_specific_configuration debe ser un objeto JSON.
Trabajador recolector de GeoNode¶
Este trabajador puede recopilar implementaciones de GeoNode remoto. Además de crear recursos locales recuperando metadatos remotos, este recolector también puede copiar conjuntos de datos remotos al GeoNode local. Esto significa que este recolector puede incluso usarse para generar instancias de GeoNode replicadas.
Esta cosechadora se puede utilizar configurando harvester_type=geonode.harvesting.harvesters.geonodeharvester.GeonodeUnifiedHarvesterWorker en la configuración de la cosechadora.
Reconoce los siguientes parámetros de harvester_type_specific_configuration:
- harvest_datasets
Si se deben recolectar o no recursos remotos del tipo «conjunto de datos». Valores aceptables: «true» (predeterminado) o «false».
- copy_datasets
Si se deben copiar recursos remotos del tipo
datasetal GeoNode local. Valores aceptables:trueofalse(el valor predeterminado).- harvest_documents
Si se deben recopilar o no recursos remotos de tipo
documento. Valores aceptables:true(predeterminado) ofalse.- copy_documents
Si se deben copiar recursos remotos de tipo
documentoal GeoNodo local. Valores aceptables:trueofalse(predeterminado).- resource_title_filter
Cadena que debe estar presente en el
títulode los recursos remotos para que se los reconozca como recursos aprovechables. Esto permite filtrar los recursos que no son relevantes. Valores aceptables: cualquier valor alfanumérico.Ejemplo: establecer esto en un valor de
"water"significaría que el recolector generaría recursos aprovechables para recursos remotos titulados water basins, Water territories, etc. El recolector no generaría recursos aprovechables para recursos remotos cuyo título no contenga la palabra water.- start_date_filter
Una cadena que especifica una fecha y hora que se utiliza para filtrar recursos por su fecha de inicio. Esto se analiza con dateutil.parser.parse(), lo que significa que acepta muchos formatos diferentes (por ejemplo 2021-06-31T13:04:05Z)
- end_date_filter
Similar a
start_date_filterpero utiliza el recurso ``end_date` como parámetro de filtro.- keywords_filter
Una lista de palabras clave que se utilizan para filtrar recursos remotos.
- categories_filter
Una lista de categorías que se utilizan para filtrar recursos remotos.
Trabajador de cosechadora WMS¶
Este trabajador puede recolectar información de servidores WMS OGC remotos.
Esta cosechadora se puede utilizar configurando harvester_type=geonode.harvesting.harvesters.wms.OgcWmsHarvester en la configuración de la cosechadora.
Reconoce los siguientes parámetros de harvester_type_specific_configuration:
- dataset_title_filter
Cadena que se utiliza para filtrar capas WMS remotas por su propiedad
título. Si el título de una capa remota contiene la cadena definida por este parámetro, el trabajador recolector reconoce la capa.
Trabajador recolector de servicios REST de ArcGIS¶
Este trabajador puede recopilar datos de catálogos de servicios REST de ArcGIS remotos.
Este trabajador puede reconocer dos tipos de remote_url:
URL del catálogo de servicios REST de ArcGIS. Esta URL suele terminar en
rest/services. Un catálogo puede exponer varios servicios diferentes. Este trabajador recolector puede descender a los servicios REST de ArcGIS disponibles y recuperar sus respectivos recursos. Ejemplo:https://sampleserver6.arcgisonline.com/arcgis/rest/services
URL del servicio de servicios REST de ArcGIS. Esta URL suele tener el formato
{base-url}/rest/services/{service-name}/{service-type}. Ejemplo:https://sampleserver6.arcgisonline.com/arcgis/rest/services/CharlotteLAS/ImageServer
Este trabajador recolector se puede utilizar configurando harvester_type=geonode.harvesting.harvesters.arcgis.ArcgisHarvesterWorker en la configuración del recolector.
Reconoce los siguientes parámetros de harvester_type_specific_configuration:
- harvest_map_services
Si se deben recopilar servicios del tipo MapServer. El valor predeterminado es
True.- harvest_image_services
Si se deben recopilar servicios del tipo ImageServer. El valor predeterminado es
True.- resource_name_filter
Cadena que se utiliza para filtrar capas WMS remotas por su propiedad
título. Si el nombre de una capa remota contiene la cadena definida por este parámetro, el trabajador recolector reconoce la capa.- service_names_filter
Una lista de nombres que se utilizan para filtrar el catálogo de ArcGIS remoto.
Creación de nuevos trabajadores de cosecha¶
Nuevos trabajadores de cosecha pueden ser creados escribiendo clases derivadas de geonode.harvesting.harvesters.base.BaseGeonodeHarvesterWorker. Esta clase define una interfaz abstracta que debe ser implementada. Todos los métodos decorados con abc.abstractmethod deben ser implementados en la clase personalizada del trabajador de cosecha. Estudia la implementación de las clases estándar de trabajadores de cosecha de GeoNode para obtener una idea de cómo implementar los personalizados.
Después de escribir una clase personalizada de trabajador de cosecha, esta se puede añadir a la lista de trabajadores de cosecha conocidos definiendo la configuración HARVESTER_CLASSES en GeoNode. Esta configuración es una lista de cadenas que contiene la ruta de la clase en Python para cada clase de trabajador de cosecha. Tiene un valor predeterminado de:
HARVESTER_CLASSES = [
"geonode.harvesting.harvesters.geonodeharvester.GeonodeUnifiedHarvesterWorker",
"geonode.harvesting.harvesters.wms.OgcWmsHarvester",
"geonode.harvesting.harvesters.arcgis.ArcgisHarvesterWorker",
]
Estas son las clases estándar de trabajadores de cosecha incluidas en GeoNode. Si se define esta configuración, su valor simplemente ampliará la lista predeterminada. Esto significa que no es posible desactivar las clases de trabajadores estándar, solo añadir nuevas.