Skip to content

Commit 3d378a5

Browse files
committed
Merge remote-tracking branch 'origin/main' into centralized-check-registry
2 parents 1c48eb7 + a7cad34 commit 3d378a5

File tree

7 files changed

+86
-3
lines changed

7 files changed

+86
-3
lines changed

src/dockerflow/checks/registry.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,10 @@ def _build_results_payload(
193193
max_level = 0
194194

195195
for name, errors in checks_results:
196+
# Log check results with appropriate level.
197+
for error in errors:
198+
logger.log(error.level, "%s: %s", error.id, error.msg)
199+
196200
errors = [e for e in errors if e.id not in silenced_check_ids]
197201
level = max([0] + [e.level for e in errors])
198202

src/dockerflow/django/views.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# This Source Code Form is subject to the terms of the Mozilla Public
22
# License, v. 2.0. If a copy of the MPL was not distributed with this
33
# file, you can obtain one at http://mozilla.org/MPL/2.0/.
4+
import logging
5+
46
from django.conf import settings
57
from django.core.checks.registry import registry as django_check_registry
68
from django.http import HttpResponse, HttpResponseNotFound, JsonResponse
@@ -15,6 +17,9 @@
1517
)
1618

1719

20+
logger = logging.getLogger("dockerflow.django")
21+
22+
1823
def version(request):
1924
"""
2025
Returns the contents of version.json or a 404.

src/dockerflow/flask/app.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,17 @@ def my_version(root):
354354
"""
355355
self._version_callback = func
356356

357+
@property
358+
def checks(self):
359+
"""
360+
Backwards compatibility alias.
361+
"""
362+
message = (
363+
"`dockerflow.checks` is deprecated, use `checks.get_checks()` instead."
364+
)
365+
warnings.warn(message, DeprecationWarning)
366+
return checks.get_checks()
367+
357368
def init_check(self, check, obj):
358369
"""
359370
Backwards compatibility method.
@@ -366,8 +377,6 @@ def check(self, func=None, name=None):
366377
"""
367378
Backwards compatibility method.
368379
"""
369-
message = (
370-
"`dockerflow.check()` is deprecated, use `checks.register()` instead."
371-
)
380+
message = "`dockerflow.check()` is deprecated, use `checks.register()` instead."
372381
warnings.warn(message, DeprecationWarning)
373382
return checks.register(func, name)

src/dockerflow/sanic/app.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,17 @@ async def my_version(root):
255255
"""
256256
self._version_callback = func
257257

258+
@property
259+
def checks(self):
260+
"""
261+
Backwards compatibility alias.
262+
"""
263+
message = (
264+
"`dockerflow.checks` is deprecated, use `checks.get_checks()` instead."
265+
)
266+
warnings.warn(message, DeprecationWarning)
267+
return checks.get_checks()
268+
258269
def init_check(self, check, obj):
259270
"""
260271
Backwards compatibility method.

tests/django/test_django.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,22 @@ def test_heartbeat_silenced(client, settings):
101101
assert "error" not in content["details"]
102102

103103

104+
@pytest.mark.django_db
105+
def test_heartbeat_logging(dockerflow_middleware, reset_checks, rf, settings, caplog):
106+
request = rf.get("/__heartbeat__")
107+
settings.DOCKERFLOW_CHECKS = [
108+
"tests.django.django_checks.warning",
109+
"tests.django.django_checks.error",
110+
]
111+
checks.register()
112+
113+
with caplog.at_level(logging.INFO, logger="dockerflow.checks.registry"):
114+
dockerflow_middleware.process_request(request)
115+
logged = [(record.levelname, record.message) for record in caplog.records]
116+
assert ("ERROR", "tests.checks.E001: some error") in logged
117+
assert ("WARNING", "tests.checks.W001: some warning") in logged
118+
119+
104120
@pytest.mark.django_db
105121
def test_lbheartbeat_makes_no_db_queries(dockerflow_middleware, rf):
106122
queries = CaptureQueriesContext(connection)

tests/flask/test_flask.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,23 @@ def warning_check():
162162
assert "warning_check" not in details
163163

164164

165+
def test_heartbeat_logging(app, dockerflow, caplog):
166+
@checks.register
167+
def error_check():
168+
return [checks.Error("some error", id="tests.checks.E001")]
169+
170+
@checks.register()
171+
def warning_check():
172+
return [checks.Warning("some warning", id="tests.checks.W001")]
173+
174+
with caplog.at_level(logging.INFO, logger="dockerflow.checks.registry"):
175+
app.test_client().get("/__heartbeat__")
176+
177+
logged = [(record.levelname, record.message) for record in caplog.records]
178+
assert ("ERROR", "tests.checks.E001: some error") in logged
179+
assert ("WARNING", "tests.checks.W001: some warning") in logged
180+
181+
165182
def test_lbheartbeat_makes_no_db_queries(dockerflow, app):
166183
with app.app_context():
167184
assert len(get_debug_queries()) == 0
@@ -498,6 +515,8 @@ def test_checks_imports():
498515

499516

500517
def test_heartbeat_checks_legacy(dockerflow, client):
518+
dockerflow.checks.clear()
519+
501520
@dockerflow.check
502521
def error_check():
503522
return [checks.Error("some error", id="tests.checks.E001")]

tests/sanic/test_sanic.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,23 @@ def warning_check():
178178
assert "warning_check" in details
179179

180180

181+
def test_heartbeat_logging(dockerflow, test_client, caplog):
182+
@checks.register
183+
def error_check():
184+
return [checks.Error("some error", id="tests.checks.E001")]
185+
186+
@checks.register()
187+
def warning_check():
188+
return [checks.Warning("some warning", id="tests.checks.W001")]
189+
190+
with caplog.at_level(logging.INFO, logger="dockerflow.checks.registry"):
191+
_, response = test_client.get("/__heartbeat__")
192+
193+
logged = [(record.levelname, record.message) for record in caplog.records]
194+
assert ("ERROR", "tests.checks.E001: some error") in logged
195+
assert ("WARNING", "tests.checks.W001: some warning") in logged
196+
197+
181198
def test_redis_check(dockerflow_redis, mocker, test_client):
182199
assert "check_redis_connected" in checks.get_checks()
183200
mocker.patch.object(sanic_redis.core, "from_url", fake_redis)
@@ -259,6 +276,8 @@ def hostile_callback(request):
259276

260277

261278
def test_heartbeat_checks_legacy(dockerflow, test_client):
279+
dockerflow.checks.clear()
280+
262281
@dockerflow.check
263282
def error_check():
264283
return [checks.Error("some error", id="tests.checks.E001")]

0 commit comments

Comments
 (0)