/metrobus-app

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Consulta de alcaldías y unidades de metrobus

Tabla de contenido

Especificación del problema

Desarrollar un pipeline de análisis de datos utilizando los datos abiertos de la Ciudad de México correspondientes a la ubicación de las unidades del metrobús durante la última hora para obtener un histórico de la posición en la que se encuentra cada unidad que pueda ser consultado mediante un API Rest (o Graphql) filtrando por unidad o por alcaldía.

Diagrama general simplificado de la solución

Diagrama general de la solución

Diagrama general simplificado de la solución

Diagramas de los procesos de la solucion

Proceso de consulta de datos abiertos y registro de información

Proceso de consulta de datos abiertos

Diagrama de proceso de consulta de datos abiertos y registro de información

Procesos de consulta de información via API

Proceso de consulta via API

Diagrama de proceso de consulta via API

Versiones

  • Python: 3.7.8
  • MySQL: 8.0.20
  • Docker: 19.03.8
  • Kubernetes
    • Major:"1"
    • Minor:"18"

Módulos

Domain [domain]

Contiene la especificación de los objetos que mapean las tablas usando el ORM SQLAlchemy

El script de la base de datos puede ser consultado aquí, el cual genera el siguiente diagrama:

Diagrama de base de datos

Diagrama de base de datos

Town hall sync [town_hall_sync]

Este módulo recupera la información del API pública "limite de las alcaldias" y realiza el guardado en la base de datos de la aplicación.

Unit location sync [unit_location_sync]

Determina a que alcaldia pertenece cada ubicacion obtenida de API pública "Ubicación de las unidades del Metrobús" utilizando Matlibplot y Numpy, posteriormente registra la información en la base de datos.

API [api]

Define el Schema del API Graphql utilizando Graphene y resuelve cada petición

A continuación se presenta el Schema utilizado:

type Unit{
	id: Int
	label: String
	vehicleId: String
}

type TownHall{
	id: Int
	name: String
}

type UnitLocation{
	id: Int
	latitude: Float
	longitude: Float
	unit: Unit
	townHall: TownHall
	date: DateTime
}

scalar DateTime

type Query{
    """
    Obtain a list of units that have been within a town hall
    """
    availableUnits: [Unit]
    """
    Get the history of locations/dates of a unit
    """
    unitLocationHistory(
        unitId: Int!
    ): [UnitLocation]
    """
    Get a list of available town halls
    """
    availableTownHalls: [TownHall]
    """
    Get all the units that were in a town hall
    """
    unitsInTownHall(
        townHallId: Int!
    ): [Unit]
}
schema{
    query: Query
}

Test [test]

Contiene los test unitarios.

Archivos

Contenedores

API

Dockerfile.api

Imagen base utilizada: python:3.7.8-slim

Construccion:

 docker build -t krabbit1993/metrobus_api:1.0.2 -f Dockerfile.api .

Cron

Dockerfile.cron

Imagen base utilizada: mysql:8.0.20

Construccion:

 docker build -t krabbit1993/metrobus_cron:1.0.2 -f Dockerfile.cron .

Database

Dockerfile.database

Imagen base utilizada: python:3.7.8-slim

Construccion:

 docker build -t krabbit1993/metrobus_database:1.0.0 -f Dockerfile.database .

Archivos de despliege para Kubernetes