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