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 GeoNode, puede conectarse a otros catálogos remotos y recuperar información sobre sus recursos.Este proceso generalmente se realiza periódicamente, para mantener el catálogo local sincronizado con el remoto.

Cuando esté configurado adecuadamente, GeoNode se comunicará con el servicio remoto, extraerá una lista de recursos relevantes que se pueden recolectar y creará recursos locales para cada recurso remoto.También mantendrá los recursos sincronizados con el servicio remoto actualizándolos periódicamente.

GeoNode viene listo para usar con soporte para recolectar de:

  1. Otras instancias remotas de GeoNode;

  2. Servidores OGC WMS;

  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 recolector, GeoNode puede utilizar su trabajador recolector correspondiente para comunicarse con el servicio remoto y generar una lista de recursos cosechables.Luego, el usuario puede seleccionar cuáles de esos recursos son de su interés.Dependiendo de su frecuencia de actualización configurada, algún tiempo después, el programador de recolección creará nuevas sesiones de recolección para crear recursos GeoNode locales a partir de los recursos cosechables remotos que el usuario había 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 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 Cosecha -> Cosechadores del área de administración de GeoNode, o visitando la API api/v2/harvesters/ punto final 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 cosechador que será utilizado para realizar la cosecha.Consulte las secciones Concepto de trabajador cosechador y trabajadores cosechadores estándar a continuación para obtener más detalles.Ejemplo: geonode.harvesting.harvesters.geonodeharvester.GeonodeUnifiedHarvesterWorker.

scheduling_enabled

Si la cosecha debe ser realizada periódicamente por el programador de cosecha o no.

harvesting_session_update_frequency

¿Con qué frecuencia (en minutos) se deben programar automáticamente nuevas sesiones de cosecha?

refresh_harvestable_resources_update_frequency

¿Con qué frecuencia (en minutos) se deben programar automáticamente nuevas refresh sesiones?

propietario_predeterminado

¿Qué usuario de GeoNode será el propietario de los recursos recolectados?

harvest_new_resources_by_default

¿Deberían recolectarse automáticamente nuevos recursos remotos?Cuando se selecciona esta opción, el usuario no necesita especificar qué recursos cosechables se deben recolectar, ya que GeoNode los marcará automáticamente para su recolección.

delete_orphan_resources_automatically

Los recursos huérfanos son aquellos que se crearon previamente mediante una operación de recolección pero que GeoNode ya no puede encontrar en el servicio remoto que se está recolectando.¿Deberían eliminarse estos recursos de GeoNode automáticamente?Esto también se aplica cuando se elimina la configuración de un recolector, en cuyo caso todos los recursos que se originaron en ese recolector ahora se consideran huérfanos.

harvester worker

Los trabajadores de Harvester implementan la recuperación para tipos concretos de servicios remotos.Cada recolector utiliza un trabajador específico, según el tipo de servicio remoto del que obtiene datos.Los trabajadores recolectores pueden aceptar sus propios parámetros de configuración adicionales.

Los trabajadores recolectores se configuran como el atributo harvester_type en harvester.Su configuración se establece como un objeto JSON en el atributo harvester_type_specific_configuration del recolector.

GeoNode se envía con los siguientes trabajadores recolectores:

  1. GeoNode: permite la recolección de otras implementaciones de GeoNode

  2. WMS: permite la recolección desde servidores OGC WMS

  3. Servicios REST de ArcGIS: permite la recolección de servicios REST de ArcGIS

También es posible agregar nuevos trabajadores recolectores.Esto permite que las implementaciones personalizadas de GeoNode agreguen soporte para la recolección de otras fuentes remotas.

harvestable resource

Un recurso que está disponible en el servidor remoto.Los recursos cosechables persisten en GeoNode DB.Se crean durante operaciones de actualización, cuando el trabajador 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 Cosecha -> Recursos cosechables del área de administración de GeoNode, o visitando la API api/v2/harvesters/{harvester-id}/harvestable-resources punto final con un usuario administrador.

Para ser cosechado por el programador de cosecha, un recurso cosechable 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 dentro del alcance 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 Cosecha -> Sesiones de recolección asincrónicas del área de administración de GeoNode.

Las sesiones de cosecha se utilizan para realizar un seguimiento del progreso de la ejecución de las operaciones de cosecha relevantes.Se actualizan mientras se ejecuta cada operación.Hay dos tipos de sesiones:

refresh session

Esta sesión se crea durante la operación actualización de recursos cosechables.Tiene tipo=descubrir-recursos-cosechables.Durante una sesión de actualización, el trabajador recolector descubre recursos remotos y crea sus respectivos harvestable resources en GeoNode DB.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 realizar la operación de recolección.Tiene tipo=cosecha.Durante una sesión de recolección, el trabajador recolector crea o actualiza nuevos recursos de GeoNode en función de los recursos cosechables que se han configurado con should_be_harvested=True.

