1. import redis
  2. import logging
  3. import os
  4. # Configure logging
  5. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  6. class MessageQueueComponents:
  7. def __init__(self, redis_host='localhost', redis_port=6379):
  8. """
  9. Initializes components for message queue diagnostics with fallback logic.
  10. """
  11. self.redis = self._create_redis_connection(redis_host, redis_port)
  12. self.logger = logging.getLogger(__name__)
  13. def _create_redis_connection(self, host, port):
  14. """
  15. Creates a Redis connection with fallback.
  16. """
  17. try:
  18. redis_conn = redis.Redis(host=host, port=port, db=0)
  19. redis_conn.ping() # Test connection
  20. self.logger.info("Successfully connected to Redis.")
  21. return redis_conn
  22. except redis.exceptions.ConnectionError as e:
  23. self.logger.error(f"Failed to connect to Redis at {host}:{port}. Attempting fallback...")
  24. # Attempt to connect with default values
  25. try:
  26. redis_conn = redis.Redis(host='localhost', port=6379, db=0)
  27. redis_conn.ping()
  28. self.logger.info("Successfully connected to Redis using default settings after fallback.")
  29. return redis_conn
  30. except redis.exceptions.ConnectionError as fallback_e:
  31. self.logger.error(f"Failed to connect to Redis even with default settings. Using mock object.")
  32. return MockRedis() # Return a mock object if all fails
  33. def get(self, key):
  34. """
  35. Retrieves a value from the queue. Uses redis.
  36. """
  37. try:
  38. return self.redis.get(key)
  39. except Exception as e:
  40. self.logger.error(f"Error getting from Redis: {e}")
  41. return None
  42. def set(self, key, value):
  43. """
  44. Sets a value in the queue. Uses redis.
  45. """
  46. try:
  47. self.redis.set(key, value)
  48. except Exception as e:
  49. self.logger.error(f"Error setting in Redis: {e}")
  50. def delete(self, key):
  51. """
  52. Deletes a key from the queue. Uses redis.
  53. """
  54. try:
  55. self.redis.delete(key)
  56. except Exception as e:
  57. self.logger.error(f"Error deleting from Redis: {e}")
  58. class MockRedis:
  59. """
  60. A mock Redis object for testing and fallback scenarios.
  61. """
  62. def __init__(self):
  63. self.data = {}
  64. def get(self, key):
  65. return self.data.get(key)
  66. def set(self, key, value):
  67. self.data[key] = value
  68. def delete(self, key):
  69. if key in self.data:
  70. del self.data[key]

Add your comment