tutorial software gestión gumnet 1
TRANSCRIPT
● Gestión datos:○ Inserción ○ Importación○ Control de calidad○ Copia de seguridad
2
● Inventario:○ Gestión red○ Gestión estación○ Gestión variables○ Gestión series temporales○ Gestión equipos○ Gestión contactos
● Consultas
ÍNDICE
Gestión datos:
4
Importación de archivos de muestras:
1. Inserción del archivo como inventario.2. Importación de sus datos como intervalos.
De esta forma:
● Máxima celeridad de inserción.○ Acorta conexión con datalogger.○ Demora importación.
● Inserción se hará si existe un archivo y es legible.● Importación depende del formato y la presencia de errores.
Bajada archivos a “inbound”
Inserción Importación Control de calidad
Tickets: FallosTickets: Archivos insertados y no importados
Tickets: FallosGráficosMuestras
Gestión datos: INSERCIÓN
5
Archivo datalogger Gumnet = [fichero ASCII, delimitado por ;] + [Cabecera]
Insertar archivos en el inventario:python -m gumnet.ops.samplefile insert-files <ruta-al-archivo>
Ejemplos:
Ejemplos:
Insertar todos los archivos G001* en el inventario:python -m gumnet.ops.samplefile insert-files --threads 4 $(find /home/gumnet/server/0001_gumnet/inbound -name 'G001*' -type f)
Gestión datos: INSERCIÓN
6
Listado archivos insertados:python -m gumnet.inventory.samplefile list
Ejemplo: (Buscamos el archivo que hemos insertado y comprobamos que está)
Gestión datos: INSERCIÓN
7
Últimos archivos insertados de cada estación:for STATION in {\G001001,G001002,G001003,G001004,G001005,\G001006,G001007,G001008,G001009,G001010\}; do python -m gumnet.inventory.samplefile list \ --meta "{\"Station\": \"$STATION\"}" \ --table FileDate --page 1 --order-by FileDate:desc \| tail -n +5 | head -n +1 \| awk -v STATION=$STATION '{print STATION " " $2 " " $3}';\done
Gestión datos: INSERCIÓN
8
Tickets FALLO inserción:python -m gumnet.ops.samplefile insert-failed --files
Ejemplo:
Gestión datos: INSERCIÓN
9
ELIMINAR Tickets FALLOS inserción:python -m gumnet.ops.samplefile insert-remove-failed-files $(python -m gumnet.ops.samplefile insert-failed --file-list)
Gestión datos: IMPORTACIÓN
10
Importar archivos a la base de datos:python -m gumnet.ops.samplefile parse-files
Tickets FALLO importación:python -m gumnet.ops.samplefile parse-failed
Es posible modificar los archivos corrigiendo el error con un editor de texto y volverlos a importar.python -m gumnet.ops.samplefile parse-files --reparse
Si no fuera posible su modificación se puede eliminar referenciándolo a su UUID:
ID=XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX; python -m gumnet.inventory.samplefile delete --id "$ID"; python -m gumnet.ops.samplefile insert-remove-failed-files “$ID”; rm "$ID"
Gestión datos: Control de calidad
11
Representación gráfica series temporales:python -m gumnet.interval.timeseries query --timeseries 'G001003.WSPD01#10MN.AVG,G001003.WSPD02#10MN.AVG' --ts-begin 2016-01-01 --ts-end 2016-03-31 --plot
Gestión datos: Control de calidad
13
Visualización de muestras:python -m gumnet.interval.samples query --channels 'G001003.TA01_Avg,G001004.TA01_Avg,G001006.TA01_Avg,G001007.TA01_Avg' --ts-begin 2016-02-01 --ts-end 2016-02-02
Gestión datos: Control de calidad
14
Visualización de series temporales:python -m gumnet.interval.timeseries query --timeseries 'G001003.TMPA01#10MN.AVG,G001004.TMPA01#10MN.AVG,G001006.TMPA01#10MN.AVG,G001007.TMPA01#10MN.AVG' --ts-begin 2016-02-01 --ts-end 2016-02-02
15
Últimos archivos insertados de cada estación:for STATION in {\G001001,G001002,G001003,G001004,G001005,\G001006,G001007,G001008,G001009,G001010\}; do python -m gumnet.inventory.samplefile list \ --meta "{\"Station\": \"$STATION\"}" \ --table FileDate --page 1 --order-by FileDate:desc \| tail -n +5 | head -n +1 \| awk -v STATION=$STATION '{print STATION " " $2 " " $3}';\done
Gestión datos: Control de calidad
Gestión datos: Copia de seguridad
16
Procedimientos habituales para mantener copias de seguridad en PostgreSQL:
● Volcado y restauración.● Copia del sistema de archivos.● Archivo continuo.
Gestión datos: Copia de seguridad
17
Volcado y restauración
Volcar toda la base de datos en un único archivo SQL (aquí comprimido con bzip2):
pg_dump | bzip2 >gumnet-$(date +"%Y%m%d").sql.bz2
La recuperación consiste en partir de una base de datos vacía y ejecutar las instrucciones SQL obtenidas de pg_dump:
bunzip2 -c gumnet-20160526.sql.bz2 | psql
Gestión datos: Copia de seguridad
18
Copia del sistema de archivosLa base de datos PostgreSQL puede archivarse haciendo copia de seguridad de los archivos que gestiona. Estos archivos están protegidos por permisos, por lo que es necesario ser superusuario.
Antes es necesario detener el servidor.
En CentOS los archivos se encuentran bajo /usr/local/psql/data y pueden guardarse, por ejemplo, con:
sudo service postgresql stopsudo tar cjvf \ gumnet-$(date +"%Y%m%d").tar.bz2 /usr/local/psql/datasudo service postgresql start
La restauración se realiza de la misma forma:
sudo service postgresql stopsudo rm -rf /usr/local/psql/datasudo tar xjvf \ gumnet-$(date +"%Y%m%d").tar.bz2sudo service postgresql start
Gestión datos: Copia de seguridad
19
Archivo continuo
Este sistema es similar al archivo por copia de sistema de archivos, pero no exige detener el servidor. Para poder usar este sistema es necesario activar y configurar la funcionalidad WAL (write-ahead log).
Este tipo de archivado requiere conocimientos de administración de sistemas más avanzados y se explica con detalle en la documentación de PostgreSQL. A modo orientativo, los pasos son:
● Añadir archive_mode, archive_command y archive_timeout al archivo de configuración postgres.conf.● Realizar una copia de la base de datos como usuario con derecho de replicación (por ejemplo, postgres):
○ echo “SELECT pg_start_backup(‘etiqueta’, true);” |\ psql -U postgres -W
○ sudo tar cjvf \ gumnet-$(date +"%Y%m%d").tar.bz2 /usr/local/psql/data
○ echo “SELECT pg_stop_backup();
Inventario.
21
Dependencias:
Para resolver correctamente las referencias a los elementos «padre», éstos deben insertarse antes que sus hijos. Los archivos YAML deberán, por tanto, insertarse en este orden:
● Red● Estación● Variables● Equipos● Sensores● Series temporales● Intervalos de serie temporal
Inventario: GESTIÓN RED
22
CREAR una red: Yaml: network.yaml:
Se inserta en el inventario:python -m gumnet.inventory bulk-import --yaml networks_prueba.yamlEjemplo:
A continuación se listan las redes y se confirma que está:
Inventario: GESTIÓN ESTACIÓN
24
Se inserta en el inventario:python -m gumnet.inventory bulk-import --yaml estacion.yaml
Se listan las estaciones de la red:
Vemos que una de las estaciones insertadas no tiene los datos descritos correctamente!!
Inventario: GESTIÓN ESTACIÓN
25
Se descarga la entrada a un .yaml que modificamos:
La definición de los meta se construye de otra manera:
MODIFICAR datos de estación
Inventario: GESTIÓN ESTACIÓN
26
Se actualiza la entrada:python -m gumnet.inventory bulk-update --yaml entradamodificada.yaml
Cuando buscamos las estaciones de la red de nuevo:
Inventario: GESTIÓN VARIABLE
27
CREAR variable: Yaml: estacion-variable.yaml:
Se inserta en el inventario:python -m gumnet.inventory bulk-import --yaml estacion-variable.yaml
Inventario: GESTIÓN VARIABLE
28
MODIFICAR variable: Se descarga la variable a un .yaml como hicimos con la estación:
Se actualiza el inventario:python -m gumnet.inventory bulk-update --yaml variable.yaml
Inventario: GESTIÓN EQUIPOS y SENSORES
29
Importar equipo: Yaml: equipment.yaml:
Importar al inventario:python -m gument.inventory bulk-import --yaml equipment.yaml
Inventario: GESTIÓN EQUIPOS y SENSORES
30
Importar sensor: Yaml: equipment_sensor.yaml:
Importar al inventario:python -m gument.inventory bulk-import --yaml equipment_sensor.yaml
Inventario: GESTIÓN SERIES TEMPORALES
31
CREAR serie temporal: Se crea un archivo yaml con la descripción de la serie temporal: dos-hermanas-timeseries_DISP01.yaml
Se inserta en el inventario con bulk-import:
Inventario: GESTIÓN SERIES TEMPORALES
32
CREAR intervalo de serie temporal: Se crea un yaml: dos-hermanas-timeseries-interval_DISP01.yaml:
Se inserta en el inventario con bulk-import:
Inventario: GESTIÓN CONTACTOS
33
Crear yaml con información de contactos: usuarios_prueba.yaml
Importar a base de datos:python -m gumnet.role bulk-import --yaml usuarios_prueba.yaml
Inventario: GESTIÓN CONTACTOS
34
MODIFICAR contactos:Para cambiar los datos de un usuario (en este caso [email protected]), se descarga su registro como archivo YAML para editarlo.
python -m gumnet.role list --name [email protected] >usuarios_irene.yaml
Hechos los cambios con el editor, se sube el registro a la base de datos:python -m gumnet.role bulk-update --yaml usuarios.yaml
Listamos los contactos:
Inventario: GESTIÓN CONTACTOS
35
MODIFICAR contactos:Para cambiar la contraseña de un contacto (listamos con la contraseña para confirmar):
Escogemos la id y usamos el comando update:
Consultas
37
Lista estaciones de la red y algunas de sus características:
En ocasiones los campos completos no entran en las dimensiones de la tabla. Para acceder a toda la información se deberá hacer una lista, para reducir los elementos de la lista se puede hacer búsqueda con filtros por kind, parents, meta, etc. También se puede exportar a un csv.
python -m gumnet.inventory list --kind Station >archivo.csv
Consultas
38
La siguiente orden daría el mismo resultado:
python -m gumnet.inventory list --kind Variable --parent inventory/Station/G001002 --table name,Description
Lista de variables medidas en una estación:
Consultas
39
Lista equipos (incluidos sensores) de la red.python -m gumnet.inventory list --kind Equipment%%
Filtrar por estación, por ejemplo, los equipos asociados a la estación G001002, su número de identificación Gumnet, marca, modelo, número de serie, status:
Consultas
40
Sensor asociado a una variable.Por ejemplo, el sensor que mide la variable G001002.TMPA01:
Consultas
41
Listado de precios de los equipos instalados en una estación, por ejemplo en la G001002:python -m gumnet.inventory list --kind Equipment%% --parents inventory/Station/G001002 --table Description,Brand,Model,Purchase.Price,Status
Consultas
42
Precio total de los equipos inventariados en una estación, por ejemplo, la estación G001002:
python -m gumnet.inventory list --kind Equipment%% --parents inventory/Station/G001002 --table Purchase.Price | tail -n +5 | head -n -3 | awk '{sum+=$2} END {print sum}'
Si se quiere filtrar por un determinado periodo, por ejemplo, lo gastado en la red en el 2014:python -m gumnet.inventory list --kind Equipment%% --parents inventory/Station/G001%% --meta '{"Purchase.Date": [{"cmp": ">=", "val": "2014-01-01"}, {"cmp": "<", "val": "2015-01-01"}]}' --table Purchase.Price | tail -n +5 | head -n -3 | awk '{sum+=$2} END {print sum}'
Consultas
43
Valoración de la reposición de los elementos de la estación G001002 pertenecientes a GuMNet:
python -m gumnet.inventory list --kind Equipment%% --parents inventory/Station/G001002 --meta '{"Owner": "GUMNET"}' --table Purchase.Price | tail -n +5 | head -n -3 | awk '{sum+=$2} END {print sum}'
Consultas
44
Listado de equipos cuya calibración caduca en el tercer trimestre de 2016:python -m gumnet.inventory list --kind Equipment:Sensor --table Id.GuMNet,Brand,Model,SerialNumber,Calibrate.Expires,Status,Location --meta '{"Calibrate.Expires": [{"cmp": ">=", "val": "2016-07-01"}, {"cmp": "<", "val": "2016-10-01"}]}'