Además del «tipo» antes mencionado, 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 de forma automatizada.Periódicamente, el programador revisa la lista de cosechadoras existentes, verificando si es momento de despachar alguna de las operaciones de cosecha 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 programará una operación de recolección y el momento real en que realmente se programa.Además, el programador de cosecha se implementa como una tarea de apio.Esto significa que, si el trabajador del apio está ocupado, eso también puede causar un retraso en la programación de las operaciones de cosecha, ya que es posible que la tarea del apio del programador no se active inmediatamente.

Harvesting workflows

Hay dos flujos de trabajo de recolección principales posibles:

  1. Cosecha continua

  2. Cosecha única

Cosecha continua

Este flujo de trabajo se basa en 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 actualización de la lista de recursos cosechables.Alternativamente, el usuario puede llamar esta operación manualmente la primera vez.

  3. Cuando finaliza la operación anterior, el usuario revisa la lista de recursos cosechables generados 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 cosecharse, sin requerir la intervención manual del usuario;

  4. Cuando llega el momento, el programador de recolección llama a realizar operación de recolección.Esto hace que se recopilen los recursos remotos.Estos ahora aparecen como recursos en el GeoNode local.

Cosecha única

Este flujo de trabajo lo ejecuta principalmente el usuario de forma manual.

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

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

  3. Cuando finaliza la operación anterior, el usuario revisa la lista de recursos cosechables generados y, para cada recurso cosechable relevante, establece su atributo should_be_harvested en True;

  4. Luego, el usuario procede a llamar a realizar operación de recolección.Esto hace que se recopilen los recursos remotos.Estos ahora aparecen como recursos en el GeoNode local.

Operaciones de cosechadora

Cada recolector GeoNode puede realizar un conjunto finito de operaciones.Estos se pueden realizar ya sea:

  1. De forma automatizada, siendo enviada por el programador de recolección.La recolección automatizada solo se realiza cuando el harvester correspondiente tiene scheduling_enabled=True;

  2. Bajo demanda, por petición explícita del usuario.La ejecución bajo demanda se puede solicitar de dos maneras:

    1. Seleccionando los recolectores relevantes en la sección Cosecha -> Cosechadores 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 del Harvester se solicitan mediante la emisión de solicitudes HTTP PATCH al /api/v2/harvesters/{harvester-id}/ punto final.La carga útil de dichas solicitudes debe especificar el estado correspondiente.Por ejemplo, emitiendo 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 pidiendo que el estado del recolector se cambie a «actualizando-recursos-cosechables».Si el servidor acepta esta solicitud, se activa la operación 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 «listo».

Mientras se realiza una acción, la propiedad «estado» del recolector pasa de «listo» a cualquier estado relacionado con la acción que sea apropiado (como se indica a continuación).Cuando la operación finaliza su ejecución, el estado del recolector vuelve a estar «listo».Si el estado de la cosechadora no es «listo», significa que actualmente está ocupado.Cuando una cosechadora está ocupada no puede ejecutar otras operaciones; deberá esperar hasta que finalice la operación actual.

Compruebe si el servicio remoto está disponible en funcionamiento.

Esta operación hace que el recolector realice una verificació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 forma sincrónica).

Cuando se activa, esta operación hace que el estado del recolector pase a «verificación de disponibilidad».Cuando finaliza la operación, el estado de la cosechadora vuelve a «listo».

La invocación a través del administrador de GeoNode se realiza seleccionando el comando Verificar disponibilidad de 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.

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 ser recolectados.Los recursos remotos existentes se guardan como harvestable resources.

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 refresh session y la usa para rastrear el progreso de esta operación.

Cuando se activa, esta operación hace que el estado del recolector pase a «actualización de recursos cosechables».Cuando finaliza la operación, el estado de la cosechadora vuelve a «listo».

La invocación a través del administrador de GeoNode se realiza seleccionando el comando Actualizar recursos cosechables para 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 operación de recolección.

Esta operación hace que el recolector verifique qué recursos cosechables están actualmente marcados como cosechables y luego, para cada uno, recolecte 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 cosecha y la usa para rastrear el progreso de esta operación.

Cuando se activa, esta operación hace que el estado del recolector pase a «recolección de recursos».Cuando finaliza la operación, el estado de la cosechadora vuelve a «listo».

La invocación a través del administrador de GeoNode se realiza seleccionando el comando Realizar recolección en 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.

Cancelar la actualización de la operación de recursos aprovechables

Esta operación hace que el recolector cancele una operación actualización de la lista de recursos cosechables en curso.

Cuando se activa, esta operación hace que el estado del recolector pase a abortando-actualización-recursos-cosechables.Cuando finaliza la operación, el estado de la cosechadora vuelve a «listo».

La invocación a través del administrador de GeoNode se realiza seleccionando el comando Abortar la actualización en curso de los 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.

Cancelar operación de recolección

Esta operación hace que la cosechadora cancele una realizar operación de recolección en curso.

Cuando se activa, esta operación hace que el estado de la cosechadora pase a «abortando-realizando-cosecha».Cuando finaliza la operación, el estado de la cosechadora vuelve a «listo».

