381 self.info('sql cache usage: %s/%s (%s%%)', hits+ misses, nocache, |
381 self.info('sql cache usage: %s/%s (%s%%)', hits+ misses, nocache, |
382 ((hits + misses) * 100) / (hits + misses + nocache)) |
382 ((hits + misses) * 100) / (hits + misses + nocache)) |
383 except ZeroDivisionError: |
383 except ZeroDivisionError: |
384 pass |
384 pass |
385 |
385 |
386 def stats(self): |
386 def stats(self): # XXX restrict to managers session? |
|
387 import threading |
387 results = {} |
388 results = {} |
388 for hits, misses, title in ( |
389 for hits, misses, title in ( |
389 (self.querier.cache_hit, self.querier.cache_miss, 'rqlt_st'), |
390 (self.querier.cache_hit, self.querier.cache_miss, 'rqlt_st'), |
390 (self.system_source.cache_hit, self.system_source.cache_miss, 'sql'), |
391 (self.system_source.cache_hit, self.system_source.cache_miss, 'sql'), |
391 ): |
392 ): |
392 results['%s_cache_hit' % title] = hits |
393 results['%s_cache_hit' % title] = hits |
393 results['%s_cache_miss' % title] = misses |
394 results['%s_cache_miss' % title] = misses |
394 results['%s_cache_hit_percent' % title] = (hits * 100) / (hits + misses) |
395 results['%s_cache_hit_percent' % title] = (hits * 100) / (hits + misses) |
395 |
|
396 results['sql_no_cache'] = self.system_source.no_cache |
396 results['sql_no_cache'] = self.system_source.no_cache |
397 results['nb_open_sessions'] = len(self._sessions) |
397 results['nb_open_sessions'] = len(self._sessions) |
398 results['nb_threads'] = len(self._running_threads) |
398 results['nb_active_threads'] = threading.activeCount() |
|
399 results['looping_tasks'] = ', '.join(str(t) for t in self._looping_tasks) |
399 results['available_pools'] = self._available_pools.qsize() |
400 results['available_pools'] = self._available_pools.qsize() |
400 return results |
401 return results |
401 |
402 |
402 def _login_from_email(self, login): |
403 def _login_from_email(self, login): |
403 session = self.internal_session() |
404 session = self.internal_session() |