Code Monkey home page Code Monkey logo

dgt's Introduction

DGT Distintivos Ambientales de las Matrículas Españolas

Esta pequeña aplicación de ejemplo consulta el servicio web, ejem, de la DGT que permite obtener el tipo de distintivo ambiental asociado a una matrícula.

Es posible ejecutarlo en local en dos modos:

  1. Como línea de comandos.
  2. Levantando un servidor web, exponiendo ciertos API endpoints.

Plates CLI

La CLI ofrece el comando scrap, incluyendo la posibilidad de personalizar la respuesta con algunos flags:

Scraps all car plates retrieving their ECO sticker, starting in 0000BBB

Usage:
  dgt scrap [flags]

Flags:
  -F, --from string    Plate where to scrap from
  -h, --help           help for scrap
  -p, --persist        If the result will be persisted in a data store
  -P, --plate string   Plate to scrap. It will ignore the 'persist' flag
  -U, --until string   Plate where to scrap until (included)

Flags

Flag Short version Type Default Requerido Descripción
--from -F string no Una matrícula válida desde la que empezar el procesado
--until -U string no Una matrícula válida en la que terminar el procesado
--persist -p boolean no no Si es necesario persistir el resultado en un almacenamiento
--plate -P string no Si tiene valor, únicamente se procesará esa matrícula

Docker

Es posible ejecutar la herramienta como una imagen Docker, previa construcción de la misma:

$ docker build -t mdelapenya/dgt:latest .

Comprobar una matrícula

$ docker run --rm  mdelapenya/dgt:latest scrap --plate 9334LSL

Escanear todas las mátriculas

$ docker run --rm  mdelapenya/dgt:latest scrap

Escanear todas las mátriculas desde una dada

Ésto es útil para saber por qué matrícula vamos:

$ docker run --rm  mdelapenya/dgt:latest scrap --from 9334LSL

Escanear todas las mátriculas desde una hasta otra

Ésto es útil para saber por qué matrícula vamos:

$ docker run --rm  mdelapenya/dgt:latest scrap --from 0000LSL --until 1000LSL

Docker Compose

Es posible ejecutar la herramienta como un stack de Docker Compose, incluyendo el servidor web con el API de matrículas así como una base de datos MySQL para la persistencia de los datos. Además, se levantarán tantos contenedores como letras llevamos en las matrículas (de la B a la M), que ejecutarán en su arranque la CLI para escanear todas las matrículas que comiencen por dicha letra, terminando en la última matrícula de la serie.

```shell
$ docker compose up --build

Accediendo a la base de datos es posible consultar las matrículas procesadas y sus distintivos:

$ docker exec -it dgt-db-1 mysql -u root -ppassw0rd --database=dgt
# retornar todas las matrículas
mysql> select p.plate, s.description, s.emoji from plates p, stickers s where s.sticker_id=p.sticker_id;
# agregar matrículas por distintivo
mysql> select s.description, s.emoji, count(1) as count from plates p, stickers s where s.sticker_id=p.sticker_id group by s.sticker_id;

O utilizando el siguiente script:

./scripts/count.sh

Dump de la base de datos

Si necesitas extraer la base de datos, ejecuta el siguiente script:

./scripts/backup.sh

Un fichero SQL se creará en el directorio database/sql con el nombre 001_dgt.sql, de modo que si recreas la ejecución desde cero, la base de datos aparecerá pre-cargada.

Importante decir que tendrás que actualizar las matrículas a utilizar en el fichero docker-compose.yml, para que no se solapen con las que ya están en la base de datos. Lee el siguiente apartado.

Errores de memoria

Si por alguna razón se queda sin memoria el equipo en el que se ejecuta, puedes ejecutar el siguiente script:

./scripts/oom.sh

Generará un fichero plates.txt en el directorio actual, con la última matrícula procesada, que puedes usar para reanudar el proceso.

Básicamente, el script hace lo siguiente:

  1. para todos los servicios menos la base de datos:
$ docker stop dgt-go-j-1 dgt-go-l-1 dgt-go-f-1 dgt-go-h-1 dgt-go-c-1 dgt-go-k-1 dgt-go-m-1 dgt-go-b-1 dgt-go-g-1 dgt-go-d-1
  1. detecta en qué punto se quedaron cada uno de los servicios:
# ejecuta una consulta en servicio de la base de datos, obteniendo el valor de la última matrícula procesada, en este caso para la letra M
$ docker exec -it dgt-db-1 mysql -u root -ppassw0rd --database=dgt -e "select plate from plates where plate_id=(select plate_id from plates where plate like '____M__' order by plate_id desc limit 1);" >> ./plates.txt
  1. Coge esas matrículas y cambia el valor del flag --from para el servicio de cada letra en el fichero docker-compose.yml para que sea la siguiente a la última procesada.
  2. Arranca los servicios de nuevo con docker compose up, para que coja los nuevos valores de matrícula desde los que empezar a procesar.
./scripts/restart.sh

Plates API

Get sticker for a plate

GET /plates/:plate
Request
curl "http://localhost:8080/plates/0000bbb"
Response 200 OK
{"result":"Etiqueta Ambiental C"}

Escribe la matrícula sin guiones ni espacios (0000XXX)

dgt's People

Contributors

dependabot[bot] avatar mdelapenya avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

gormm1980

dgt's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.