Skip to content
This repository was archived by the owner on Mar 27, 2023. It is now read-only.

Commit 336377c

Browse files
committed
Merge branch 'develop' into 35-add-flower-for-celery-monitoring
2 parents 19d9232 + 4febffc commit 336377c

File tree

30 files changed

+229
-358
lines changed

30 files changed

+229
-358
lines changed

.env.template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ GOOGLE_OAUTH2_SECRET=abcde-fghij
1818
SOCIAL_AUTH_FACEBOOK_KEY = ''
1919
SOCIAL_AUTH_FACEBOOK_SECRET = ''
2020

21-
CELERY_BROKER_URL=redis://redis:6379
22-
CELERY_RESULT_BACKEND=redis://redis:6379
21+
CELERY_BROKER_URL=redis://redis:6379/0
22+
CELERY_RESULT_BACKEND=redis://redis:6379/1
2323

2424
DJANGO_EMAIL_HOST=mailhog
2525
DJANGO_EMAIL_PORT=1025

awscdk/awscdk/backend.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@ def __init__(self, scope: core.Construct, id: str, **kwargs,) -> None:
6060
priority=1,
6161
path_patterns=["*"],
6262
health_check=elbv2.HealthCheck(
63-
healthy_http_codes="200-299", path="/api/hello-world",
63+
healthy_http_codes="200-299", path="/api/health-check/",
6464
),
6565
)

