domingo, 23 de octubre de 2016

OpenERP 7 Como Acortar Tiempo de Sesion.

Tenemos ya tiempo trabajando con OpenERP 7 hoy conocido como Odoo, estuvimos teniendo dificultades con el servidor, no siempre pero a veces nos reportaban de repente que ya los usuarios no podian accesar al sistema por que enviaba un mensaje relacionado a saturaciones de sesiones.

El servidor seguia operando con los usuarios ya firmados pero ya no dejaba firmarse a nadie. Lo unico era reiniciar el servicio tanto de PostgreSQL como Odoo.

No era algo que sucediera muy a menudo, pero decidimos revisar el caso, la configuracion de Odoo que se localiza en /etc, no tienen ningun parametro donde se le indique el numero de sesiones disponibles, solo parametros de manejo de memoria.

Lo cual no sirve para este problema, investigando un poco nos enteramos que Odoo 7 , desconozco si las versiones mas recientes les suceda lo mismo.

En Odoo 7 la sesion de un usuario es de 7 dias o.0.. asi es, si te firmas en el GUI, puedes dejar tu sesion durante 7 dias y no ahi problema, puedes llegar al siguiente dia y seguir trabajando sin tener que volverte a firmar por varios dias.

Pero esta felicidad que le puede causar a un servidor? Pues saturacion de conexiones, aunque muchos dicen que hoy en dia existen servidores con mucho hw, memoria, esto no indica que en algun punto el abuso de las sesiones vaya a causar problemas como los que pasamos.

PostgreSQL su configuracion de fabrica permite 100 conexiones simultaneas, el maneja muy bien sus sesiones, una conexion a Odoo abre cerca de 3 sesiones, la mayoria de la gente lo que hace es en su navegador tener hasta 10 sesiones del GUI para poder llevar a cabo su trabajo.

Nos toco ver hasta 878 conexiones al puerto 8069 de Odoo, solo imaginense cuanto memoria debe usar el servidor para satisfacer este demanda?

Teniamos que estar revisando las conexiones a PostgreSQL para ver si habia sesiones con mas de 15 minutos y tronarlas si estaban IDLE o sea sin hacer nada, pero era una labor medio tediosa, hicimos un batch y a veces al matar las sesiones afectabamos ciertas tareas y el servidor a veces acaba en modo 'Recovery' lo cual no era buen ya que dejaba de dar servicio por varios minutos mientras se reparaba.

Tenia que a ver una manera de cerrar sesiones de Odoo, mucha gente dejaba su lugar por horas y esto para nosotros era un desperdicio en realidad, mal gasto de recursos.

Dandole vueltas en google, en un maillist relacionado con Odoo una usuario menciono que existia un parametro donde uno maneja el tiempo que deseamos dure una sesion en Odoo. Yo tiempo atras pregunte en el foro oficial de Odoo, pero en verdad ahi nunca he obtenido respuesta de ayuda :-\.

Pues busque un archivo de nombre: http.py, el cual se localiza en 'web/addons/web', dentro de ese archivo buscamos esta linea:

def session_gc(session_store):
    if random.random() < 0.001:
        # we keep session one week
        last_week = time.time() - 60*60*24*7
        for fname in os.listdir(session_store.path):
            path = os.path.join(session_store.path, fname)
            try:
                if os.path.getmtime(path) < last_week:
                    os.unlink(path)
            except OSError:
                pass

La linea:

last_week = time.time() - 60*60*24*7

El comentario lo dice todo, 'we keep session one week', 1 semana wow...

Entonces tomamos la decision de cortar esa comodidad y dejarla en 1 hora la sesion, si en una hora el usuario no hace nada en su equipo, Odoo cortara su conexion cuando regrese y quiera operan el GUI, el sistema le arrojara un mensaje como este:

Figura 1: Aviso de Sesion Terminada.


Esto le indicara a el usuario que debe volver a firmarse, afecta la operacion a sera menos productivo el usuario? No.

Entonces a partir de ese momento fueron avisados un dia antes para que no se asombraran y estuvieran alertas a esos mensajes para que no digan que no informamos antes de hacer cambios globales en el sistema.

Pero se me paso decirles como quedo mi linea verdad, asi termino:

last_week = time.time() - 3600

El tiempo se mide en segundos, hemos cortado la sesion de 7 dias a 1 hora.

Despues de esto, claro que muchos usuarios que no leen sus correos empezaron a hablarnos por ese 'error', ya solo les aclaramos y adios llamadas de susto.

Hemos estado monitoreando el sistema y hemos notado un numero de sesiones mas estable, ya no tantas conexiones abiertas y ademas de ello ya pocas conexiones IDLE de PostgreSQL lo cual es bueno, otro detalle que hemos tenido que cortar sesiones pero todo bajo control y esto nos a disminuido los 'Recovery Mode' a 0.

Esto es bueno ya que 1 minuto sin sistema es gente ociosa y corajes inecesarios, usuario feliz y contento, operacion fluida.

Hasta qui les dejo esta detalle con Odoo 7, ojala a alguien le sirva, ya que mucho tiempo estuve buscando este dato, hasta pronto.

No hay comentarios:

Publicar un comentario