Skip to content

Commit 8def3ee

Browse files
committed
dockerflow: Add dockerflow module (bug 1873243)
1 parent c52e80b commit 8def3ee

File tree

8 files changed

+69
-2
lines changed

8 files changed

+69
-2
lines changed

pyproject.toml

+6-2
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,22 @@ dependencies = [
1818
]
1919
name = "lando"
2020
requires-python = ">=3.10"
21-
version = "0.1.0"
21+
dynamic = ["version"]
2222

2323
[project.scripts]
2424
lando = "lando.manage:main"
2525

2626
[build-system]
2727
requires = [
28-
"setuptools>=45",
28+
"setuptools>=64",
29+
"setuptools_scm>=8",
2930
"wheel",
3031
]
3132
build-backend = "setuptools.build_meta"
3233

34+
[tool.setuptools_scm]
35+
version_file = "src/lando/version.py"
36+
3337
[tool.setuptools.packages.find]
3438
where = ["src"]
3539

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ celery
1313
datadog
1414
rs-parsepatch
1515
networkx
16+
setuptools-scm

src/lando/dockerflow/__init__.py

Whitespace-only changes.

src/lando/dockerflow/apps.py

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class DockerflowConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'lando.dockerflow'

src/lando/dockerflow/middleware.py

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class DisableCachingMiddleware:
2+
def __init__(self, get_response):
3+
self.get_response = get_response
4+
5+
def __call__(self, request):
6+
response = self.get_response(request)
7+
8+
if request.path.startswith("__"):
9+
response['Cache-Control'] = 'no-cache, no-store, must-revalidate'
10+
response['Pragma'] = 'no-cache'
11+
response['Expires'] = '0'
12+
13+
return response

src/lando/dockerflow/views.py

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from django.views import View
2+
from django.http import JsonResponse
3+
4+
from lando.version import version
5+
6+
class VersionView(View):
7+
def get(self, request):
8+
data = {
9+
"version": version,
10+
}
11+
12+
return JsonResponse(data, status=200, json_dumps_params={'indent': 2})
13+
14+
15+
class HeartbeatView(View):
16+
def get(self, request):
17+
healthy = True
18+
19+
data = {
20+
"healthy": healthy,
21+
"services": {
22+
"lando": healthy,
23+
},
24+
}
25+
26+
status = 200 if healthy else 502
27+
28+
return JsonResponse(data, status=status, json_dumps_params={'indent': 2})
29+
30+
31+
class LoadBalancerHeartbeatView(View):
32+
def get(self, request):
33+
# Since this is for load balancer checks it should not check backing services.
34+
return JsonResponse({}, status=200, json_dumps_params={'indent': 2})

src/lando/settings.py

+2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"mozilla_django_oidc",
4040
"lando.main",
4141
"lando.utils",
42+
"lando.dockerflow",
4243
]
4344

4445
MIDDLEWARE = [
@@ -49,6 +50,7 @@
4950
"django.contrib.auth.middleware.AuthenticationMiddleware",
5051
"django.contrib.messages.middleware.MessageMiddleware",
5152
"django.middleware.clickjacking.XFrameOptionsMiddleware",
53+
"lando.dockerflow.middleware.DisableCachingMiddleware"
5254
]
5355

5456
ROOT_URLCONF = "lando.urls"

src/lando/urls.py

+7
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,16 @@
1818
from django.urls import include, path
1919

2020
from lando.ui.legacy import revisions
21+
from lando.dockerflow import views as DockerflowViews
2122

2223
urlpatterns = [
2324
path("admin/", admin.site.urls),
2425
path("oidc/", include("mozilla_django_oidc.urls")),
2526
path("/D<int:revision_id>/", revisions.Revision.as_view()),
2627
]
28+
29+
urlpatterns += [
30+
path("__version__", DockerflowViews.VersionView.as_view(), name="version"),
31+
path("__heartbeat__", DockerflowViews.HeartbeatView.as_view(), name="heartbeat"),
32+
path("__lbheartbeat__", DockerflowViews.LoadBalancerHeartbeatView.as_view(), name="lbheartbeat"),
33+
]

0 commit comments

Comments
 (0)