mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-16 20:48:37 -04:00
Merge pull request #3035 from alphagov/broadcast-event-response
Send broadcast events per provider
This commit is contained in:
@@ -1,17 +1,33 @@
|
||||
import uuid
|
||||
|
||||
from flask import current_app
|
||||
from notifications_utils.statsd_decorators import statsd
|
||||
|
||||
from app import cbc_proxy_client, notify_celery
|
||||
|
||||
from app.config import QueueNames
|
||||
from app.models import BroadcastEventMessageType
|
||||
from app.dao.broadcast_message_dao import dao_get_broadcast_event_by_id
|
||||
from app.dao.broadcast_message_dao import dao_get_broadcast_event_by_id, create_broadcast_provider_message
|
||||
|
||||
|
||||
@notify_celery.task(name="send-broadcast-event")
|
||||
@statsd(namespace="tasks")
|
||||
def send_broadcast_event(broadcast_event_id):
|
||||
for provider in current_app.config['ENABLED_CBCS']:
|
||||
# TODO: Decide whether to send to each provider based on platform admin, service level settings, broadcast
|
||||
# level settings, etc.
|
||||
send_broadcast_provider_message.apply_async(
|
||||
kwargs={'broadcast_event_id': broadcast_event_id, 'provider': provider},
|
||||
queue=QueueNames.NOTIFY
|
||||
)
|
||||
|
||||
|
||||
@notify_celery.task(name="send-broadcast-provider-message")
|
||||
@statsd(namespace="tasks")
|
||||
def send_broadcast_provider_message(broadcast_event_id, provider):
|
||||
broadcast_event = dao_get_broadcast_event_by_id(broadcast_event_id)
|
||||
|
||||
broadcast_provider_message = create_broadcast_provider_message(broadcast_event, provider)
|
||||
|
||||
current_app.logger.info(
|
||||
f'invoking cbc proxy to send '
|
||||
f'broadcast_event {broadcast_event.reference} '
|
||||
@@ -23,9 +39,11 @@ def send_broadcast_event(broadcast_event_id):
|
||||
for polygon in broadcast_event.transmitted_areas["simple_polygons"]
|
||||
]
|
||||
|
||||
cbc_proxy_provider_client = cbc_proxy_client.get_proxy(provider)
|
||||
|
||||
if broadcast_event.message_type == BroadcastEventMessageType.ALERT:
|
||||
cbc_proxy_client.create_and_send_broadcast(
|
||||
identifier=str(broadcast_event.id),
|
||||
cbc_proxy_provider_client.create_and_send_broadcast(
|
||||
identifier=str(broadcast_provider_message.id),
|
||||
headline="GOV.UK Notify Broadcast",
|
||||
description=broadcast_event.transmitted_content['body'],
|
||||
areas=areas,
|
||||
@@ -33,22 +51,43 @@ def send_broadcast_event(broadcast_event_id):
|
||||
expires=broadcast_event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
)
|
||||
elif broadcast_event.message_type == BroadcastEventMessageType.UPDATE:
|
||||
cbc_proxy_client.update_and_send_broadcast(
|
||||
identifier=str(broadcast_event.id),
|
||||
cbc_proxy_provider_client.update_and_send_broadcast(
|
||||
identifier=str(broadcast_provider_message.id),
|
||||
headline="GOV.UK Notify Broadcast",
|
||||
description=broadcast_event.transmitted_content['body'],
|
||||
areas=areas,
|
||||
references=broadcast_event.get_earlier_message_references(),
|
||||
previous_provider_messages=broadcast_event.get_earlier_provider_messages(provider),
|
||||
sent=broadcast_event.sent_at_as_cap_datetime_string,
|
||||
expires=broadcast_event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
)
|
||||
elif broadcast_event.message_type == BroadcastEventMessageType.CANCEL:
|
||||
cbc_proxy_client.cancel_broadcast(
|
||||
identifier=str(broadcast_event.id),
|
||||
cbc_proxy_provider_client.cancel_broadcast(
|
||||
identifier=str(broadcast_provider_message.id),
|
||||
headline="GOV.UK Notify Broadcast",
|
||||
description=broadcast_event.transmitted_content['body'],
|
||||
areas=areas,
|
||||
references=broadcast_event.get_earlier_message_references(),
|
||||
previous_provider_messages=broadcast_event.get_earlier_provider_messages(provider),
|
||||
sent=broadcast_event.sent_at_as_cap_datetime_string,
|
||||
expires=broadcast_event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
)
|
||||
|
||||
|
||||
@notify_celery.task(name='trigger-link-test')
|
||||
def trigger_link_test(provider):
|
||||
"""
|
||||
Currently we only have one hardcoded CBC Proxy, which corresponds to one
|
||||
CBC, and so currently we do not specify the CBC Proxy name
|
||||
|
||||
In future we will have multiple CBC proxies, each proxy corresponding to
|
||||
one MNO's CBC
|
||||
|
||||
This task should invoke other tasks which do the actual link tests, eg:
|
||||
for cbc_name in app.config.ENABLED_CBCS:
|
||||
send_link_test_for_cbc(cbc_name)
|
||||
|
||||
Alternatively this task could be configured to be a Celery group
|
||||
"""
|
||||
identifier = str(uuid.uuid4())
|
||||
message = f"Sending a link test to CBC proxy for provider {provider} with ID {identifier}"
|
||||
current_app.logger.info(message)
|
||||
cbc_proxy_client.get_proxy(provider).send_link_test(identifier)
|
||||
|
||||
@@ -17,6 +17,7 @@ from app.celery.tasks import (
|
||||
process_row,
|
||||
process_incomplete_jobs)
|
||||
from app.celery.letters_pdf_tasks import get_pdf_for_templated_letter
|
||||
from app.celery.broadcast_message_tasks import trigger_link_test
|
||||
from app.config import QueueNames
|
||||
from app.dao.invited_org_user_dao import delete_org_invitations_created_more_than_two_days_ago
|
||||
from app.dao.invited_user_dao import delete_invitations_created_more_than_two_days_ago
|
||||
@@ -300,26 +301,10 @@ def send_canary_to_cbc_proxy():
|
||||
identifier = str(uuid.uuid4())
|
||||
message = f"Sending a canary message to CBC proxy with ID {identifier}"
|
||||
current_app.logger.info(message)
|
||||
cbc_proxy_client.send_canary(identifier)
|
||||
cbc_proxy_client.get_proxy('canary').send_canary(identifier)
|
||||
|
||||
|
||||
@notify_celery.task(name='trigger-link-tests')
|
||||
def trigger_link_tests():
|
||||
"""
|
||||
Currently we only have one hardcoded CBC Proxy, which corresponds to one
|
||||
CBC, and so currently we do not specify the CBC Proxy name
|
||||
|
||||
In future we will have multiple CBC proxies, each proxy corresponding to
|
||||
one MNO's CBC
|
||||
|
||||
This task should invoke other tasks which do the actual link tests, eg:
|
||||
for cbc_name in app.config.ENABLED_CBCS:
|
||||
send_link_test_for_cbc(cbc_name)
|
||||
|
||||
Alternatively this task could be configured to be a Celery group
|
||||
"""
|
||||
for _ in range(1):
|
||||
identifier = str(uuid.uuid4())
|
||||
message = f"Sending a link test to CBC proxy with ID {identifier}"
|
||||
current_app.logger.info(message)
|
||||
cbc_proxy_client.send_link_test(identifier)
|
||||
for cbc_name in current_app.config['ENABLED_CBCS']:
|
||||
trigger_link_test.apply_async(kwargs={'provider': cbc_name}, queue=QueueNames.NOTIFY)
|
||||
|
||||
Reference in New Issue
Block a user