def heartbeat(): """ Sequentially runs each of the memcached, redis, and celery health checks. Returns a 500 if any raise ServiceDown, otherwise returns a 200 with an empty body. """ celery, memcached, redis = True, True, True # create an shared celery app for testing from recommendation.factory import create_queue app = create_queue() try: celery_status(app) except ServiceDown: celery = False try: memcached_status() except ServiceDown: memcached = False try: redis_status(app) except ServiceDown: redis = False # close any opened connections to broker app.close() return jsonify({ 'celery': celery, 'memcached': memcached, 'redis': redis }), (200 if all([celery, memcached, redis]) else 500)
def heartbeat(): """ Sequentially runs each of the memcached, redis, and celery health checks. Returns a 500 if any raise ServiceDown, otherwise returns a 200 with an empty body. """ celery, memcached, redis = True, True, True # create an shared celery app for testing from recommendation.factory import create_queue app = create_queue() try: celery_status(app) except ServiceDown: celery = False try: memcached_status() except ServiceDown: memcached = False try: redis_status(app) except ServiceDown: redis = False # close any opened connections to broker app.close() return jsonify({ 'celery': celery, 'memcached': memcached, 'redis': redis }), (200 if all([celery, memcached, redis]) else 500)
def test_new_app(self): self.app.config.update({self.TEST_KEY: self.TEST_VALUE}) queue = create_queue() eq_(type(queue), Celery) ok_(self.TEST_KEY not in queue.conf.keys())
def test_existing_app(self): self.app.config.update({self.TEST_KEY: self.TEST_VALUE}) queue = create_queue(self.app) eq_(type(queue), Celery) eq_(queue.conf[self.TEST_KEY], self.TEST_VALUE)
def test_new_app(self): self.app.config.update({self.TEST_KEY: self.TEST_VALUE}) queue = create_queue() eq_(type(queue), Celery) ok_(self.TEST_KEY not in queue.conf.keys())
def test_existing_app(self): self.app.config.update({self.TEST_KEY: self.TEST_VALUE}) queue = create_queue(self.app) eq_(type(queue), Celery) eq_(queue.conf[self.TEST_KEY], self.TEST_VALUE)
from recommendation import tasks # noqa from recommendation.factory import create_app, create_queue application = create_app() celery = create_queue()
def test_celery_status_workers_down(self, mock_ping): mock_ping.return_value = MEMCACHED_PING_BAD with self.assertRaises(ServiceDown): celery_status(create_queue())
def test_redis_status_fail(self, mock_ping): mock_ping.side_effect = RedisError with self.assertRaises(ServiceDown): redis_status(create_queue())
def test_celery_status_pass(self, mock_ping): mock_ping.return_value = MEMCACHED_PING_OK celery_status(create_queue()) self.assert_(True)
def test_redis_status_fail(self, mock_ping): mock_ping.side_effect = RedisError with self.assertRaises(ServiceDown): redis_status(create_queue())
def test_redis_status_pass(self, mock_ping): redis_status(create_queue()) self.assert_(True)
import hashlib from recommendation import conf from recommendation.factory import create_queue from recommendation.memcached import memcached from recommendation.search.recommendation import SearchRecommendation queue = create_queue() def make_key(query): return '_'.join([ conf.KEY_PREFIX, hashlib.md5(str(query).lower().encode('utf-8')).hexdigest() ]) @queue.task(name='main.recommend') def recommend(query): recommendation = SearchRecommendation(query).do_search(query) key = make_key(query) memcached.set(key, recommendation, time=conf.MEMCACHED_TTL) return recommendation
def test_celery_status_workers_down(self, mock_ping): mock_ping.return_value = MEMCACHED_PING_BAD with self.assertRaises(ServiceDown): celery_status(create_queue())
def test_celery_status_no_clusters(self, mock_ping): mock_ping.return_value = MEMCACHED_PING_NO_CLUSTERS with self.assertRaises(ServiceDown): celery_status(create_queue())
def test_celery_status_pass(self, mock_ping): mock_ping.return_value = MEMCACHED_PING_OK celery_status(create_queue()) self.assert_(True)
def test_celery_status_no_clusters(self, mock_ping): mock_ping.return_value = MEMCACHED_PING_NO_CLUSTERS with self.assertRaises(ServiceDown): celery_status(create_queue())
def test_redis_status_pass(self, mock_ping): redis_status(create_queue()) self.assert_(True)