netbox-community / netbox-healthcheck-plugin

Apache License 2.0
20 stars 7 forks source link

Custom Redis settings not respected #13

Open tacerus opened 2 months ago

tacerus commented 2 months ago

NetBox HealthCheck Plugin version

0.1.4

NetBox version

3.7.5

Python version

3.11

Steps to Reproduce

  1. Install the plugin
  2. Configure NetBox to use a Redis database other than localhost
  3. Query the healthcheck endpoint

Expected Behavior

It should use the Redis server and database specified in the REDIS section in configuration.py.

Observed Behavior

This plugin uses the default Redis adapter of the django-health-check module, which connects to redis://localhost:6379/1 by default, or to a REDIS_URL from settings.py.

NetBox does not expose REDIS_URL in the hidden settings.py, so the health check fails if any a database host and/or database number other than redis://localhost:6379/1 are used.

Currently I work around it with a hacky patch in django-health-check:

--- a/health_check/contrib/redis/backends.py    2024-05-03 23:37:27.000000000 +0200
+++ b/health_check/contrib/redis/backends.py    2024-05-04 22:11:02.448929656 +0200
@@ -12,7 +12,7 @@
 class RedisHealthCheck(BaseHealthCheckBackend):
     """Health check for Redis."""

-    redis_url = getattr(settings, "REDIS_URL", "redis://localhost/1")
+    redis_url = getattr(settings, "CACHES", {}).get("default", {}).get("LOCATION", getattr(settings, "REDIS_URL", "redis://localhost/1"))
shepherdjay commented 2 days ago

Even using above replacement running in docker-compose with the demo docker-compose setup on v3.5.4 Redis fails to work because of authentication issues.

Its not clear if this is the plugin issue to solve though -- its inheriting from django health which also has open issue on redis auth via documentation. -- https://github.com/revsys/django-health-check/issues/279 - so probably needs to be solved by properly providing REDIS_URL in the core netbox maybe?

I'm not sure - was hoping this plugin would be a nice drop in for some health checking but I've been unable to get it to work.