awscdk/awscdk/cdk_app_root.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ def __init__(
5555
self.static_site_stack = StaticSiteStack(self, "StaticSiteStack")
5656
self.static_site_bucket = self.static_site_stack.static_site_bucket
5757

58+
self.backend_assets = BackendAssetsStack(self, "BackendAssetsStack")
59+
self.backend_assets_bucket = self.backend_assets.assets_bucket
60+
61+
self.cloudfront = CloudFrontStack(self, "CloudFrontStack")
62+
5863
if os.path.isdir("./quasar/dist/pwa"):
5964
s3_deployment.BucketDeployment(
6065
self,
@@ -64,11 +69,6 @@ def __init__(
6469
distribution=self.cloudfront.distribution,
6570
)
6671

67-
self.backend_assets = BackendAssetsStack(self, "BackendAssetsStack")
68-
self.backend_assets_bucket = self.backend_assets.assets_bucket
69-
70-
self.cloudfront = CloudFrontStack(self, "CloudFrontStack")
71-
7272
self.ecs = EcsStack(self, "EcsStack")
7373

7474
self.rds = RdsStack(self, "RdsStack")

awscdk/awscdk/celery_default.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
aws_ecs as ecs,
55
aws_logs as logs,
66
aws_cloudformation as cloudformation,
7-
aws_sqs as sqs,
87
)
98

109

awscdk/awscdk/cloudfront.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,11 @@ def __init__(self, scope: core.Construct, id: str, **kwargs,) -> None:
6565
behaviors=[
6666
cloudfront.Behavior(
6767
allowed_methods=ALL_METHODS,
68+
forwarded_values={"query_string": True},
6869
path_pattern=path_pattern,
69-
max_ttl=core.Duration.seconds(0),
7070
min_ttl=core.Duration.seconds(0),
71-
forwarded_values={"query_string": True},
71+
default_ttl=core.Duration.seconds(0),
72+
max_ttl=core.Duration.seconds(0),
7273
)
7374
for path_pattern in ["/static/*", "/media/*"]
7475
],

backend/apps/core/management/commands/__init__.py

Whitespace-only changes.

backend/apps/core/management/commands/watch_celery.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,32 @@
66
https://avilpage.com/2017/05/how-to-auto-reload-celery-workers-in-development.html
77
"""
88

9+
import os
910
import shlex
1011
import subprocess
1112

1213
from django.core.management.base import BaseCommand
1314
from django.utils import autoreload
1415

1516

16-
def restart_celery():
17-
cmd = "pkill -9 celery"
17+
def restart_celery(queue=None, concurrency=None):
18+
cmd = 'pkill -9 celery'
1819
subprocess.call(shlex.split(cmd))
19-
cmd = "celery worker --app=backend.celery_app:app --loglevel=info --concurrency=2 --max-memory-per-child=150000" # noqa
20+
cmd = f"celery worker --app=backend.celery_app:app --loglevel=info -Q {queue} -n worker-{queue}@%h --concurrency={os.environ.get('CONCURRENT_WORKERS', 2)} --max-memory-per-child=150000" # noqa
2021
subprocess.call(shlex.split(cmd))
2122

2223

2324
class Command(BaseCommand):
25+
def add_arguments(self, parser):
26+
parser.add_argument(
27+
'-q', '--queue', nargs=1, default='celery', type=str
28+
)
29+
parser.add_argument('-c', '--concurrency', type=str)
30+
2431
def handle(self, *args, **options):
25-
print("Starting celery worker with autoreload...")
26-
autoreload.run_with_reloader(restart_celery)
32+
queue = options['queue'][0]
33+
concurrency = options['concurrency'] or 1
34+
print('Starting celery worker with autoreload...')
35+
autoreload.run_with_reloader(
36+
restart_celery, queue=queue, concurrency=concurrency
37+
)

backend/apps/core/tasks.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ class BaseTask(celery.Task):
1515
@task(bind=True, base=BaseTask)
1616
def debug_task(self):
1717
time.sleep(10)
18-
print("Task is done")
1918

2019

2120
@periodic_task(
@@ -30,9 +29,15 @@ def debug_periodic_task():
3029
@task(bind=True, base=BaseTask)
3130
def send_test_email_task(self):
3231
send_mail(
33-
"Subject here",
34-
"Here is the message.",
32+
"Email subject",
33+
"Email message.",
3534
"from@example.com",
3635
["to@example.com"],
3736
fail_silently=False,
3837
)
38+
39+
40+
@task(bind=True, base=BaseTask)
41+
def sleep_task(self, seconds):
42+
time.sleep(int(seconds))
43+
return f"Slept {seconds} seconds"

backend/apps/core/urls.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
from . import views
44

55
urlpatterns = [
6-
path("", views.home, name="home"),
7-
path("hello-world", views.hello_world, name="hello-world"),
8-
path("debug-task/", views.debug_task_view, name="debug-task",),
6+
path("health-check/", views.health_check, name="health-check"),
7+
path("celery/sleep-task/", views.sleep_task_view, name="sleep-task"),
98
path(
109
"debug/send-test-email/",
1110
views.send_test_email,

backend/apps/core/views.py

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22

33
from django.conf import settings
44
from django.http import JsonResponse
5-
from django.views.decorators.cache import never_cache
65
from django.views.generic import TemplateView
76
from rest_framework import viewsets
7+
from rest_framework.decorators import api_view
88

9-
from apps.core.tasks import debug_task, send_test_email_task
10-
11-
# Serve Vue Application via template for GitLab CI
12-
index_view = never_cache(TemplateView.as_view(template_name="index.html"))
9+
from apps.core.tasks import debug_task, send_test_email_task, sleep_task
1310

1411
r = settings.REDIS
1512

@@ -21,46 +18,34 @@ def get(self, request):
2118
value = r.get("cached_value")
2219

2320
if value:
24-
print(value)
2521
count = value
2622
return JsonResponse({"count": count})
2723

2824
def post(self, request):
2925
new_count = int(request.data["count"])
30-
print("setting value to cache:")
31-
print(new_count)
3226
r.set("cached_value", new_count)
3327
new_count = r.get("cached_value")
34-
print("value from cache is...")
35-
print(new_count)
3628
return JsonResponse({"count": new_count})
3729

3830
def delete(self, request):
3931
r.delete("cached_value")
4032
return JsonResponse({"count": r.get("cached_value")})
4133

4234

43-
def hello_world(request):
44-
response = JsonResponse(
45-
{
46-
"message": "Hello, World!",
47-
"git_sha": os.environ.get("GIT_SHA", "<git SHA>"),
48-
"debug": settings.DEBUG,
49-
"format": "JSON",
50-
"ssm_param": os.environ.get("MY_PARAM", "param_value"),
51-
}
52-
)
35+
def health_check(request):
36+
response = JsonResponse({"message": "OK"})
5337
return response
5438

5539

56-
def home(request):
57-
response = JsonResponse({"message": "Root"})
58-
return response
59-
60-
61-
def debug_task_view(request):
62-
debug_task.delay()
63-
return JsonResponse({"message": "Task sent to queue."})
40+
@api_view(["POST"])
41+
def sleep_task_view(request):
42+
sleep_seconds = request.data.get("seconds")
43+
sleep_task.apply_async(
44+
[sleep_seconds], queue=settings.CELERY_QUEUE_DEFAULT
45+
)
46+
return JsonResponse(
47+
{"message": f"Sleep task submitted ({sleep_seconds} seconds)"}
48+
)
6449

6550

6651
def send_test_email(request):

0 commit comments

Comments
 (0)