Skip to content

Commit a66175a

Browse files
authored
[COST-4801] Add a tracing id to the delayed summary tasks. (#4998)
1 parent 636b4ab commit a66175a

File tree

3 files changed

+45
-3
lines changed

3 files changed

+45
-3
lines changed

koku/api/settings/tags/mapping/view.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ def put(self, request: Request):
150150
parents_uuid = request.data.get("ids", [])
151151
if not TagMapping.objects.filter(parent__uuid__in=parents_uuid).exists():
152152
return Response({"detail": "Invalid parents UUIDs."}, status=status.HTTP_400_BAD_REQUEST)
153+
# We should resummarize based on the child uuids since they were the ones replaced.
154+
child_uuids = list(TagMapping.objects.filter(parent__in=parents_uuid).values_list("child", flat=True))
153155
TagMapping.objects.filter(parent__in=parents_uuid).delete()
154-
resummarize_current_month_by_tag_keys(parents_uuid, request.user.customer.schema_name)
156+
resummarize_current_month_by_tag_keys(child_uuids, request.user.customer.schema_name)
155157
return Response(status=status.HTTP_204_NO_CONTENT)

koku/reporting_common/models.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#
55
"""Models for shared reporting tables."""
66
import logging
7+
from uuid import uuid4
78

89
from django.conf import settings
910
from django.db import models
@@ -190,6 +191,9 @@ def create_or_reset_timeout(
190191
existing_task.save()
191192
return existing_task
192193

194+
if not task_kwargs.get("tracing_id"):
195+
task_kwargs["tracing_id"] = str(uuid4())
196+
193197
new_task = cls(
194198
task_name=task_name,
195199
task_args=task_args,
@@ -205,14 +209,16 @@ def create_or_reset_timeout(
205209
@receiver(pre_delete, sender=DelayedCeleryTasks)
206210
def trigger_celery_task(sender, instance, **kwargs):
207211
"""Triggers celery task prior to removing the rows from the table."""
212+
tracing_id = instance.task_kwargs.get("tracing_id")
208213
result = celery_app.send_task(
209214
instance.task_name, args=instance.task_args, kwargs=instance.task_kwargs, queue=instance.queue_name
210215
)
211-
log_msg = "Delay period ended, starting task."
216+
log_msg = "delay period ended starting task"
212217
log_context = {
213218
"task_name": instance.task_name,
214219
"task_args": instance.task_args,
215220
"task_kwargs": instance.task_kwargs,
216221
"queue_name": instance.queue_name,
222+
"result_id": result.id,
217223
}
218-
LOG.info(log_json(tracing_id=result.id, msg=log_msg, context=log_context))
224+
LOG.info(log_json(tracing_id=tracing_id, msg=log_msg, context=log_context))

koku/reporting_common/test_reporting_common.py

+34
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# SPDX-License-Identifier: Apache-2.0
44
#
55
"""Test Reporting Common."""
6+
from unittest.mock import MagicMock
67
from unittest.mock import patch
78

89
from django.utils import timezone
@@ -19,6 +20,7 @@
1920
from reporting_common.models import CostUsageReportManifest
2021
from reporting_common.models import CostUsageReportStatus
2122
from reporting_common.models import DelayedCeleryTasks
23+
from reporting_common.models import trigger_celery_task
2224

2325

2426
class TestCostUsageReportStatus(MasuTestCase):
@@ -156,3 +158,35 @@ def test_large_customer(self, mock_large_customer):
156158
with schema_context(self.schema):
157159
db_entry = DelayedCeleryTasks.objects.get(provider_uuid=self.aws_provider.uuid)
158160
self.assertEqual(db_entry.queue_name, UPDATE_SUMMARY_TABLES_QUEUE_XL)
161+
162+
@patch("reporting_common.models.celery_app")
163+
def test_trigger_celery_task(self, mock_celery_app):
164+
# Building Mocks
165+
result = MagicMock()
166+
result.id = "mocked_result_id"
167+
mock_celery_app.send_task.return_value = result
168+
# Building Test data
169+
expected_task_name = "test_task"
170+
expected_args = ["arg1", "arg2"]
171+
expected_task_kwargs = {"tracing_id": "123"}
172+
expected_queue = "test_queue"
173+
task_instance = DelayedCeleryTasks.create_or_reset_timeout(
174+
task_name=expected_task_name,
175+
task_args=expected_args,
176+
task_kwargs=expected_task_kwargs,
177+
provider_uuid=self.aws_provider_uuid,
178+
queue_name=expected_queue,
179+
)
180+
181+
with self.assertLogs("reporting_common.models", level="INFO") as cm:
182+
trigger_celery_task(sender=None, instance=task_instance)
183+
184+
log_message = "delay period ended starting task"
185+
self.assertTrue(any(log_message in log for log in cm.output))
186+
187+
mock_celery_app.send_task.assert_called_once_with(
188+
task_instance.task_name,
189+
args=task_instance.task_args,
190+
kwargs=task_instance.task_kwargs,
191+
queue=task_instance.queue_name,
192+
)

0 commit comments

Comments
 (0)