def _create_queue(self, queue_type, group): """ Create a queue (not thread safe) :param queue_type: :param group: :return: """ info("Creating queue {}".format(self.queue_name(queue_type, group))) try: return LibreNMS.RedisQueue(self.queue_name(queue_type, group), namespace='librenms.queue', host=self.config.redis_host, port=self.config.redis_port, db=self.config.redis_db, password=self.config.redis_pass, unix_socket_path=self.config.redis_socket ) except ImportError: if self.config.distributed: critical("ERROR: Redis connection required for distributed polling") critical("Please install redis-py, either through your os software repository or from PyPI") exit(2) except Exception as e: if self.config.distributed: critical("ERROR: Redis connection required for distributed polling") critical("Could not connect to Redis. {}".format(e)) exit(2) return Queue()
def test_redis_queue(self): if 'redis' not in sys.modules: self.assertTrue(True, 'Skipped Redis tests') else: rc = redis.Redis() rc.delete('queue:testing') # make sure no previous data exists qm = LibreNMS.RedisQueue('testing', namespace='queue') thread = threading.Thread(target=self.queue_thread, args=(qm, None, False)) thread.daemon = True thread.start() thread = threading.Thread(target=self.queue_thread, args=(qm, '2')) thread.daemon = True thread.start() qm.put(2) qm.put(3) qm.put(4) sleep(0.05) self.assertEqual(2, qm.qsize()) self.assertEqual('3', qm.get()) self.assertEqual('4', qm.get(), "Did not get second item in queue") self.assertEqual(None, qm.get_nowait(), "Did not get None when queue should be empty") self.assertTrue(qm.empty(), "Queue should be empty")