Coder Social home page Coder Social logo

dashboard-transito's Introduction

馃殭 馃殫

Dashboard Operativo Transito

Desde el Centro de Control de Tr谩nsito los operadores monitorean el sistema de tr谩nsito y toman decisiones en tiempo real con el objetivo de descomprimir el tr谩nsito. Este dashboard muestra las anomal铆as de diferentes corredores prioritarios de la ciudad de acuerdo a un an谩lisis peri贸dico basado en informaci贸n hist贸rica

La vista principal estar谩 siempre visible en un videowall. El dashboard tambi茅n se accede desde las computadoras de los operarios para visualizar en detalle la anomal铆a, comparar los datos con la vista de tr谩fico de Google Maps y asignarles una causa. Esta data se recolectar谩 para ser usada en un an谩lisis posterior.

La aplicacion se divide en dos partes.

Analisis - ( deteccion de anomalias )

Dispone de una interaccion directa con el servicio cloud Api Sensores https://apisensores.buenosaires.gob.ar, extrae los datos cada un intervalo determinado segun el rango horario y el dia, esto genera un analisis que determina la cantidad de anomalias.

Tambien realiza consultas periodicas a la api de Google Maps, realizando requests a https://maps.googleapis.com/maps/api/directions/json para extraer informacion sobre el comportamiento del transito.

Los errores que pueden generar la falla de conexion entre el servicio apisensores o la perdida conexion con la base de datos, se hacen ademas de logs mediante el envio de email via smtp.buenosaires.gob.ar puerto (25).

Los datos de configuracion estan en analisis/config.py.sample (api + email)

WebApp - ( Dashboard )

Tiene un login, con captcha que necesita tener interaccion con google https://www.google.com/recaptcha/api/siteverify

Instalacion bajo Linux

Tener instalado MySQL 5.1

$ apt-get install mysql-server

Instalamos las dependecias a mano de la siguiente manera:

$ sudo pip install bottle==0.10.1
$ sudo pip install bottle-cork==0.11.1
$ sudo pip install gevent==1.1b1
$ sudo pip install gevent-socketio==0.3.5
$ sudo pip install requests==2.7.0
$ sudo pip install requests[security]
$ sudo pip install MySQL-python==1.2.3
$ sudo pip install sqlalchemy==1.0.8
$ sudo pip install sqlalchemy-migrate==0.9.7
$ sudo pip install python-dateutil
$ sudo pip install numpy==1.9.2
$ sudo pip install pandas==0.16.2
$ sudo pip install gunicorn==19.3.0
$ sudo pip install supervisor==3.1.3
$ sudo pip install requests==2.7.0
$ sudo pip install beaker 

Instalacion bajo Mac

brew install mysql-server
mysql.server start

Instalacion bajo Windows

Bajar e instalar Visual C++ for Python 2.7 y MySQL for Python

Utilizar easy_install en la instalacion dependencias 

Corriendo la app

  • Actualizar datos de conexion a base de datos en (una muestra se puede encontrar en analisis/config.py.sample)

  • Asegurarse que MySQL est谩 corriendo

 mysql.server start
  • Configuraci贸n de la Base de Datos

    • Creaci贸n de las tablas Ir a /db_repository y leer README correspondiente
    • Generaci贸n de data fake (no es necesario en produccion)
$ python analisis/getDataFake.py
  • Configuraci贸n del modelo.

    Para esto hay dos alternativas, utilizar la segunda si la primera falla:

    1. Crear un nuevo modelo

      Cargar datos:

       Bajar los datos de Teracode
      
       $ python analisis/analisis.py --download_lastmonth
      

      Generar Modelo:

       $ python analisis/analisis.py --generate_detection_params
      
    2. Copiar un modelo existente creando un archivo detection_params.json en el directorio ./analisis Un modelo se puede encontrar en /analisis/detection_params.json.sample

Configurar script para actualizac贸n de modelo en cron.

Se ejecuta una vez al d铆a a las 00hs.

sudo crontab -e
0 0 * * * /usr/bin/python2.7 /tu_home/tu_user/dashboard-operativo-transito/analisis/dailyUpdate.py

Ejectuar Schedule e Instanciar Applicacion Web

Estos procesos son los encargados para extracci贸n y carga de datos de Api Sensores de acuerdo a la frecuencia establecida. La funci贸n que se llama peri贸dicamente es executeLoop() ejecutada por schedule.py

A mano en localhost:

  • Ejecutar Schedule. Para los ambientes de desarrollo, homologacion y qa simplemente correr:
$ python analisis/schedule.py 

Para el ambiente de proudccion correr:

$ python analisis/schedule.py production 
  • Instanciar Python Server en Local
$ gunicorn -b 0.0.0.0:8080 --worker-class socketio.sgunicorn.GeventSocketIOWorker app:app 
or
$ python app.py

Como Demonio:

  1. Configurar Variables de configuracion en archivo supervisord.conf, en scheduletransito los path y el user (whoami), en webapp solo el user.

    [program:scheduletransito]

    • command
    • stdout_logfile
    • stderr_logfile
    • user

    [program:webapp]

    • user
  2. Ejecutar supervisor para instanciar los procesos en daemon.

$ supervisord -c supervisord.conf

Verificar que estan daemonizados.

Output esperado a modo ejemplo
supervisorctl -i
scheduletransito RUNNING pid 6734, uptime 0:00:40
webapp RUNNING pid 6733, uptime 0:00:40
supervisor> 

Para monitorear, y reiniciar los procesos

$ cd dashboard-operativo-transito/
$ supervisorctl -i
status scheduletransito
status webapp
restart scheduletransito
restart webapp
supervisor> help

Para parar todos los procesos correr

$ supervisorctl stop all

Documentaci贸n

Licencia

MIT

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.