Ejemplo n.º 1
0
 def _get_sessions(curs=None):
     from_d = datetime.datetime.now(pytz.utc)
     logger.info("Sessions dumping into db initiated %s", from_d)
     from_d = from_d - datetime.timedelta(minutes=settings.session_valid_minutes)
     logger.debug("Fetching not expired sessions, newer %s. Session valid period: %s minutes",
         from_d, settings.session_valid_minutes)
     f = SessionFilter({'from_update_date': from_d}, {}, ['id'])
     return f.filter_objs(curs)
Ejemplo n.º 2
0
 def _clean(curs=None):
     to_d = datetime.datetime.now()
     logger.info("Sessions cleaning initiated %s", to_d)
     to_d = to_d - datetime.timedelta(minutes=settings.session_valid_minutes)
     logger.debug("Removing session older %s. Session valid period: %s minutes",
         to_d, settings.session_valid_minutes)
     f = SessionFilter({'to_update_date': to_d}, {}, ['id'])
     sessions = f.filter_objs(curs)
     logger.info("Deleting %s sessions", len(sessions))
     mapping.delete_objects(curs, sessions)
     logger.info("Sessions cleaned")
Ejemplo n.º 3
0
extensions.register_type(psycopg2.extensions.UNICODE)

from helixcore import mapping
import helixcore.db.wrapper as wrapper

from helixauth.conf.log import sess_logger as logger
from helixauth.db.filters import SessionFilter
from helixauth.conf import settings
from helixauth.logic.session_utils import dump_into_db


cp = pool.SimpleConnectionPool(1, 2, user=settings.DSN['user'],
    database=settings.DSN['database'], host=settings.DSN['host'],
    password=settings.DSN['password'])
get_connection = cp.getconn
put_connection = cp.putconn

transaction = partial(wrapper.transaction, get_connection, put_connection)


def run():
    while True:
        dump_into_db(transaction)
        logger.debug('Sleeping %s minutes', settings.session_dump_to_db_minutes)
        sleep(settings.session_dump_to_db_minutes * 60)


if __name__=='__main__':
    logger.info('Sessions dumper started')
    run()
Ejemplo n.º 4
0
    def _dump_session(mem_cache, session, curs=None):
        f = SessionFilter({'session_id': session.session_id}, {}, None)
        try:
            s = f.filter_one_obj(curs, for_update=True)
            sess_id = s.session_id.encode('utf8')
            cached_s = mem_cache.get(sess_id)
            if cached_s is None:
                logger.debug("Session %s not found in cache", sess_id)
            else:
                logger.debug("Cached session %s update date: %s",
                    cached_s.session_id, cached_s.update_date)
                logger.debug("Db session %s update date: %s",
                    s.session_id, s.update_date)
                if cached_s.update_date > s.update_date:
                    s.update_date = cached_s.update_date
                    mapping.save(curs, s)
                    logger.debug("Session %s dumped from cache into db", sess_id)
                else:
                    logger.debug("Session %s update_date in db greater or equal " \
                        "cached value. Noting to dump", sess_id)
        except SessionNotFound, e:
            logger.debug("Dumping session failed: %s", e)

    sessions = _get_sessions()
    mem_cache = memcache.Client([settings.session_memcached_addr])
    logger.info("Dumping %s sessions into db", len(sessions))
    for s in sessions:
        _dump_session(mem_cache, s)
    logger.info("Sessions dumping complete")

Ejemplo n.º 5
0
extensions.register_type(psycopg2.extensions.UNICODE)

from helixcore import mapping
import helixcore.db.wrapper as wrapper

from helixauth.conf.log import sess_logger as logger
from helixauth.db.filters import SessionFilter
from helixauth.conf import settings
from helixauth.logic.session_utils import clean


cp = pool.SimpleConnectionPool(1, 2, user=settings.DSN['user'],
    database=settings.DSN['database'], host=settings.DSN['host'],
    password=settings.DSN['password'])
get_connection = cp.getconn
put_connection = cp.putconn

transaction = partial(wrapper.transaction, get_connection, put_connection)


def run():
    while True:
        clean(transaction)
        logger.debug('Sleeping %s minutes', settings.session_cleaning_minutes)
        sleep(settings.session_cleaning_minutes * 60)


if __name__=='__main__':
    logger.info('Sessions cleaner started')
    run()