Plataforma OpenSource de explotación de datos del BORME (Boletín Oficial del Registro Mercantil)
OSBEX se crea con la finalidad de cubrir una alternativa Open Source a las existentes soluciones cerradas para la exploración de información del BORME ofreciendo una base para que cualquiera que lo desea pueda utilizar / mejorar / ampliar las funcionalidades del mismo, además de colaborar en la evolución del proyecto
Actualmente el proyecto es una prueba de concepto que ya se puede utilizar por cualquier usuario que lo necesite, aunque si el proyecto progresa será sin duda necesario mejorar el empaquetado de la aplicación y tecnologías, además de otra línea de presentación.
https://www.cripsis.xyz/es/presentacion-osbex/
La aplicación se presenta como un entorno de varios contenedores docker y conjuntado con docker-compose. Una vez se levante la infraestructura, se habrán creado 5 componentes:
- borme-extractor: Es el componente encargado de comunicarse con el BORME (escrito en Python). Según la configuración que hayamos establecido para cada provincia, comenzará a solicitarle los XML y los boletines en formato PDF y realizará lectura de los mismos para convertirlos en formato entendible (JSON) y preformateado para logstash (siguiente componente) (1.). Una vez realizada la conversión de un boletín, lo enviará mediante HTTP (POST) a logstash (2.).
- logstash-oss: Logstash es un componente del stack de Elastic que permite realizar ingestión de datos desde muchas fuentes, realizar procesado y enviarselo a distintos desstinos. En esta implementación se ocupa de recibir los boletines en formato JSON manteniéndose siempre a la escucha con un servidor HTTP levantado en su parte. Una vez reciba un boletín, realiza múltiples transformaciones y cortes para estructurar los datos correctamente de cara a optimizar y ingestarle los datos a OpenDistro también mediante HTTP (3.).
- opendistro (Elasticsearch): Es una base de datos no relacional optimizada para el almacenamiento de datos en series temporales. Almacena los datos documentos que a su vez se guardan en índices de Elastic, que le permite buscar / encontrar información de manera muy ágil. Una vez recibidos los datos de logstash permanecen guardados y estructurados a la espera de consulta.
- grafana: Permite crear completas visualizaciones gráficas y de representación de la información desde distintas fuentes. En este caso realiza consultas a opendistro (4.) cada vez que un usuario visualiza un cuadro de mandos (5.). --
- kibana: Aunque en este caso no pertenece al flujo de datos de OSBEX, este componente también es parte del stack de elastic y permite realizar múltiples operaciones contra elasticsearch para la gestión de los índices, visualizar los datos almacenados "en crudo" además de poder crear también visualizaciones más complejas.
Dependencias: Docker y docker-compose instalados
Antes de empezar a recolectar/ingestar es necesario establecer para cada provincia desde qué fecha queremos ingestar datos del BORME. Consultar en https://www.boe.es/diario_borme/calendarios.php para cada provincia cual es la fecha mínima.
- Para configurar la extracción es necesario editar el YAML checker.yml ubicado en
borme-extractor-app/config/checker.yml
en la sección zones, por ejemplo:
zones:
A CORUÑA:
last_checked: '2020-01-01'
LUGO:
last_checked: '2020-01-01'
PONTEVEDRA:
last_checked: '2020-01-01'
Le estamos indicando que queremos ingestar solamente las provincias de A Coruña, Pontevedra y Lugo con las fechas establecidas. Simplemente añadir a continuación las provicincias necesarias respectando el formato YAML. Las provincias se deben de anotar tal y como aparecen en boe.es/borme_diario.
Este fichero se actualizará según se vayan descargando boletines.
Ubicarse en una shell al directorio del proyecto y levantar el entorno de docker con docker-compose up -d
. Comenzará a construir / descargar las imágenes de los contenedores y levantarlos. Una vez todo esté operativo borme-extractor comenzará automáticamente a descargarse los boletines y a ingestarlos.
Ubicarse en una shell al directorio del proyecto y parar el entorno de docker con docker-compose stop
. Esto únicamente detendrá los contenedores y se podrán volver a levantar con la instrucción de levantamiento según sea necesario.
Primeramente parar OSBEX. Ubicarse en una shell al directorio del proyecto y eliminar completamente el entorno de docker con docker-compose rm -f
.
Esto eliminará todo el entorno aunque los datos de OSBEX permanecen en el volumen. Para eliminar todos los volúmenes inutilizados, ejecutar: docker volume prune
.
Esto eliminará DEFINITIVAMENTE todos los recursos de OSBEX, incluidos los datos descargados del BORME.
Una vez levantado el entorno, abrir grafana en un navegador con http://localhost:3000 y las credenciales por defecto (admin/admin) y ubicarse en el dashboard "ESTADO INGESTION BORME" (http://localhost:3000/d/a0kcurXGk/estado-ingestion-borme?orgId=1)
Observando el diagrama de flujo podemos ver todos los archivos de configuración implicados. Las cajas con forma de carpetas son la ubicación dentro del repositorio local mientras que las rutas descritas abajo de las cajas son las rutas dentro de los contenedores.
Todo esto está descrito en docker-compose.yml
dónde podemos observar para cada componente su definición (imagen de docker a utilizar, volúmenes, rutas, configuraciones, etc.)
├── config
│ ├── grafana
│ │ └── grafana.db
Contiene la configuración de grafana para representar los datos de opendistro y la información de los dashboards
│ └── logstash
│ ├── borme_ingestion
│ │ ├── borme_empresas.conf
│ │ ├── borme_ingestion.conf
│ │ ├── codigos-cnae.yaml
│ │ └── flattenJSON.rb
│ └── pipelines.yml
Contiene las configuraciones de logstash. pipelines.yml -> indica que pipelines se van utilizar: borme_ingestion.conf -> pipeline a la escucha de eventos de borme-extractor, recibe y realiza un primer corte de la información con un script en ruby interno. Luego pasa la información a: borme_empresas.conf -> pipeline que en base a los eventos, separa, descarta y construye datos y los envía a opendistro mediante código ruby y funciones de logstash. -> codigos-cnae.yaml lo utiliza a modo de diccionario para conseguir los nombres completos de las categorias CNAE en base a su ID. -> pequeño script en ruby para tratar json
│ ├── kibana
│ │ └── kibana.yml
Contiene parametros para conectarse a opendistro
Contiene todas las deficiones para levantar los contenedores con sus configuraciones necesarias