Add database setup

This commit is contained in:
coolneng 2020-01-02 04:27:45 +01:00
parent 7a494f7918
commit 8a858e6fc2
Signed by: coolneng
GPG Key ID: 9893DA236405AF57
6 changed files with 280 additions and 127 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
Assets/__titlepage.filled.tex Assets/__titlepage.filled.tex
Design.org
Code/.env

14
Code/Pipfile Normal file
View File

@ -0,0 +1,14 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
flask = "*"
sqlalchemy = "*"
pymysql = "*"
[requires]
python_version = "3.8"

105
Code/Pipfile.lock generated Normal file
View File

@ -0,0 +1,105 @@
{
"_meta": {
"hash": {
"sha256": "536bc13b89021a4575fe2c14d71636abf965ab896871f1503f3186f2f1c6a0d4"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.8"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"click": {
"hashes": [
"sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
"sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
],
"version": "==7.0"
},
"flask": {
"hashes": [
"sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52",
"sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6"
],
"index": "pypi",
"version": "==1.1.1"
},
"itsdangerous": {
"hashes": [
"sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19",
"sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"
],
"version": "==1.1.0"
},
"jinja2": {
"hashes": [
"sha256:74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f",
"sha256:9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de"
],
"version": "==2.10.3"
},
"markupsafe": {
"hashes": [
"sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
"sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
"sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
"sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
"sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
"sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
"sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
"sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
"sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
"sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
"sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
"sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
"sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
"sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
"sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
"sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
"sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
"sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
"sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
"sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
"sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
"sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
"sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
"sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
"sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
"sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
"sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
"sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"
],
"version": "==1.1.1"
},
"pymysql": {
"hashes": [
"sha256:3943fbbbc1e902f41daf7f9165519f140c4451c179380677e6a848587042561a",
"sha256:d8c059dcd81dedb85a9f034d5e22dcb4442c0b201908bede99e306d65ea7c8e7"
],
"index": "pypi",
"version": "==0.9.3"
},
"sqlalchemy": {
"hashes": [
"sha256:bfb8f464a5000b567ac1d350b9090cf081180ec1ab4aa87e7bca12dab25320ec"
],
"index": "pypi",
"version": "==1.3.12"
},
"werkzeug": {
"hashes": [
"sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7",
"sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4"
],
"version": "==0.16.0"
}
},
"develop": {}
}

20
Code/database/db_setup.py Normal file
View File

@ -0,0 +1,20 @@
from sqlalchemy import create_engine
def create_connection():
db_name = get_env_variable("DB_NAME")
db_user = get_env_variable("DB_USER")
db_password = get_env_variable("DB_PASSWORD")
db_url = get_env_variable("DB_URL")
db_connection_uri = "mysql+pymysql://{user}:{pw}@{url}/{db}".format(
user=db_user, pw=db_password, url=db_url, db=db_name
)
engine = sqlalchemy.create_engine(db_connection_uri, echo=True)
def get_env_variable(name):
try:
return os.environ[name]
except KeyError:
message = "Expected environment variable '{}' not set.".format(name)
raise Exception(message)

View File

