<commit_before><!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->


- [Mantenimiento](#mantenimiento)
    - [Exploración de la instancia de andino](#exploracion-de-la-instancia-de-andino)
        - [¿Qué está corriendo docker?](#que-esta-corriendo-docker)
        - [Ingresar al contendor pricipal de andino](#ingresar-al-contendor-pricipal-de-andino)
        - [Listar todas las `Propiedades` de cada contenedor](#listar-todas-las-propiedades-de-cada-contenedor)
    - [Administración de usuarios](#administracion-de-usuarios)
        - [Crear un usuario ADMIN](#crear-un-usuario-admin)
        - [Listar mis usuarios](#listar-mis-usuarios)
        - [Ver los datos de un usuario](#ver-los-datos-de-un-usuario)
        - [Crear un nuevo usuario](#crear-un-nuevo-usuario)
        - [Crear un nuevo usuario extendido](#crear-un-nuevo-usuario-extendido)
        - [Eliminar un usuario](#eliminar-un-usuario)
        - [Cambiar password de un usuario](#cambiar-password-de-un-usuario)
    - [Configuraciones de andino](#configuraciones-de-andino)
        - [Cambiar la configuración del SMTP](#cambiar-la-configuracion-del-smtp)
        - [Modificar el archivo de configuración](#modificar-el-archivo-de-configuracion)
        - [Cambiar el remitente de los correos electrónicos que envía Andino](#cambiar-el-remitente-de-los-correos-electronicos-que-envia-andino)
        - [Google Tag Manager](#google-tag-manager)
        - [Cambiar el id del container de Google Tag Manager](#cambiar-el-id-del-container-de-google-tag-manager)
        - [Deshabilitar la URL `/catalog.xlsx`](#deshabilitar-la-url--catalogxlsx)
        - [Cache](#configuraci%C3%B3n-de-la-llamada-de-invalidaci%C3%B3n-de-cach%C3%A9)
        - [Cache externa](#cache-externa)
    - [Acceso a los datos de andino](#acceso-a-los-datos-de-andino)
        - [Encontrar los volúmenes de mi andino dentro del filesystem del host](#encontrar-los-volumenes-de-mi-andino-dentro-del-filesystem-del-host)
        - [Ver las direcciones IP de mis contenedores](#ver-las-direcciones-ip-de-mis-contenedores)
        - [Ver las variables de entorno que tienen mis contenedores](#ver-las-variables-de-entorno-que-tienen-mis-contenedores)
        - [Acceder con un cliente de PostgreSQL a las bases de datos](#acceder-con-un-cliente-de-postgresql-a-las-bases-de-datos)
    - [Eliminar objetos definitivamente](#eliminar-objetos-definitivamente)
        - [Purgar Organizaciones Borradas](#purgar-organizaciones-borradas)
        - [Purgar Grupos Borrados](#purgar-grupos-borrados)
        - [Purgar Datasets Borrados](#purgar-datasets-borrados)
        - [Listar nombres de los datasets contenidos en Andino](#listar-nombres-de-los-datasets-contenidos-en-andino)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

# Mantenimiento

## Exploración de la instancia de andino

### ¿Qué está corriendo docker?

Para obtener una lista de lo que está corriendo actualmente Docker, podemos usar el siguiente comando:

    docker ps # Tabla de ejecucion actual
    docker ps -q # Listado de IDs de cada contenedor
    docker ps -aq # Listado de IDs de todos los contenedores disponibles.


### Ingresar al contendor pricipal de andino

El contenedor principal de andino, donde se ejecuta la aplicación CKAN, es denominado `portal`. Para ingresar en una sesión de consola en el contenedor, ejecutar:

    docker-compose -f /etc/portal/latest.yml exec portal /bin/bash


### Listar todas las `Propiedades` de cada contenedor

    docker-compose -f /etc/portal/latest.yml ps -q portal solr db | xargs -n 1 | while read container; do docker inspect $container; done


## Administración de usuarios

### Crear un usuario ADMIN

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/add_admin.sh mi_nuevo_usuario_admin email_del_usuario_admin

El comando solicitará la contraseña del usuario administrador.


### Listar mis usuarios

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user list

### Ver los datos de un usuario

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user nombre-de-usuario


### Crear un nuevo usuario

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user add nombre-de-usuario


### Crear un nuevo usuario extendido

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user add nomber [email=<EMAIL> password=<PASSWORD> apikey=unsecretomisticonoleible]


### Eliminar un usuario

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user remove nombre-de-usuario


### Cambiar password de un usuario

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user setpass nombre-de-usuario

## Configuraciones de andino

### Modificar el archivo de configuración

El archivo de configuración de andino se llama `production.ini`, y se lo puede encontrar y modificar 
de la siguiente manera:

```bash
# Ingresar al contenedor

cd /etc/portal
docker-compose -f latest.yml exec portal /bin/bash

# Una vez adentro, abrimos el archivo production.ini, y buscamos la sección que necesita ser modificada
 
vim /etc/ckan/default/production.ini

# Editamos y, luego de salir del contenedor, lo reiniciamos

docker-compose -f latest.yml restart portal nginx
```    

### Cambiar la configuración del SMTP

Por defecto, andino usará un servidor postfix integrado para el envío de emails.
Para usar un servidor SMTP propio, debemos cambiar la configuración del archivo `production.ini`.
Para lograrlo, podemos hacerlo de dos formas:

1 ) Ingresando al contenedor.

Debemos buscar y editar en el archivo `production.ini` la configuración
de email que luce como:

```
## Email settings

error_email_from=<EMAIL>
smtp.server = postfix
#smtp.starttls = False
smtp.user = portal
smtp.password = <PASSWORD>
smtp.mail_from = administrador
```

Para saber cómo hacerlo, leer la sección que explica 
[cómo modificar el archivo de configuración](#modificar-el-archivo-de-configuracion)

2 ) Ejecutando comandos paster

Suponiendo que nuestro servidor SMTP esta en smtp.gmail.com, la dirección de correo del usuario es `<EMAIL>`, 
la contraseña de esa dirección de correo `<PASSWORD>pass` y queremos usar "tls", podemos ejecutar los siguientes comandos:

```
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.server=smtp.gmail.com:587";
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.user=<EMAIL>";
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.password=<PASSWORD>";
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.starttls=True";
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.mail_from=<EMAIL>";

# Finalmente reiniciamos el contenedor
docker-compose -f latest.yml restart portal nginx
```

Tener en cuenta que si se utiliza un servidor SMTP, se debe setear la configuración con **un correo electrónico 
de @gmail.com**, y que **starttls debe estar en True**.

### Cambiar el remitente de los correos electrónicos que envía Andino

Para modificar el remitente de los correos electrónicos que el sistema envía (por ejemplo los de creación de usuarios nuevos o los de olvido de contraseña) se deben seguir los pasos de la sección [Cambiar la configuración del SMTP](#cambiar-la-configuracion-del-smtp) pero modificando el atributo de configuración `smtp.mail_from`.

### Cambiar el id del container de Google Tag Manager

Será necesario modificar la configuración en el archivo `production.ini`.

Para saber cómo hacerlo, leer la sección que explica 
[cómo modificar el archivo de configuración](#modificar-el-archivo-de-configuracion).

Esta vez, buscaremos la configuración debajo de la sección [app:main] (vas a encontrar campos como "superThemeTaxonomy" y "ckan.site.title")

El campo que estamos buscando es `ckan.google_tag_manager.gtm_container_id`


En caso de no encontrar el campo mencionado, lo podemos agregar:

`ckan.google_tag_manager.gtm_container_id = { id que necesitás guardar }`

### Google Tag Manager

Para configurar el código se seguimiento de Google Tag Manager ejecutar el siguiente comando:

    docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "ckan.google_tag_manager.gtm_container_id=<tu código de seguimiento GTM>";

    # Finalmente reiniciamos el contenedor
    docker-compose -f latest.yml restart portal nginx

### Deshabilitar la URL `/catalog.xlsx`

En caso de desear deshabilitar la URL `/catalog.xlsx` puede ejecutar el siguiente comando:

    docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "andino.disable_catalog_xlsx_url=True";

En caso de querer restaurarlo, debe configurar el atributo `andino.disable_catalog_xlsx_url` al valor `False`.
    
### Configuración de la llamada de invalidación de caché

La aplicación puede ser configurada para hacer una llamada HTTP ante cada cambio en los metadatos del portal.
Esta llamada (A.K.A. "hook") puede configurarse para ser a cualquier URL, y usando cualquier método HTTP.
Se deberá utilizar un campo llamado `andino.cache_clean_hook`, que tendrá asignada la URL a la cual<commit_msg>Agrego una sección para modificar el id del tag de Google Analytics en la documentación de mantenimiento<commit_after><!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->


- [Mantenimiento](#mantenimiento)
    - [Exploración de la instancia de andino](#exploracion-de-la-instancia-de-andino)
        - [¿Qué está corriendo docker?](#que-esta-corriendo-docker)
        - [Ingresar al contendor pricipal de andino](#ingresar-al-contendor-pricipal-de-andino)
        - [Listar todas las `Propiedades` de cada contenedor](#listar-todas-las-propiedades-de-cada-contenedor)
    - [Administración de usuarios](#administracion-de-usuarios)
        - [Crear un usuario ADMIN](#crear-un-usuario-admin)
        - [Listar mis usuarios](#listar-mis-usuarios)
        - [Ver los datos de un usuario](#ver-los-datos-de-un-usuario)
        - [Crear un nuevo usuario](#crear-un-nuevo-usuario)
        - [Crear un nuevo usuario extendido](#crear-un-nuevo-usuario-extendido)
        - [Eliminar un usuario](#eliminar-un-usuario)
        - [Cambiar password de un usuario](#cambiar-password-de-un-usuario)
    - [Configuraciones de andino](#configuraciones-de-andino)
        - [Cambiar la configuración del SMTP](#cambiar-la-configuracion-del-smtp)
        - [Modificar el archivo de configuración](#modificar-el-archivo-de-configuracion)
        - [Cambiar el remitente de los correos electrónicos que envía Andino](#cambiar-el-remitente-de-los-correos-electronicos-que-envia-andino)
        - [Google Tag Manager](#google-tag-manager)
        - [Cambiar el id del container de Google Tag Manager](#cambiar-el-id-del-container-de-google-tag-manager)
        - [Cambiar el id del tag de Google Analytics](#cambiar-el-id-del-tag-de-google-analytics)
        - [Deshabilitar la URL `/catalog.xlsx`](#deshabilitar-la-url--catalogxlsx)
        - [Cache](#configuraci%C3%B3n-de-la-llamada-de-invalidaci%C3%B3n-de-cach%C3%A9)
        - [Cache externa](#cache-externa)
    - [Acceso a los datos de andino](#acceso-a-los-datos-de-andino)
        - [Encontrar los volúmenes de mi andino dentro del filesystem del host](#encontrar-los-volumenes-de-mi-andino-dentro-del-filesystem-del-host)
        - [Ver las direcciones IP de mis contenedores](#ver-las-direcciones-ip-de-mis-contenedores)
        - [Ver las variables de entorno que tienen mis contenedores](#ver-las-variables-de-entorno-que-tienen-mis-contenedores)
        - [Acceder con un cliente de PostgreSQL a las bases de datos](#acceder-con-un-cliente-de-postgresql-a-las-bases-de-datos)
    - [Eliminar objetos definitivamente](#eliminar-objetos-definitivamente)
        - [Purgar Organizaciones Borradas](#purgar-organizaciones-borradas)
        - [Purgar Grupos Borrados](#purgar-grupos-borrados)
        - [Purgar Datasets Borrados](#purgar-datasets-borrados)
        - [Listar nombres de los datasets contenidos en Andino](#listar-nombres-de-los-datasets-contenidos-en-andino)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

# Mantenimiento

## Exploración de la instancia de andino

### ¿Qué está corriendo docker?

Para obtener una lista de lo que está corriendo actualmente Docker, podemos usar el siguiente comando:

    docker ps # Tabla de ejecucion actual
    docker ps -q # Listado de IDs de cada contenedor
    docker ps -aq # Listado de IDs de todos los contenedores disponibles.


### Ingresar al contendor pricipal de andino

El contenedor principal de andino, donde se ejecuta la aplicación CKAN, es denominado `portal`. Para ingresar en una sesión de consola en el contenedor, ejecutar:

    docker-compose -f /etc/portal/latest.yml exec portal /bin/bash


### Listar todas las `Propiedades` de cada contenedor

    docker-compose -f /etc/portal/latest.yml ps -q portal solr db | xargs -n 1 | while read container; do docker inspect $container; done


## Administración de usuarios

### Crear un usuario ADMIN

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/add_admin.sh mi_nuevo_usuario_admin email_del_usuario_admin

El comando solicitará la contraseña del usuario administrador.


### Listar mis usuarios

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user list

### Ver los datos de un usuario

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user nombre-de-usuario


### Crear un nuevo usuario

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user add nombre-de-usuario


### Crear un nuevo usuario extendido

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user add nomber [email=<EMAIL> password=<PASSWORD> apikey=unsecretomisticonoleible]


### Eliminar un usuario

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user remove nombre-de-usuario


### Cambiar password de un usuario

    docker-compose -f /etc/portal/latest.yml exec portal /etc/ckan_init.d/paster.sh --plugin=ckan user setpass nombre-de-usuario

## Configuraciones de andino

### Modificar el archivo de configuración

El archivo de configuración de andino se llama `production.ini`, y se lo puede encontrar y modificar 
de la siguiente manera:

```bash
# Ingresar al contenedor

cd /etc/portal
docker-compose -f latest.yml exec portal /bin/bash

# Una vez adentro, abrimos el archivo production.ini, y buscamos la sección que necesita ser modificada
 
vim /etc/ckan/default/production.ini

# Editamos y, luego de salir del contenedor, lo reiniciamos

docker-compose -f latest.yml restart portal nginx
```    

### Cambiar la configuración del SMTP

Por defecto, andino usará un servidor postfix integrado para el envío de emails.
Para usar un servidor SMTP propio, debemos cambiar la configuración del archivo `production.ini`.
Para lograrlo, podemos hacerlo de dos formas:

1 ) Ingresando al contenedor.

Debemos buscar y editar en el archivo `production.ini` la configuración
de email que luce como:

```
## Email settings

error_email_from=<EMAIL>
smtp.server = postfix
#smtp.starttls = False
smtp.user = portal
smtp.password = <PASSWORD>
smtp.mail_from = administrador
```

Para saber cómo hacerlo, leer la sección que explica 
[cómo modificar el archivo de configuración](#modificar-el-archivo-de-configuracion)

2 ) Ejecutando comandos paster

Suponiendo que nuestro servidor SMTP esta en smtp.gmail.com, la dirección de correo del usuario es `<EMAIL>`, 
la contraseña de esa dirección de correo `mi_pass` y queremos usar "tls", podemos ejecutar los siguientes comandos:

```
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.server=smtp.gmail.com:587";
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.user=<EMAIL>";
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.password=<PASSWORD>";
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.starttls=True";
docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "smtp.mail_from=<EMAIL>";

# Finalmente reiniciamos el contenedor
docker-compose -f latest.yml restart portal nginx
```

Tener en cuenta que si se utiliza un servidor SMTP, se debe setear la configuración con **un correo electrónico 
de @<EMAIL>**, y que **starttls debe estar en True**.

### Cambiar el remitente de los correos electrónicos que envía Andino

Para modificar el remitente de los correos electrónicos que el sistema envía (por ejemplo los de creación de usuarios nuevos o los de olvido de contraseña) se deben seguir los pasos de la sección [Cambiar la configuración del SMTP](#cambiar-la-configuracion-del-smtp) pero modificando el atributo de configuración `smtp.mail_from`.

### Cambiar el id del container de Google Tag Manager

Será necesario modificar la configuración en el archivo `production.ini`.

Para saber cómo hacerlo, leer la sección que explica 
[cómo modificar el archivo de configuración](#modificar-el-archivo-de-configuracion).

Esta vez, buscaremos la configuración debajo de la sección [app:main] (vas a encontrar campos como "superThemeTaxonomy" y "ckan.site.title")

El campo que estamos buscando es `ckan.google_tag_manager.gtm_container_id`


En caso de no encontrar el campo mencionado, lo podemos agregar:

`ckan.google_tag_manager.gtm_container_id = { id que necesitás guardar }`

### Google Tag Manager

Para configurar el código se seguimiento de Google Tag Manager ejecutar el siguiente comando:

    docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "ckan.google_tag_manager.gtm_container_id=<tu código de seguimiento GTM>";

    # Finalmente reiniciamos el contenedor
    docker-compose -f latest.yml restart portal nginx
    
### Cambiar el id del tag de Google Analytics

Será necesario modificar el archivo de configuración `production.ini`.

Para saber cómo hacerlo, leer la sección que explica 
[cómo modificar el archivo de configuración](#modificar-el-archivo-de-configuracion).

La sección a buscar luce de esta manera:

```
## Google Analytics
googleanalytics.id = { un id }
googleanalytics_resource_prefix = { un prefix }
googleanalytics.domain = { un dominio }
```

Lo que se debe modificar es el campo `googleanalytics.id`.

### Deshabilitar la URL `/catalog.xlsx`

En caso de desear deshabilitar la URL `/catalog.xlsx` puede ejecutar el siguiente comando:

    docker-compose -f latest.yml exec portal /etc/ckan_init.d/update_conf.sh "andino.disable_catalog_xlsx_url=True";

En caso de querer restaurarlo, debe configurar el atributo `andino.disable_catalog_xlsx_url` al valor `False`.
    
### Configuración de la llamada de invalidación de caché

La aplicación puede ser configurada para hacer una llamada HTTP ante cada cambio en los metadatos del portal.
Esta llamada (A.K.A. "hook") puede configurarse para ser a cualquier URL, y usando cualquier método HTTP.
Se deberá utilizar un campo llamado `andino.cache_clean_hook`, que tendrá asignada la URL a la cual
{'fraction_non_alphanumeric': 0.09460563955864323, 'fraction_numerical': 0.0012259910093992644, 'mean_word_length': 4.075706507648431, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 29, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5144171', 'n_tokens_mistral': 6950, 'n_tokens_neox': 6708, 'n_words': 1986}