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)
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")
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()
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")
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()