Merge lp:~fgallina/django-preflight/safer-cache-gather into lp:django-preflight

Proposed by Fabián Ezequiel Gallina
Status: Merged
Approved by: Fabián Ezequiel Gallina
Approved revision: 31
Merged at revision: 31
Proposed branch: lp:~fgallina/django-preflight/safer-cache-gather
Merge into: lp:django-preflight
Diff against target: 125 lines (+88/-2)
2 files modified
preflight/models.py (+5/-2)
preflight/tests.py (+83/-0)
To merge this branch: bzr merge lp:~fgallina/django-preflight/safer-cache-gather
Reviewer Review Type Date Requested Status
Ricardo Kirkner (community) Approve
Review via email: mp+226739@code.launchpad.net

Commit message

More robust hit_rate calculation for gather_caches

To post a comment you must log in.
Revision history for this message
Ricardo Kirkner (ricardokirkner) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'preflight/models.py'
--- preflight/models.py 2014-01-28 17:37:22 +0000
+++ preflight/models.py 2014-07-14 19:46:56 +0000
@@ -275,8 +275,11 @@
275 except Exception as exc:275 except Exception as exc:
276 stats = dict(error=unicode(exc))276 stats = dict(error=unicode(exc))
277 else:277 else:
278 stats['hit_rate'] = 100 * int(278 try:
279 stats.get('get_hits')) / int(stats.get('cmd_get'))279 stats['hit_rate'] = 100 * int(
280 stats.get('get_hits')) / int(stats.get('cmd_get'))
281 except (ZeroDivisionError, TypeError):
282 stats['hit_rate'] = 0
280283
281 stats['backend'] = cache_settings['BACKEND']284 stats['backend'] = cache_settings['BACKEND']
282 stats['host'] = cache_settings.get('LOCATION', 'No location given')285 stats['host'] = cache_settings.get('LOCATION', 'No location given')
283286
=== modified file 'preflight/tests.py'
--- preflight/tests.py 2014-01-28 17:37:22 +0000
+++ preflight/tests.py 2014-07-14 19:46:56 +0000
@@ -5,6 +5,7 @@
5from cStringIO import StringIO5from cStringIO import StringIO
66
7from django.contrib.auth.models import AnonymousUser, User7from django.contrib.auth.models import AnonymousUser, User
8from django.conf import settings
8from django.core.management import call_command9from django.core.management import call_command
9from django.core.urlresolvers import reverse10from django.core.urlresolvers import reverse
10from django.http import HttpResponse11from django.http import HttpResponse
@@ -31,6 +32,7 @@
31 Preflight,32 Preflight,
32 authenticate,33 authenticate,
33 cleanse_setting,34 cleanse_setting,
35 gather_caches,
34 gather_checks,36 gather_checks,
35 gather_switches,37 gather_switches,
36 gather_gargoyle,38 gather_gargoyle,
@@ -230,6 +232,87 @@
230 self.assertFalse(self.basic_preflight.authenticate(request))232 self.assertFalse(self.basic_preflight.authenticate(request))
231233
232234
235class GatherCaches(TestCase):
236
237 def setUp(self):
238 CACHES = {
239 'default': {
240 'BACKEND': ('django.core.cache.backends.'
241 'memcached.MemcachedCache'),
242 'LOCATION': 'default_location',
243 },
244 'extra': {
245 'BACKEND': ('django.core.cache.backends.'
246 'locmem.LocMemCache'),
247 'LOCATION': 'extra_location',
248 }
249 }
250 patcher = patch.multiple(settings, CACHES=CACHES)
251 patcher.start()
252 self.addCleanup(patcher.stop)
253
254 def set_stats(self, stats):
255 patcher = patch('preflight.models.get_cache')
256 mock_get_cache = patcher.start()
257 self.addCleanup(patcher.stop)
258 MockCache = Mock()
259 if isinstance(stats, dict):
260 mock_stats = [[None, stats]]
261 MockCache._cache.get_stats.return_value = mock_stats
262 else:
263 mock_stats = []
264 for stat in stats:
265 mock_stats.append([[None, stat]])
266 MockCache._cache.get_stats.side_effect = mock_stats
267 mock_get_cache.return_value = MockCache
268
269 def test_not_raises_zero_division_error(self):
270 self.set_stats([{'get_hits': 10, 'cmd_get': 0},
271 {'get_hits': 10, 'cmd_get': 10}])
272 caches = gather_caches()
273
274 expected = {
275 'default': {
276 'backend': settings.CACHES['default']['BACKEND'],
277 'host': settings.CACHES['default']['LOCATION'],
278 'hit_rate': 0,
279 'get_hits': 10,
280 'cmd_get': 0,
281 },
282 'extra': {
283 'backend': settings.CACHES['extra']['BACKEND'],
284 'host': settings.CACHES['extra']['LOCATION'],
285 'hit_rate': 100,
286 'get_hits': 10,
287 'cmd_get': 10,
288 }
289 }
290 self.assertEqual(caches, expected)
291
292 def test_not_raises_type_error(self):
293 self.set_stats([{'get_hits': 10, 'cmd_get': None},
294 {'get_hits': None, 'cmd_get': 10}])
295 caches = gather_caches()
296
297 expected = {
298 'default': {
299 'backend': settings.CACHES['default']['BACKEND'],
300 'host': settings.CACHES['default']['LOCATION'],
301 'hit_rate': 0,
302 'get_hits': 10,
303 'cmd_get': None,
304 },
305 'extra': {
306 'backend': settings.CACHES['extra']['BACKEND'],
307 'host': settings.CACHES['extra']['LOCATION'],
308 'hit_rate': 0,
309 'get_hits': None,
310 'cmd_get': 10,
311 }
312 }
313 self.assertEqual(caches, expected)
314
315
233class GatherChecksTestCase(TestCase):316class GatherChecksTestCase(TestCase):
234317
235 def test(self):318 def test(self):

Subscribers

People subscribed via source and target branches