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:

  1. Otras instancias remotas de GeoNode;

  2. Servidores WMS OGC;

  3. Servicios REST de ArcGIS.

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 -> Harvesters del área de administración de GeoNode, o visitando el punto final de la API api/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_type en un harvester. Su configuración se configura como un objeto JSON en el atributo harvester_type_specific_configuration de la cosechadora.

GeoNode se entrega con los siguientes trabajadores recolectores:

  1. GeoNode - Permite la recolección de otras implementaciones de GeoNode

  2. WMS - Permite la recolección de datos desde servidores WMS de OGC

  3. 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 resources del área de administración de GeoNode, o visitando el punto final de API api/v2/harvesters/{harvester-id}/harvestable-resources con un usuario administrador.

Para que el programador de recolección <harvesting-scheduler-label>` pueda recolectar un recurso, este debe tener su atributo should_be_harvested establecido en True. 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 con harvest_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 sessions del á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 con should_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 con should_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 x segundos (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:

  1. Cosecha continua

  2. Cosecha única

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.

  1. El usuario crea un recolector y establece su atributo scheduling_enabled en True;

  2. 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.

  3. 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_harvested en True. Alternativamente, si el recolector tiene su atributo harvest_new_resources_automatically establecido en True, los recursos cosechables ya estarán marcados como para ser cosechados, sin requerir la intervención manual del usuario;

  4. 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.

  1. El usuario crea un recolector y establece su atributo scheduling_enabled en False;

  2. El usuario llama a la operación actualizar la lista de recursos aprovechables;

  3. 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_harvested en True;

  4. 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:

  1. 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;

  2. A pedido, por solicitud explícita del usuario. La ejecución a pedido se puede solicitar de dos maneras:

    1. Seleccionando los recolectores relevantes en la sección Harvesting -> Harvesters del área de administración de GeoNode y luego seleccionando y ejecutando una acción desde el menú desplegable;

    2. Interactuando con la API REST de GeoNode, las acciones de cosecha se solicitan mediante el envío de solicitudes HTTP PATCH al 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 dataset al GeoNode local. Valores aceptables: true o false (el valor predeterminado).

harvest_documents

Si se deben recopilar o no recursos remotos de tipo documento. Valores aceptables: true (predeterminado) o false.

copy_documents

Si se deben copiar recursos remotos de tipo documento al GeoNodo local. Valores aceptables: true o false (predeterminado).

resource_title_filter

Cadena que debe estar presente en el título de 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_filter pero 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:

  1. 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
    
  2. 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.