##// END OF EJS Templates
user-sessions: added option to cleanup redis based sessions in user session interface.
ergo -
r3539:78388d8d default
parent child Browse files
Show More
@@ -379,6 +379,10 b' rc_cache.cache_repo_longterm.max_size = '
379 beaker.session.type = file
379 beaker.session.type = file
380 beaker.session.data_dir = %(here)s/data/sessions
380 beaker.session.data_dir = %(here)s/data/sessions
381
381
382 ## redis sessions
383 #beaker.session.type = ext:redis
384 #beaker.session.url = redis://127.0.0.1:6379/2
385
382 ## db based session, fast, and allows easy management over logged in users
386 ## db based session, fast, and allows easy management over logged in users
383 #beaker.session.type = ext:database
387 #beaker.session.type = ext:database
384 #beaker.session.table_name = db_session
388 #beaker.session.table_name = db_session
@@ -354,6 +354,10 b' rc_cache.cache_repo_longterm.max_size = '
354 beaker.session.type = file
354 beaker.session.type = file
355 beaker.session.data_dir = %(here)s/data/sessions
355 beaker.session.data_dir = %(here)s/data/sessions
356
356
357 ## redis sessions
358 #beaker.session.type = ext:redis
359 #beaker.session.url = redis://127.0.0.1:6379/2
360
357 ## db based session, fast, and allows easy management over logged in users
361 ## db based session, fast, and allows easy management over logged in users
358 #beaker.session.type = ext:database
362 #beaker.session.type = ext:database
359 #beaker.session.table_name = db_session
363 #beaker.session.table_name = db_session
@@ -23,6 +23,7 b' import re'
23 import time
23 import time
24 import datetime
24 import datetime
25 import dateutil
25 import dateutil
26 import pickle
26
27
27 from rhodecode.model.db import DbSession, Session
28 from rhodecode.model.db import DbSession, Session
28
29
@@ -142,7 +143,6 b' class FileAuthSessions(BaseAuthSessions)'
142 return stats['callbacks']
143 return stats['callbacks']
143
144
144
145
145
146 class MemcachedAuthSessions(BaseAuthSessions):
146 class MemcachedAuthSessions(BaseAuthSessions):
147 SESSION_TYPE = 'ext:memcached'
147 SESSION_TYPE = 'ext:memcached'
148 _key_regex = re.compile(r'ITEM (.*_session) \[(.*); (.*)\]')
148 _key_regex = re.compile(r'ITEM (.*_session) \[(.*); (.*)\]')
@@ -195,6 +195,43 b' class MemcachedAuthSessions(BaseAuthSess'
195 raise CleanupCommand('Cleanup for this session type not yet available')
195 raise CleanupCommand('Cleanup for this session type not yet available')
196
196
197
197
198 class RedisAuthSessions(BaseAuthSessions):
199 SESSION_TYPE = 'ext:redis'
200
201 def _get_client(self):
202 import redis
203 args = {
204 'socket_timeout': 60,
205 'url': self.config.get('beaker.session.url')
206 }
207
208 client = redis.StrictRedis.from_url(**args)
209 return client
210
211 def get_count(self):
212 client = self._get_client()
213 return len(client.keys('beaker_cache:*'))
214
215 def get_expired_count(self, older_than_seconds=None):
216 expiry_date = self._seconds_to_date(older_than_seconds)
217 return self.NOT_AVAILABLE
218
219 def clean_sessions(self, older_than_seconds=None):
220 client = self._get_client()
221 expiry_time = time.time() - older_than_seconds
222 deleted_keys = 0
223 for key in client.keys('beaker_cache:*'):
224 data = client.get(key)
225 if data:
226 json_data = pickle.loads(data)
227 accessed_time = json_data['_accessed_time']
228 if accessed_time < expiry_time:
229 client.delete(key)
230 deleted_keys += 1
231
232 return deleted_keys
233
234
198 class MemoryAuthSessions(BaseAuthSessions):
235 class MemoryAuthSessions(BaseAuthSessions):
199 SESSION_TYPE = 'memory'
236 SESSION_TYPE = 'memory'
200
237
@@ -212,6 +249,7 b' def get_session_handler(session_type):'
212 types = {
249 types = {
213 'file': FileAuthSessions,
250 'file': FileAuthSessions,
214 'ext:memcached': MemcachedAuthSessions,
251 'ext:memcached': MemcachedAuthSessions,
252 'ext:redis': RedisAuthSessions,
215 'ext:database': DbAuthSessions,
253 'ext:database': DbAuthSessions,
216 'memory': MemoryAuthSessions
254 'memory': MemoryAuthSessions
217 }
255 }
General Comments 0
You need to be logged in to leave comments. Login now