@ -1,47 +1,58 @@
* DB * DB
** Fields ** ID
*** ID ** Location
*** Location ** Area change
*** Area change ** Volume change
*** Volume change ** Name
*** Name
* Users * Users
** Admin ** Admin
* Tasks * Tasks
** TODO Parsing script [0/2] [0%] ** Specification
- [ ] Select useful fiels with awk *** TODO Improve second handout [0/2] [0%]
- [ ] Sum of the volume and areas of each year - [ ] Correct diagrams
** DONE Type requirements handout [4/4] [100%] - [ ] Add conceptual diagram
CLOSED: [2019-09-27 Fri 14:54] SCHEDULED: <2019-09-27 Fri 23:55> *** INACTIVE Update date in YAML automatically [0/1] [0%]
- [X] Problem description - [ ] Add to Makefile
- [X] Functional requirements *** DONE Type requirements handout [4/4] [100%]
- [X] Data requirements CLOSED: [2019-09-27 Fri 14:54] SCHEDULED: <2019-09-27 Fri 23:55>
- [X] Semantic restrictions - [X] Problem description
** DONE Makefile [3/3] [100%] - [X] Functional requirements
CLOSED: [2019-09-30 Mon 20:05] - [X] Data requirements
- [X] Org to Markdown - [X] Semantic restrictions
- [X] Add YAML to Markdown *** DONE Makefile [3/3] [100%]
- [X] Compile to PDF using Eisvogel CLOSED: [2019-09-30 Mon 20:05]
** TODO Update date in YAML automatically [0/2] [0%] - [X] Org to Markdown
- [ ] Awk command - [X] Add YAML to Markdown
- [ ] Add to Makefile - [X] Compile to PDF using Eisvogel
** DONE Add WGMS citation [2/2] [100%] *** DONE Add WGMS citation [2/2] [100%]
CLOSED: [2019-10-08 Tue 18:16] CLOSED: [2019-10-08 Tue 18:16]
- [X] Pandoc citations - [X] Pandoc citations
- [X] Bibtex syntax - [X] Bibtex syntax
** DONE Setup PlantUML integration [2/2] [100%] *** DONE Setup PlantUML integration [2/2] [100%]
CLOSED: [2019-10-18 Fri 17:58] CLOSED: [2019-10-18 Fri 17:58]
- [X] Org Babel - [X] Org Babel
- [X] Source code on a different file - [X] Source code on a different file
** DONE Improve first handout [3/3] [100%] *** DONE Improve first handout [3/3] [100%]
CLOSED: [2019-10-08 Tue 20:45] CLOSED: [2019-10-08 Tue 20:45]
- [X] Data types - [X] Data types
- [X] Non functional requirements - [X] Non functional requirements
- [X] Longer description - [X] Longer description
** DONE Generate diagrams [4/5] [80%] *** DONE Generate diagrams [4/5] [80%]
CLOSED: [2019-11-01 Fri 00:34] CLOSED: [2019-11-01 Fri 00:34]
- [X] Data-flow - [X] Data-flow
- [ ] Conceptual - [ ] Conceptual
- [X] Functional - [X] Functional
- [X] Black box - [X] Black box
- [X] Entity-Relationship - [X] Entity-Relationship
** Implementation
*** TODO Backend [0/2] [0%]
**** TODO Database [1/2] [50%]
- [X] Connection
- [ ] Creation of fields via class
**** NEXT Flask framework
-[[https://flask.palletsprojects.com/en/1.1.x/patterns/#patterns][ Patterns]]
*** NEXT Parsing script [0/2] [0%]
- [ ] Select useful fiels with awk
- [ ] Arithmetic operations for comparisons
*** INACTIVE Frontend [0/1] [0%]
- [ ] [[https://adminlte.io/][Adminlte]]

View File

@ -2,144 +2,145 @@
** Descripción del problema ** Descripción del problema
Pretendemos crear una base de datos que incluye información general y específica de los principales glaciares. Nuestro fin es compartir información con la comunidad científica, Pretendemos crear una base de datos que incluye información general y específica de los principales glaciares. Nuestro fin es compartir información con la comunidad científica,
sin ánimo de lucro, y concienciar a un número máximo de personas sobre los devastadores efectos del cambio climático. sin ánimo de lucro, y concienciar a un número máximo de personas sobre los devastadores efectos del cambio climático.
La IGDB ofrecerá dos interfaces distintas para la consulta de información, una con información extensiva enfocada para el uso científico (se podrán incluir los datos La IGDB ofrecerá dos interfaces distintas para la consulta de información, una con información extensiva enfocada para el uso científico (se podrán incluir los datos
en cualquier documento científico, mencionándola en la bibliografía), y otra con información general y mucho más visual para el público general. en cualquier documento científico, mencionándola en la bibliografía), y otra con información general y mucho más visual para el público general.
Para el uso científico, ofreceremos estadísticas individuales de un glaciar y la posibilidad de comparar dos glaciares para observar la correlación entre sus tasas de cambio. Para el uso científico, ofreceremos estadísticas individuales de un glaciar y la posibilidad de comparar dos glaciares para observar la correlación entre sus tasas de cambio.
Para el público general, añadiremos un conjunto de tablas y gráficas, junto con valores estadísticos que permiten visualizar el impacto del cambio climático de forma muy intuitiva. Para el público general, añadiremos un conjunto de tablas y gráficas, junto con valores estadísticos que permiten visualizar el impacto del cambio climático de forma muy intuitiva.
Nos basaremos en la base de datos cite:wgms-db, ya que ésta contiene una mucha información acerca de gran número de glaciares. IGDB simplificará la WGMS, escogiendo únicamente los Nos basaremos en la base de datos cite:wgms-db, ya que ésta contiene una mucha información acerca de gran número de glaciares. IGDB simplificará la WGMS, escogiendo únicamente los
datos relevantes para estudios acerca del cambio climático, y acotando éstos a la década actual (2010-2018). datos relevantes para estudios acerca del cambio climático, y acotando éstos a la década actual (2010-2018).
** Requisitos ** Requisitos
*** Datos *** Datos
1. *RD1*: Datos del glaciar 1. *RD1*: Datos del glaciar
- País - /Cadena de 30 caracteres máximo/ - País - /Cadena de 30 caracteres máximo/
- Nombre del glaciar - /Cadena de 30 caracteres máximo/ - Nombre del glaciar - /Cadena de 30 caracteres máximo/
- ID del glaciar (Compatible con la WGMS) - /Entero de 5 dígitos/ - ID del glaciar (Compatible con la WGMS) - /Entero de 5 dígitos/
2. *RD2*: Datos anuales de un glaciar 2. *RD2*: Datos anuales de un glaciar
- ID del glaciar (Compatible con la WGMS) - /Entero de 5 dígitos/ - ID del glaciar (Compatible con la WGMS) - /Entero de 5 dígitos/
- Área - /Entero de 10 dígitos/ - Área - /Entero de 10 dígitos/
- Volumen - /Entero de 10 dígitos/ - Volumen - /Entero de 10 dígitos/
- Grosor - /Entero de 10 dígitos/ - Grosor - /Entero de 10 dígitos/
- Año - /Entero de 10 dígitos/ - Año - /Entero de 10 dígitos/
3. *RD3*: Datos de cambio de un glaciar 3. *RD3*: Datos de cambio de un glaciar
- ID del glaciar (Compatible con la WGMS) - /Entero de 5 dígitos/ - ID del glaciar (Compatible con la WGMS) - /Entero de 5 dígitos/
- Variación de área - /Entero de 10 dígitos/ - Variación de área - /Entero de 10 dígitos/
- Variación de volumen - /Entero de 10 dígitos/ - Variación de volumen - /Entero de 10 dígitos/
- Variación de grosor - /Entero de 10 dígitos/ - Variación de grosor - /Entero de 10 dígitos/
- Año - /Entero de 10 dígitos/ - Año - /Entero de 10 dígitos/
4. *RD4*: Datos del administrador 4. *RD4*: Datos del administrador
- ID - /Entero de 4 dígitos/ - ID - /Entero de 4 dígitos/
- Fecha de alta - /Fecha en formato dd-mm-yyyy/ - Fecha de alta - /Fecha en formato dd-mm-yyyy/
*** Funcionales *** Funcionales
1. *RF1*: Alta de un glaciar 1. *RF1*: Alta de un glaciar
Se añade un glaciar al sistema a partir de los datos de la WGMS Se añade un glaciar al sistema a partir de los datos de la WGMS
- Entrada: *RD1* - Entrada: *RD1*
2. *RF2*: Inclusión de datos anuales 2. *RF2*: Inclusión de datos anuales
Añade los datos relevantes de cada año para un glaciar Añade los datos relevantes de cada año para un glaciar
- Entrada: *RD2* - Entrada: *RD2*
3. *RF3*: Cálculo de las variaciones anuales 3. *RF3*: Cálculo de las variaciones anuales
Calcula las variaciones anuales de grosor, área y volumen para un glaciar Calcula las variaciones anuales de grosor, área y volumen para un glaciar
- Entrada: *RD2* - Entrada: *RD2*
- Manejo: *RD3* - Manejo: *RD3*
4. *RF4*: Alta del administrador 4. *RF4*: Alta del administrador
Crea un usuario de tipo administrador, encargado de monitorizar el sistema y resolver conflictos Crea un usuario de tipo administrador, encargado de monitorizar el sistema y resolver conflictos
- Entrada: *RD4* - Entrada: *RD4*
5. *RF5*: Actualización de la base de datos 5. *RF5*: Actualización de la base de datos
Añade nuevos datos a partir de nuevas versiones de la WGMS Añade nuevos datos a partir de nuevas versiones de la WGMS
- Entrada: *RD2* - Entrada: *RD2*
6. *RF6*: Resolución de conflictos 6. *RF6*: Resolución de conflictos
Permite al administrador la resolución de conflictos de datos al actualizar la base de datos Permite al administrador la resolución de conflictos de datos al actualizar la base de datos
*** No Funcionales *** No Funcionales
1. *RNF1*: Seguridad 1. *RNF1*: Seguridad
La página web de consulta será accesible únicamente mediante HTTPS, y la base de datos tendrá su propio usuario de acceso La página web de consulta será accesible únicamente mediante HTTPS, y la base de datos tendrá su propio usuario de acceso
2. *RNF2*: Escalabilidad 2. *RNF2*: Escalabilidad
Se podrá aumentar el rendimiento de IGDB mediante una mejora del hardware del servidor, o montando un cluster Se podrá aumentar el rendimiento de IGDB mediante una mejora del hardware del servidor, o montando un cluster
3. *RNF3*: Disponibilidad 3. *RNF3*: Disponibilidad
La IGDB estará disponible 24/7, y en caso de necesidad de mantenimiento, se procederá a mostrar un snapshot de la página La IGDB estará disponible 24/7, y en caso de necesidad de mantenimiento, se procederá a mostrar un snapshot de la página
4. *RNF4*: Tolerancia a fallos 4. *RNF4*: Tolerancia a fallos
Se usará un cluster para permitir que la IGDB siga siendo disponible, aunque falle algún servidor Se usará un cluster para permitir que la IGDB siga siendo disponible, aunque falle algún servidor
5. *RNF5*: Copias de seguridad 5. *RNF5*: Copias de seguridad
Se harán copias de seguridad diarias del sistema, además de enviarlas a otro servidor en caso de que se pierdan los datos locales de backup Se harán copias de seguridad diarias del sistema, además de enviarlas a otro servidor en caso de que se pierdan los datos locales de backup
6. *RNF6*: Rotación de logs 6. *RNF6*: Rotación de logs
Se eliminarán los logs del sistema antiguos, cada semana Se eliminarán los logs del sistema antiguos, cada semana
*** Restricciones Semánticas *** Restricciones Semánticas
1. *RS1*: 1. *RS1*:
No podrá haber dos glaciares con el mismo ID No podrá haber dos glaciares con el mismo ID
2. *RS2*: 2. *RS2*:
No podrá haber más de un administrador del sistema No podrá haber más de un administrador del sistema
3. *RS3*: 3. *RS3*:
El atributo año solo podrá estar comprendido entre 2010-2018, inclusive El atributo año solo podrá estar comprendido entre 2010-2018, inclusive
** Diagramas ** Diagramas
Para el diseño del sistema, procederemos con la modelización de diagramas estandarizados, dado que es una herramienta imprescindible en Para el diseño del sistema, procederemos con la modelización de diagramas estandarizados, dado que es una herramienta imprescindible en
Ingeniería del Software. Ingeniería del Software.
*** Diagrama funcional *** Diagrama funcional
[[./FD.png]] [[./FD.png]]
*** Diagramas de flujo *** Diagramas de flujo
[[./DF1.png]] [[./DF1.png]]
[[./DF2.png]] [[./DF2.png]]
[[./DF3.png]] [[./DF3.png]]
[[./DF4.png]] [[./DF4.png]]
[[./DF5.png]] [[./DF5.png]]
[[./DF6.png]] [[./DF6.png]]
*** Diagrama de caja negra *** Diagrama de caja negra
#+CAPTION: IGDB #+CAPTION: IGDB
[[./BB.png]] [[./BB.png]]
\clearpage
*** Diagrama Entidad-Relación *** Diagrama Entidad-Relación
\newpage
[[./ER.png]] [[./ER.png]]
** Bibliografía ** Bibliografía