TFG ElenaFdezJnez
TFG ElenaFdezJnez
AUTORA
ELENA FERNÁNDEZ JIMÉNEZ
DIRECTORES
JOSÉ IGNACIO GÓMEZ PÉREZ
CHRISTIAN TOMÁS TENLLADO VAN DER REIJDEN
AUTORA
ELENA FERNÁNDEZ JIMÉNEZ
DIRECTORES
JOSÉ IGNACIO GÓMEZ PÉREZ
CHRISTIAN TOMÁS TENLLADO VAN DER REIJDEN
16 DE SEPTIEMBRE DE 2022
DEDICATORIA
2
AGRADECIMIENTOS
A José Ignacio por las pautas facilitadas, por la adaptación a los problemas y
por el interés puesto. A todos los compañeros de la Universidad Complutense de
Madrid por trabajar en este proyecto y haber hecho posible mi colaboración.
3
RESUMEN
Palabras clave
4
ABSTRACT
The avian flu situation in Spain is getting worse and worse. The number of
outbreaks continues to grow despite the high temperatures. The impact on society
imposes economic, health and social penalties and leads to the slaughter of healthy
birds.
Improvements developed for the DiFlusion project have been the automation of
the installation of the application and the development of a new interface. Automation
avoids preparation time and complexity when installing the application. At the same
time, it facilitates data storage due to two separate containers that work as a server;
without the need for Google Drive or Github dependencies, it allows data storage
locally. On the other hand, the interface will not cause license problems due to the
library chosen for development; it is also a new interface that is lighter and more
efficient, but with functionalities very similar to the previous one.
Keywords
5
ÍNDICE DE CONTENIDOS
Introducción 1
Motivación 2
Objetivos 2
Plan de trabajo 3
Estado de la cuestión 4
Introducción del modelo 4
Decisión de automatización 4
Una nueva interfaz gráfica 5
Unión de ambas partes 6
Desarrollo de la automatización 8
Máquina virtual como entorno de desarrollo 8
Docker 9
Repositorio 10
Imágenes y dockerfiles 11
Contenedores 11
Contenedores DiFlusion con Docker 12
Contenedor web 12
Construcción de la imagen web 14
Instanciación del contenedor web 14
Contenedor del modelo 14
Construcción de la imagen del modelo 15
Instanciación del contenedor del modelo 16
Conexión entre contenedores 16
Red Docker 17
6
Migraciones 28
Rutas de riesgo 28
Time Slider 28
Chapter 6 - Introduction 31
6.1 Motivation 32
6.2 Objectives 32
6.3 Workplan 33
7
ÍNDICE DE FIGURAS
8
Figura 4.5.2.3 Filtrado de alertas 26
9
Capítulo 1 - Introducción
1
1.1 Motivación [7]
Los estragos de la gripe aviar son cada vez de mayor importancia, tanto en la
sanidad de animales y de personas como en la economía global.
El sacrificio de las aves por brotes de gripe aviar se lleva a cabo con las
infectadas y con las sanas, con el fin de prevenir un riesgo mayor, llegando a reducir el
número de aves hasta el 50% en la mayoría de los casos.
También hay que tener en cuenta los daños indirectos, como pueden ser
pérdidas de trabajo en el sector avícola, la subida de precios en productos derivados
de aves como el huevo o la carne, la repercusión en zonas de turismo infectadas, etc.
Por ello, con el fin de alertar de posibles futuros brotes, el Instituto Nacional de
Investigación y Tecnología Agraria y Alimentaria (INIA) y la Universidad Complutense
de Madrid, han llevado a cabo un proyecto conocido como DiFlusion. Esta aplicación
está siendo desarrollada por alumnos de la UCM en los distintos Trabajos de Fin de
Grado y Trabajos de Fin de Máster. En este TFG se ha decidido contribuir a este
proyecto debido al impacto socioeconómico que ocasiona la gripe aviar.
1.2 Objetivos
2
1.3 Plan de trabajo
3
Capítulo 2 - Estado de la cuestión
Debido al nivel de gravedad de la gripe aviar cada vez resulta más útil la
información de propagación, el riesgo existente y las consecuencias que pueda
ocasionar. De esta manera, la aplicación DiFlusion supone un avance para aquellas
personas cuyo día a día depende de forma directa o indirecta de la evolución de esta
enfermedad.
Los valores obtenidos del modelo y los datos relevantes no procesados quedan
almacenados en ficheros GeoJSON: alertas.geojson, rutas.geojson, brotes.geojson.
También se dispone de otro archivo del mismo tipo nombrado como
comarcas.geojson que contiene las coordenadas y la información de cada comarca
ganadera.
4
entre sí pero capaces de comunicarse. Uno de ellos contendría la interfaz del
programa; mientras que el modelo lógico estaría en el otro contenedor. Esta última
parte se encargaría de extraer y analizar la información, de hacer sus cálculos
pertinentes y de enviar los datos a la interfaz gráfica para el usuario final en archivos
GeoJSON.
Debido a problemas con los tamaños de los ficheros y los repositorios web, se
decidió que uno de los contenedores funcionase como servidor propio de la
aplicación y que el otro se encargase de la manipulación de datos. Para eliminar de
forma completa el problema del tamaño de los archivos se decidió implementar las
lecturas desde el propio servidor web, no sin encontrar dificultades de acceso al
realizar peticiones HTTP asíncronas a través de Ajax con XMLHttpRequest. Al realizar
este tipo de peticiones, esta es bloqueada por la política CORS(Cross-Origin Resource
Sharing). La solución residiría en eliminar el bloqueo a través de la herramienta apache
a2enmod (ver sección 3.3.1 Contenedor web).
El proyecto ya contaba con una interfaz gráfica por lo que a priori se podría
pensar en que es innecesario desarrollar otra nueva. Pues bien, el problema residía en
las licencias de las librerías empleadas, ya que no eran de software libre y podría
ocasionar problemas en un futuro.
Se hizo una búsqueda de librerías libres que supliesen la, entonces empleada,
librería ArcGIS. Tras buscar alternativas capaces de trabajar con mapas se tuvieron dos
librerías en cuenta. Una de ellas era CesiumJS , cuya licencia es de código abierto
[8]
5
pero cuenta con varios plugin no libres y/o no gratuitos. Además se trataba de una
librería que no solo se centraba en mapas, sino en modelado 3D, lo que complicaría el
desarrollo. La segunda librería, y la finalmente elegida, fue Leaflet, con licencia BSD
(Berkeley Software Distribution) [9]
siendo una de las licencias más permisivas que
existen dentro del mundo del Software Libre; además, esta librería incluye plugin
desarrollados y mantenidos por usuarios de la comunidad del Software Libre.
Una vez elegida la librería, el objetivo tomó la forma de intentar que las
funcionalidades de la interfaz creada con Leaflet se aproximara todo lo posible a la
existente en ese momento.
6
En la Figura 2.4.1 se observa una máquina virtual ejecutándose en la máquina
física. Dentro de la máquina virtual (VM) se ha ejecutado el contenedor con la parte
web el cual funciona como servidor. Desde la (VM) se ha accedido al puerto 8080 a
través del navegador, destino de la información enviada por el contenedor en
ejecución. Esta información es la interfaz que se ha desarrollado para el proyecto,
alojada en un repositorio github, cuyo código es clonado en el contenedor.
7
Capítulo 3 - Desarrollo de la automatización
8
Figura 3.1.2 Configuración Máquina Virtual Ubuntu 20.04 LTS II
Docker es una plataforma de software libre con licencia Apache License 2.0
diseñada para desarrollar, compartir, administrar y ejecutar aplicaciones creadas por
cualquier usuario. Todas estas ventajas se deben al uso de contenedores, similares a las
máquinas virtuales, pero más cómodos para el desarrollo de aplicaciones
independientes.
9
Algunas de las ventajas de los contenedores Docker son las siguientes: [11]
3.2.1 Repositorio
10
3.2.2 Imágenes y dockerfiles [10]
3.2.3 Contenedores
Una vez construidas las imágenes a través de los dockerfiles, está todo listo para
ejecutar un contenedor. Un contenedor no es más que una instancia de la propia
imagen. Para iniciar dichas instancias se requiere el uso del siguiente comando:
$docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...].
11
3.3 Contenedores DiFlusion con Docker
$ docker images
12
● FROM httpd:2.4. Imagen de la que partirá el contenedor. No todos los
Dockerfile necesitan una imagen previa; pero en este caso facilita la creación
del servidor. La imagen origen cuenta con Apache HTTP Server Versión 2.4.
● MAINTAINER elenafj18. Como su propio nombre indica, muestra el usuario por
el cual está siendo mantenida (y desarrollada) dicha imagen.
● RUN apt-get update. Se encarga de actualizar la lista de aquellos paquetes
que están disponibles.
● RUN apt-get -qq -y install openssh-server. Realiza la instalación de
herramientas del protocolo Secure Shell (SSH). Su función es acceder a la red y
comunicarse con otros contenedores de forma segura. Necesario para la
comunicación de ambos contenedores.
● RUN apt-get -q -y install apache2. Instala Apache, que cuenta con
herramientas necesarias que se explicarán en el comando siguiente.
● RUN a2enmod headers. a2enmod es una herramienta perteneciente al servicio
Apache. Este comando permite realizar lecturas de ficheros desde local, ya que
sin habilitar los headers, se produce un intercambio de recursos de origen
cruzado (Cross-origin resource sharing, CORS), bloqueando la lectura de los
archivos. Se usa para el tratado de los GeoJSON.
● RUN service apache2 restart. Es necesario reiniciar el servicio apache para
que los cambios surjan efecto de forma satisfactoria.
● RUN apt-get -qq -y install git. Para descargar Git. Sistema de control de
versiones. Necesario para el clonado de repositorios.
● RUN git clone https://github.com/influenzaAviar/applicacionWeb
usr/local/apache2/htdocs/appWeb. Clona el código de la interfaz en la
carpeta que el servidor emplea para mostrar por el puerto indicado.
● RUN useradd -ms /bin/bash webserver. Crea un nuevo usuario llamado
webserver.
● WORKDIR /home/webserver. Equivalente al comando $cd. Especifica el
directorio actual en el momento en el que se inicie el contenedor.
13
● RUN mkdir .ssh. Crea el directorio .ssh en la carpeta del usuario. Este
comando facilitará la conexión entre ambos contenedores a la hora de crear
una clave público-privada.
El punto especifica la ruta donde se encuentra el Dockerfile del cual parte la imagen, y
la opción “-t” permite al usuario Docker añadir una etiqueta a la imagen para facilitar
su puesta en marcha y sus gestiones en Docker, en este caso “elenafj18/httpddocker”.
14
3.3.2.1 Construcción de la imagen del modelo
La imagen del modelo, al igual que la imagen web, ha sido creada a través de
un Dockerfile. A diferencia de la parte web, este Dockerfile contiene un gran número
de instalaciones de dependencias necesarias para los scripts, bases de datos, etc.
15
Figura 3.3.2.1.3 Dockerfile del modelo III
Una vez el contenedor esté operativo se requiere del uso de crontab para generar el
envío de archivos desarrollados por el modelo al contenedor web. Esta parte se
desarrollará más en profundidad en el subapartado “3.3.3 Conexión entre
contenedores”.
16
gracias a los comandos en Dockerfile) y conocer la ip de ambos contenedores. La
clave privada se crea en la carpeta .sh, también creada previamente en la plantilla
Docker.
Para conocer qué contenedores forman parte de esa red docker existe el
comando $ docker network inspect diflusion_network. Este comando lista un
conjunto de características de la red, como el nombre, la fecha de creación, etc;
pero lo más interesante reside en la información de cada contenedor, pues se muestra
su dirección física y su ip, facilitando los valores de los campos de los comandos que se
han mencionado anteriormente.
17
Capítulo 4 - Desarrollo de la nueva interfaz
Una nueva interfaz de usuario para DiFlusion supone una renovación visual
importante. Y no es esta la única ventaja, sino que contando con la librería de Leaflet,
tratándose esta de una librería de software libre permite su desarrollo y su uso con total
libertad.
18
Figura 4.2 Nueva interfaz gráfica
4.1 Leaflet
19
4.1.1 Plugins
20
4.4 Entorno de desarrollo
Figura 4.4.2 Control de código fuente I Figura 4.4.3 Terminal Powershell integrado
21
4.5 Interfaz gráfica
Los colores que priman son el negro y el rojo, siguiendo de cierta manera el
estilo de la antigua parte web. Sin embargo, para una visión más clara de las zonas
geográficas se han respetado los colores del mapa. También se han utilizado distintos
colores para las alertas, lo que en su conjunto, produce en el usuario una mayor
necesidad de interacción.
22
registrada; aparecerán en rojo y en blanco respectivamente. Por último, se observa la
figura de un embudo, se trata de un botón desplegable del cual aparecen botones
que filtran los distintos niveles de riesgo de las alertas.
23
Otra de las funcionalidades que le caracteriza es el “zoom in” realizado cuando
el usuario clica sobre una de las comarcas. Permitiendo una visión más amplia de la
comarca seleccionada.
4.5.2 Alertas
24
Figura 4.5.2.1 Información alertas
Los niveles de alerta se clasifican en una escala del 1 al 5. Los colores, tal y
como se muestran en la leyenda, son amarillo, naranja, rojo, marrón y negro
respectivamente, siendo el nivel 1 el más leve y el 5 el más grave. Para añadir más
información, al clicar sobre una alerta aparece un popup con el nivel de riesgo, por
aclaración en caso de haber muchas alertas juntas. A su vez, se muestra un botón que
redirige al informe completo sobre esa alerta, situado en Google Drive.
Los iconos propios de las alertas se han diseñado de esta manera para que
haya una relación directa entre el icono de la cabecera de la interfaz y estos,
produciendo una sensación de mayor profesionalidad y consistencia en el estilo del
desarrollo web.
25
Cabe mencionar el botón de filtrado de alertas situado en la parte oeste de la
pantalla. Este desplegable permite mostrar las alertas de uno o varios niveles
específicos. Para conseguir este filtrado ha sido necesario emplear el plugin de Leaflet
conocido como Tag Filter Button. Para facilitar el filtrado y la gestión de estas, se ha
leído el archivo alertas.geojson y se ha filtrado en código añadiendo las etiquetas
correspondientes a cada alerta e incluyendo cada una en una capa de datos distinta.
4.5.3 Brotes
26
Figura 4.5.3.1 Información brotes
Leaflet permite un zoom de gran nivel, de esta manera permite al usuario ver
con exactitud de dónde proviene el brote.
27
4.5.4 Migraciones
28
donde en ninguno de los dos casos existirá la limitación de almacenamiento propia de
github.
29
Figura 4.5.5.1 Rutas de riesgo por brote
30
4.5.6 Time Slider
La antigua interfaz contaba con dos barras de tiempo, una para alertas y otra
para brotes, lo que podía llevar a inconsistencias temporales ya que no había relación
entre brotes de hace un año y alertas de hace unas semanas. Por ello se ha decidido
unificar todo en un solo time slider. De esta manera, podemos ver en una semana
determinada el nivel de alerta de cada comarca y el estado de los brotes.
En la barra temporal se pueden observar varios botones; los tres primeros son los
botones universales de control, permiten retroceder, poner en marcha o avanzar en el
tiempo. También encontramos la fecha y la hora que caracteriza la situación del
mapa en ese instante, seguidas de la propia barra, desplazable por el usuario para
facilitar su uso. Por último encontramos los fotogramas por segundo, este regula la
velocidad del paso del tiempo en la aplicación cuando el play es clicado por el
usuario.
31
Capítulo 5 - Conclusiones y posibles extensiones
Debido a que este trabajo forma parte del proyecto DiFlusion, y que puede ser
una herramienta muy útil para varios sectores, a continuación se exponen las
conclusiones a las que se ha llegado y los posibles trabajos que se pueden desarrollar
gracias a estas mejoras.
5.1 Conclusiones
Por último hay que dar cabida al valor que pueden añadir nuevas
funcionalidades basadas en otras fuentes de datos.
32
Chapter 6 - Introduction
species, but with a difference in their vulnerability to the virus in terms of severity. This flu
is highly contagious, transmission can be carried out by direct contact through any
infected object. The idea that one of the possible causes of the various epidemics is the
relationship between domestic and wild birds is under consideration.
Survival of the virus is long lasting, mainly at low temperatures; however, it does
not tolerate warm temperatures. It should be noted that temperatures above or equal
to 70o C are fulminant for this, eliminating it completely. [2]
Although the poultry sector is the most affected, the danger to humans needs to
be emphasised. The most contagious and symptomatic types of avian influenza
capable of affecting humans are H5 (N1, N6 and N8) and H7 (N3, N7 and N9). [3]
Until a few months ago, this disease was considered seasonal due to the variety
of temperatures, nowadays it is characterized as endemic. During the winter of this year
several outbreaks of avian influenza were found which could not be controlled until
May. To the surprise of the researchers, by late summer, five new outbreaks have been
reported in Spain, adding to the existing ones and recording a total of 33 outbreaks.
Across Europe, the result has been more than 5,300 outbreaks, resulting in 46 million birds
being slaughtered. [4] [5] [6]
Following the data published by the European Food Safety Authority (EFSA), the
same European agency reported on the seriousness of the situation suggesting new
medium- and long-term measures, advising to reduce the number of poultry in
geographical areas at high risk of infection.
33
6.1 Motivation
The ravages of avian influenza are becoming increasingly important, both for
animal and human health and for the global economy.
The slaughter of birds for outbreaks of avian influenza is carried out with infected and
healthy birds in order to prevent an increased risk, reducing the number of birds by up
to 50% in most cases.
Indirect damage, such as job losses in the poultry sector, higher prices for poultry
products such as eggs or meat, the impact on infected tourist areas, etc. , must also be
taken into account.
6.2 Objectives
The purpose of this project is to improve the tool for predicting avian influenza
outbreaks developed by Emilio José Valencia Calvopiña and Cheng Jun Liu Zheng in
their TFG titled Prediction of Avian Influenza Outbreaks. The points agreed are as
follows:
34
6.3 Workplan
35
Chapter 7 - Conclusions and future work
As this work is part of the DiFlusion project and can be a very useful tool for
several sectors, the following are the conclusions reached and the possible work that
can be developed as a result of these improvements.
7.1 Conclusions
As mentioned above, this project may represent a before and after in sectors
directly or indirectly related to avian influenza. So it is hoped that the development that
has been carried out will bring value to the tool in order to help more living beings.
With such a wide-ranging project, the scope for improvement is almost endless.
One of these potential extensions is code refactoring, supported by the diversity of
authors who have carried out the development of each of the parts; homogeneity
and, of course, consistency are sought.
During this TFG we discussed the automation of the installation of the part of the
model and the part of the graphical interface, so it would be useful to extrapolate the
automation to the initialization of the different databases.
Finally, the value added by new functionalities based on other data sources
needs to be accommodated.
36
BIBLIOGRAFÍA
[2] Documentación sobre la gripe aviar. Ministerio de sanidad y consumo. PDF online.
https://www.sanidad.gob.es/ciudadanos/enfLesiones/enfTransmisibles/docs/gripeAviar
.pdf
[5] Andalucía notifica otro foco de gripe aviar en aves de corral de Huelva. Animal's
Health.
https://www.animalshealth.es/avicultura/andalucia-notifica-otro-foco-gripe-aviar-aves-
corral-huelva
37
[12] Docker build.https://docs.docker.com/engine/reference/commandline/build/
38