Skip to content

Commit c616d17

Browse files
authored
Merge pull request #1942 from GSA/main
8/28/2025 Production Deploy
2 parents a757436 + 6c5534b commit c616d17

File tree

13 files changed

+280
-184
lines changed

13 files changed

+280
-184
lines changed

app/celery/tasks.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,12 @@ def _generate_notifications_report(service_id, report_id, limit_days):
582582
count = 0
583583
if len(pagination.items) == 0:
584584
current_app.logger.info(f"SKIP {service_id}")
585+
586+
# Delete stale report when there's no new data
587+
_, file_location, _, _, _ = get_csv_location(service_id, report_id)
588+
s3.delete_s3_object(file_location)
589+
current_app.logger.info(f"Deleted stale report {file_location} - no new data")
590+
585591
return
586592
start_time = time.time()
587593
for notification in pagination.items:

app/dao/jobs_dao.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ def dao_get_jobs_by_service_id(
6666
if limit_days is not None:
6767
if use_processing_time:
6868
query_filter.append(
69-
func.coalesce(Job.processing_started, Job.created_at) >= midnight_n_days_ago(limit_days)
69+
func.coalesce(Job.processing_started, Job.created_at)
70+
>= midnight_n_days_ago(limit_days)
7071
)
7172
else:
7273
query_filter.append(Job.created_at >= midnight_n_days_ago(limit_days))

app/job/rest.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
from app import db
77
from app.aws.s3 import (
8+
extract_personalisation,
9+
extract_phones,
10+
get_job_from_s3,
811
get_job_metadata_from_s3,
912
get_personalisation_from_s3,
1013
get_phone_number_from_s3,
@@ -36,7 +39,7 @@
3639
notification_with_template_schema,
3740
notifications_filter_schema,
3841
)
39-
from app.utils import check_suspicious_id, midnight_n_days_ago, pagination_links
42+
from app.utils import check_suspicious_id, hilite, midnight_n_days_ago, pagination_links
4043

4144
job_blueprint = Blueprint("job", __name__, url_prefix="/service/<uuid:service_id>/job")
4245

@@ -46,6 +49,7 @@
4649

4750
@job_blueprint.route("/<job_id>", methods=["GET"])
4851
def get_job_by_service_and_job_id(service_id, job_id):
52+
current_app.logger.info(hilite("ENTER get_job_by_service_and_job_id"))
4953
check_suspicious_id(service_id, job_id)
5054
job = dao_get_job_by_service_id_and_job_id(service_id, job_id)
5155
statistics = dao_get_notification_outcomes_for_job(service_id, job_id)
@@ -71,8 +75,12 @@ def cancel_job(service_id, job_id):
7175

7276
@job_blueprint.route("/<job_id>/notifications", methods=["GET"])
7377
def get_all_notifications_for_service_job(service_id, job_id):
78+
7479
check_suspicious_id(service_id, job_id)
7580

81+
job = get_job_from_s3(service_id, job_id)
82+
phones = extract_phones(job, service_id, job_id)
83+
personalisation = extract_personalisation(job)
7684
data = notifications_filter_schema.load(request.args)
7785
page = data["page"] if "page" in data else 1
7886
page_size = (
@@ -90,21 +98,13 @@ def get_all_notifications_for_service_job(service_id, job_id):
9098

9199
for notification in paginated_notifications.items:
92100
if notification.job_id is not None:
93-
recipient = get_phone_number_from_s3(
94-
notification.service_id,
95-
notification.job_id,
96-
notification.job_row_number,
97-
)
101+
recipient = phones[notification.job_row_number]
98102
notification.to = recipient
99103
notification.normalised_to = recipient
100104

101105
for notification in paginated_notifications.items:
102106
if notification.job_id is not None:
103-
notification.personalisation = get_personalisation_from_s3(
104-
notification.service_id,
105-
notification.job_id,
106-
notification.job_row_number,
107-
)
107+
notification.personalisation = personalisation[notification.job_row_number]
108108

109109
notifications = None
110110
if data.get("format_for_csv"):
@@ -116,6 +116,7 @@ def get_all_notifications_for_service_job(service_id, job_id):
116116
notifications = notification_with_template_schema.dump(
117117
paginated_notifications.items, many=True
118118
)
119+
current_app.logger.info(hilite("Got the dumped notifications and returning"))
119120

120121
return (
121122
jsonify(
@@ -134,6 +135,8 @@ def get_all_notifications_for_service_job(service_id, job_id):
134135

135136
@job_blueprint.route("/<job_id>/recent_notifications", methods=["GET"])
136137
def get_recent_notifications_for_service_job(service_id, job_id):
138+
139+
current_app.logger.info(hilite("ENTER get_recent_notifications_for_service_job"))
137140
check_suspicious_id(service_id, job_id)
138141

139142
data = notifications_filter_schema.load(request.args)
@@ -220,7 +223,9 @@ def get_jobs_by_service(service_id):
220223
else:
221224
limit_days = None
222225

223-
use_processing_time = request.args.get("use_processing_time", "false").lower() == "true"
226+
use_processing_time = (
227+
request.args.get("use_processing_time", "false").lower() == "true"
228+
)
224229

225230
valid_statuses = set(JobStatus)
226231
statuses_arg = request.args.get("statuses", "")
@@ -332,6 +337,8 @@ def get_paginated_jobs(
332337
statuses,
333338
page,
334339
):
340+
341+
current_app.logger.info(hilite("ENTER get_paginated_jobs"))
335342
pagination = dao_get_jobs_by_service_id(
336343
service_id,
337344
limit_days=limit_days,

app/service/rest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ def get_service_notification_statistics(service_id):
230230
data=get_service_statistics(
231231
service_id,
232232
request.args.get("today_only") == "True",
233-
int(request.args.get("limit_days", 7)),
233+
int(request.args.get("limit_days", 8)),
234234
)
235235
)
236236

@@ -794,7 +794,7 @@ def get_detailed_service(service_id, today_only=False):
794794
return detailed_service_schema.dump(service)
795795

796796

797-
def get_service_statistics(service_id, today_only, limit_days=7):
797+
def get_service_statistics(service_id, today_only, limit_days=8):
798798
check_suspicious_id(service_id)
799799
# today_only flag is used by the send page to work out if the service will exceed their daily usage by sending a job
800800
if today_only:

app/template_statistics/rest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@
2020
@template_statistics.route("")
2121
def get_template_statistics_for_service_by_day(service_id):
2222
check_suspicious_id(service_id)
23-
whole_days = request.args.get("whole_days", request.args.get("limit_days", ""))
23+
whole_days = request.args.get("whole_days", request.args.get("limit_days", "8"))
2424
try:
2525
whole_days = int(whole_days)
2626
except ValueError:
2727
error = f"{whole_days} is not an integer"
2828
message = {"whole_days": [error]}
2929
raise InvalidRequest(message, status_code=400)
3030

31-
if whole_days < 0 or whole_days > 7:
31+
if whole_days < 0 or whole_days > 8:
3232
raise InvalidRequest(
33-
{"whole_days": ["whole_days must be between 0 and 7"]}, status_code=400
33+
{"whole_days": ["whole_days must be between 0 and 8"]}, status_code=400
3434
)
3535
data = fetch_notification_status_for_service_for_today_and_7_previous_days(
3636
service_id, by_template=True, limit_days=whole_days

0 commit comments

Comments
 (0)