La invocación a través del administrador de GeoNode se realiza seleccionando el comando Abortar sesiones de recolección en curso para 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.

Restablecer la operación de la cosechadora

Esta operación hace que el estado de la cosechadora se restablezca a «listo».Es principalmente útil para solucionar errores potenciales, con el fin de desbloquear recolectores que pueden quedarse atascados en un estado no procesable cuando ocurre algún error imprevisto.

Cuando se activa, esta operación hace que el estado de la cosechadora pase a «listo» inmediatamente.

La invocación a través del administrador de GeoNode se realiza seleccionando el comando Restablecer estado del recolector.

Esta operación no se puede llamar a través de la API de GeoNode.

Trabajadores de cosechadoras estándar

Nota

Recuerde que, como se indicó anteriormente, un trabajador cosechador se configura estableciendo 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 de cosechadora GeoNode

Este trabajador puede recolectar implementaciones remotas de GeoNode.Además de crear recursos locales mediante la recuperación de metadatos remotos, este recolector también puede copiar conjuntos de datos remotos al GeoNode local.Esto significa que este recolector se puede utilizar incluso 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 harvester_type_specific_configuration:

conjuntos de datos de cosecha

Si se deben recolectar recursos remotos de tipo conjunto de datos o no.Valores aceptables: true (el valor predeterminado) o false.

copiar_conjuntos de datos

Si se copian recursos remotos de tipo conjunto de datos al GeoNode local.Valores aceptables: true o false (el valor predeterminado).

documentos_cosecha

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

copiar_documentos

Si se copian recursos remotos de tipo document al GeoNode local.Valores aceptables: true o false (el valor predeterminado).

filtro_título_recurso

Una cadena que debe estar presente en el título de los recursos remotos para que sean reconocidos como recursos aprovechables.Esto permite filtrar recursos que no son relevantes.Valores aceptables: cualquier valor alfanumérico.

Ejemplo: establecer esto en un valor de "agua" significaría que el recolector generaría recursos cosechables para recursos remotos titulados cuencas de agua, territorios de agua, etc. El recolector no generaría recursos cosechables para recursos remotos cuyo título no contenga la palabra agua.

filtro_fecha_inicio

Una cadena que especifica una fecha y hora que se utiliza para filtrar recursos por su fecha_inicio.Esto se analiza con dateutil.parser.parse(), lo que significa que acepta muchos formatos diferentes (por ejemplo, 2021-06-31T13:04:05Z)

filtro_fecha_final

Similar a start_date_filter pero utiliza los recursos end_date como parámetro de filtro.

filtro_palabras clave

Una lista de palabras clave que se utilizan para filtrar recursos remotos.

filtro_categorías

Una lista de categorías que se utilizan para filtrar recursos remotos.

Trabajador de cosechadora WMS

Este trabajador puede recolectar datos desde servidores OGC WMS 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 harvester_type_specific_configuration:

conjunto de datos_título_filtro

Una 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, entonces el trabajador recolector reconoce la capa.

Trabajador recolector de ArcGIS REST Services

Este trabajador puede recopilar datos de catálogos remotos de servicios REST de ArcGIS.

Este trabajador es capaz de reconocer dos tipos de remote_url:

  1. URL del catálogo de servicios REST de ArcGIS.Esta URL normalmente termina en descanso/servicios.Un catálogo puede exponer varios servicios diferentes.Este trabajador recolector puede descender a los servicios ArcGIS Rest 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 normalmente toma 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 harvester_type_specific_configuration:

servicios_mapa_cosecha

Si se deben recopilar servicios del tipo «MapServer».El valor predeterminado es «Verdadero».

servicios_imagen_cosecha

Si se deben recopilar servicios de tipo «ImageServer».El valor predeterminado es «Verdadero».

filtro_nombre_recurso

Una 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, entonces el trabajador recolector reconoce la capa.

filtro_nombres_servicio

Una lista de nombres que se utilizan para filtrar el catálogo de ArcGIS remoto.

Creando nuevos trabajadores recolectores

Se pueden crear nuevos trabajadores recolectores escribiendo clases derivadas de geonode.harvesting.harvesters.base.BaseGeonodeHarvesterWorker.Esta clase define una interfaz abstracta que debe implementarse.Todos los métodos decorados con abc.abstractmethod deben implementarse en la clase de trabajador recolector personalizado.Estudie la implementación de las clases de trabajadores recolectores estándar de GeoNode para obtener información sobre cómo implementar las personalizadas.

Después de escribir una clase de trabajador recolector personalizada, se puede agregar a la lista de trabajadores recolectores conocidos definiendo la configuración del GeoNode HARVESTER_CLASSES.Esta configuración es una lista de cadenas que contiene la ruta de clases de Python para cada clase de trabajador recolector.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 de trabajadores recolectores estándar enviadas por GeoNode.Si se define esta configuración, su valor simplemente ampliará la lista predeterminada.Esto significa que no es posible deshabilitar las clases de trabajadores estándar, sólo agregar otras nuevas.