mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-23 15:56:45 -04:00
Merge pull request #1651 from alphagov/eventlet-celery-workers-service-callbacks
Switch service callback workers to use eventlet pool implementation
This commit is contained in:
@@ -1,31 +1,33 @@
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
from flask import current_app
|
|
||||||
from celery import Celery, Task
|
from celery import Celery, Task
|
||||||
|
|
||||||
|
|
||||||
class NotifyTask(Task):
|
def make_task(app):
|
||||||
abstract = True
|
class NotifyTask(Task):
|
||||||
start = None
|
abstract = True
|
||||||
|
start = None
|
||||||
|
|
||||||
def on_success(self, retval, task_id, args, kwargs):
|
def on_success(self, retval, task_id, args, kwargs):
|
||||||
elapsed_time = time.time() - self.start
|
elapsed_time = time.time() - self.start
|
||||||
current_app.logger.info(
|
app.logger.info(
|
||||||
"{task_name} took {time}".format(
|
"{task_name} took {time}".format(
|
||||||
task_name=self.name, time="{0:.4f}".format(elapsed_time)
|
task_name=self.name, time="{0:.4f}".format(elapsed_time)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
|
|
||||||
def on_failure(self, exc, task_id, args, kwargs, einfo):
|
def on_failure(self, exc, task_id, args, kwargs, einfo):
|
||||||
# ensure task will log exceptions to correct handlers
|
# ensure task will log exceptions to correct handlers
|
||||||
current_app.logger.exception('Celery task failed')
|
app.logger.exception('Celery task failed')
|
||||||
super().on_failure(exc, task_id, args, kwargs, einfo)
|
super().on_failure(exc, task_id, args, kwargs, einfo)
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
# ensure task has flask context to access config, logger, etc
|
# ensure task has flask context to access config, logger, etc
|
||||||
with current_app.app_context():
|
with app.app_context():
|
||||||
self.start = time.time()
|
self.start = time.time()
|
||||||
return super().__call__(*args, **kwargs)
|
return super().__call__(*args, **kwargs)
|
||||||
|
|
||||||
|
return NotifyTask
|
||||||
|
|
||||||
|
|
||||||
class NotifyCelery(Celery):
|
class NotifyCelery(Celery):
|
||||||
@@ -34,7 +36,7 @@ class NotifyCelery(Celery):
|
|||||||
super().__init__(
|
super().__init__(
|
||||||
app.import_name,
|
app.import_name,
|
||||||
broker=app.config['BROKER_URL'],
|
broker=app.config['BROKER_URL'],
|
||||||
task_cls=NotifyTask,
|
task_cls=make_task(app),
|
||||||
)
|
)
|
||||||
|
|
||||||
self.conf.update(app.config)
|
self.conf.update(app.config)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import json
|
|||||||
from notifications_utils.statsd_decorators import statsd
|
from notifications_utils.statsd_decorators import statsd
|
||||||
|
|
||||||
from app import (
|
from app import (
|
||||||
|
db,
|
||||||
DATETIME_FORMAT,
|
DATETIME_FORMAT,
|
||||||
notify_celery,
|
notify_celery,
|
||||||
)
|
)
|
||||||
@@ -30,6 +31,9 @@ def send_delivery_status_to_service(self, notification_id):
|
|||||||
# No delivery receipt API info set
|
# No delivery receipt API info set
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Release DB connection before performing an external HTTP request
|
||||||
|
db.session.close()
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"id": str(notification_id),
|
"id": str(notification_id),
|
||||||
"reference": str(notification.client_reference),
|
"reference": str(notification.client_reference),
|
||||||
|
|||||||
@@ -95,6 +95,6 @@ applications:
|
|||||||
NOTIFY_APP_NAME: delivery-worker-receipts
|
NOTIFY_APP_NAME: delivery-worker-receipts
|
||||||
|
|
||||||
- name: notify-delivery-worker-service-callbacks
|
- name: notify-delivery-worker-service-callbacks
|
||||||
command: scripts/run_app_paas.sh celery -A run_celery.notify_celery worker --loglevel=INFO --concurrency=11 -Q service-callbacks
|
command: scripts/run_app_paas.sh celery -A run_celery.notify_celery worker --loglevel=INFO -P eventlet -c 1000 -Q service-callbacks
|
||||||
env:
|
env:
|
||||||
NOTIFY_APP_NAME: delivery-worker-service-callbacks
|
NOTIFY_APP_NAME: delivery-worker-service-callbacks
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
|
|
||||||
# notify_celery is referenced from manifest_delivery_base.yml, and cannot be removed
|
# notify_celery is referenced from manifest_delivery_base.yml, and cannot be removed
|
||||||
|
|||||||
Reference in New Issue
Block a user