Simple logging en python.

Tras muchas idas y venidas con la gestión de logs en python, he llegado a este tutorial de python que resume bastante bien la gestión más básica que se puede hacer en una aplicación con los logs:
En mi caso, los requisitos son:
– El log se guarda en fichero.
– El fichero debe rotar.
– Desde cualquier clase del workspace se puede acceder al log

import logging
import logging.handlers as handlers
 
# Se le puede poner cualquier nombre

logger = logging.getLogger(‘mi_app_name’)
logger.setLevel(logging.INFO)


#Log handler to file:
logHandler = handlers.RotatingFileHandler(‘mi_archivo_salida.log’, maxBytes=1000, backupCount=2)
logHandler.setLevel(logging.INFO)
# output format
formatter = logging.Formatter(‘%(asctime)s – %(name)s – %(levelname)s – %(message)s’)
logHandler.setFormatter(formatter)


logger.addHandler(logHandler)


# Comprobar que todos los logs van al mismo fichero:
logger.info(“Primer mensaje al log de tipo INFO”)
logger.error(“Primer mensaje al log de tipo ERROR”)
En cada clase que se vaya a usar el log, se instancia en el init, y luego se usa como un atributo de la clase:

class ejemplo:
“”” Clase de ejemplo para ver el log “””


def __init__(self):
“””Inicializa el objeto “””
self.logger = logging.getLogger(‘mi_app_name’) # Configurar el log.
 
     def metodo1. (self):
“”” Metodo 1 “””

self.logger.info(‘Mensaje de ejemplo 1’)

 
 
Para saber mucho más sobre los logs en python: https://docs.python.org/3/howto/logging-cookbook.html

Aplicación web en Go: Tiempos de espera autobús en distintas paradas.

Siguiendo con el artículo de la Api de la EMT Madrid, vamos a ver cómo hacer un servidor de aplicaciones en Go para móvil.

Entorno de programación

Lo primero es configurar nuestro editor. En otros casos, yo he usado sublime text para editar Go. En este caso, he optado por eclipse y el plugin para go:

https://github.com/GoClipse/goclipse/blob/latest/documentation/Installation.md#installation

En el servidor de desarrollo, instalamos go:

 wget -c https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz
tar -C /usr/local -xzf go*.tar.gz
 echo export PATH=$PATH:/usr/local/go/bin >> /etc/profile
# DEBIAN:
export PATH=$PATH:/usr/local/go/bin >> /etc/bash.bashrc

Crear la aplicación web

Recomiendo leer el tutorial de Google para comenzar a escribir aplicaciones web.

 mkdir myproj
mkdir myproj/src
mkdir myproj/doc
# Creamos el archivo con la aplicación web:
touch myproj/src/busdm.go

Para compilar

go build  myproj/src/busdm.go
go run myproj/src/busdm.go

Para ver los resultados, si hemos usado el puerto 8080:

http://localhost:8080/

El algoritmo

El algoritmo es bastante sencillo suma a los autobuses el tiempo andando, y da el menor tiempo posible. Quita todos aquellos autobuses que llegarán a parada antes de que lleguemos andando.

Métodos:

  • Decide: Devuelve la parada hacia la que hay que andar y el autobús
  • GetStopTime (IdStop): devuelve el tiempo del menor autobús. Hace la llamada al servicio de la EMT, y devuelve una lista (IdStop, IdBus, Time).
  • GetWalkingTime (IdStop): devuelve el tiempo que nos cuesta llegar andando.

GetStopTime

 Estructura JSON

Desde el ejemplo, se puede sacar la estructura JSON para hacer el parsing  http://json2struct.mervine.net/

GetWalkingTime

 

Decide