##// END OF EJS Templates
user sessions: get ability to count memcached sessions
marcink -
r2141:7a5a9bba default
parent child Browse files
Show More
@@ -19,9 +19,11 b''
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import os
22 import re
22 23 import time
23 24 import datetime
24 25 import dateutil
26
25 27 from rhodecode.model.db import DbSession, Session
26 28
27 29
@@ -140,11 +142,51 b' class FileAuthSessions(BaseAuthSessions)'
140 142 return stats['callbacks']
141 143
142 144
145
143 146 class MemcachedAuthSessions(BaseAuthSessions):
144 147 SESSION_TYPE = 'ext:memcached'
148 _key_regex = re.compile(r'ITEM (.*_session) \[(.*); (.*)\]')
149
150 def _get_client(self):
151 import memcache
152 client = memcache.Client([self.config.get('beaker.session.url')])
153 return client
154
155 def _get_telnet_client(self, host, port):
156 import telnetlib
157 client = telnetlib.Telnet(host, port, None)
158 return client
159
160 def _run_telnet_cmd(self, client, cmd):
161 client.write("%s\n" % cmd)
162 return client.read_until('END')
163
164 def key_details(self, client, slab_ids, limit=100):
165 """ Return a list of tuples containing keys and details """
166 cmd = 'stats cachedump %s %s'
167 for slab_id in slab_ids:
168 for key in self._key_regex.finditer(
169 self._run_telnet_cmd(client, cmd % (slab_id, limit))):
170 yield key
145 171
146 172 def get_count(self):
147 return self.NOT_AVAILABLE
173 client = self._get_client()
174 count = self.NOT_AVAILABLE
175 try:
176 slabs = []
177 for server, slabs_data in client.get_slabs():
178 slabs.extend(slabs_data.keys())
179
180 host, port = client.servers[0].address
181 telnet_client = self._get_telnet_client(host, port)
182 keys = self.key_details(telnet_client, slabs)
183 count = 0
184 for _k in keys:
185 count += 1
186 except Exception:
187 return count
188
189 return count
148 190
149 191 def get_expired_count(self, older_than_seconds=None):
150 192 return self.NOT_AVAILABLE
General Comments 0
You need to be logged in to leave comments. Login now