Skip to content

Commit c2ca492

Browse files
authored
Merge pull request #598 from NHSDigital/feature/ELI-686-adding-subsegments
[ELI-686] - Adding custom subsegments for xray
2 parents 1360120 + 331fcb4 commit c2ca492

5 files changed

Lines changed: 17 additions & 5 deletions

File tree

src/eligibility_signposting_api/audit/audit_service.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
from typing import Annotated
44

5+
from aws_xray_sdk.core import xray_recorder
56
from botocore.client import BaseClient
67
from wireup import Inject, service
78

@@ -21,6 +22,7 @@ def __init__(
2122
self.firehose = firehose
2223
self.audit_delivery_stream = audit_delivery_stream
2324

25+
@xray_recorder.capture("AuditService.audit") # pyright: ignore[reportCallIssue]
2426
def audit(self, audit_record: dict) -> None:
2527
"""
2628
Sends an audit record to the configured Firehose delivery stream.

src/eligibility_signposting_api/repos/campaign_repo.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from collections.abc import Generator
33
from typing import Annotated, NewType
44

5+
from aws_xray_sdk.core import xray_recorder
56
from botocore.client import BaseClient
67
from wireup import Inject, service
78

@@ -25,9 +26,12 @@ def __init__(
2526
self.s3_client = s3_client
2627
self.bucket_name = bucket_name
2728

29+
@xray_recorder.capture("CampaignRepo.get_campaign_configs") # pyright: ignore[reportCallIssue]
2830
def get_campaign_configs(self) -> Generator[CampaignConfig]:
29-
campaign_objects = self.s3_client.list_objects(Bucket=self.bucket_name)
30-
for campaign_object in campaign_objects["Contents"]:
31-
response = self.s3_client.get_object(Bucket=self.bucket_name, Key=f"{campaign_object['Key']}")
32-
body = response["Body"].read()
33-
yield Rules.model_validate(json.loads(body)).campaign_config
31+
with xray_recorder.in_subsegment("CampaignRepo.get_campaign_configs:list_objects"):
32+
campaign_objects = self.s3_client.list_objects(Bucket=self.bucket_name)
33+
with xray_recorder.in_subsegment("CampaignRepo.get_campaign_configs:get_objects"):
34+
for campaign_object in campaign_objects["Contents"]:
35+
response = self.s3_client.get_object(Bucket=self.bucket_name, Key=f"{campaign_object['Key']}")
36+
body = response["Body"].read()
37+
yield Rules.model_validate(json.loads(body)).campaign_config

src/eligibility_signposting_api/repos/consumer_mapping_repo.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
from typing import Annotated, NewType
44

5+
from aws_xray_sdk.core import xray_recorder
56
from botocore.client import BaseClient
67
from botocore.exceptions import ClientError
78
from wireup import Inject, service
@@ -28,6 +29,7 @@ def __init__(
2829
self.s3_client = s3_client
2930
self.bucket_name = bucket_name
3031

32+
@xray_recorder.capture("ConsumerMappingRepo.get_permitted_campaign_ids") # pyright: ignore[reportCallIssue]
3133
def get_permitted_campaign_ids(self, consumer_id: ConsumerId) -> list[CampaignID] | None:
3234
try:
3335
response = self.s3_client.get_object(Bucket=self.bucket_name, Key=CONSUMER_MAPPING_FILE_NAME)

src/eligibility_signposting_api/repos/person_repo.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22
from typing import Annotated, Any, NewType
33

4+
from aws_xray_sdk.core import xray_recorder
45
from boto3.dynamodb.conditions import Key
56
from boto3.resources.base import ServiceResource
67
from wireup import Inject, service
@@ -54,6 +55,7 @@ def get_person_record(self, nhs_hash: str | None) -> Any:
5455

5556
return None
5657

58+
@xray_recorder.capture("PersonRepo.get_eligibility_data") # pyright: ignore[reportCallIssue]
5759
def get_eligibility_data(self, nhs_number: NHSNumber) -> Person:
5860
# Hash using AWSCURRENT secret and fetch items
5961
items = None

src/eligibility_signposting_api/repos/secret_repo.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22
from typing import Annotated, NewType
33

4+
from aws_xray_sdk.core import xray_recorder
45
from botocore.client import BaseClient
56
from botocore.exceptions import ClientError
67
from wireup import Inject, service
@@ -16,6 +17,7 @@ def __init__(self, secret_manager: Annotated[BaseClient, Inject(qualifier="secre
1617
super().__init__()
1718
self.secret_manager = secret_manager
1819

20+
@xray_recorder.capture("SecretRepo._get_secret_by_stage") # pyright: ignore[reportCallIssue]
1921
def _get_secret_by_stage(self, secret_name: str, stage: str) -> dict[str, str]:
2022
"""Internal helper to fetch a secret by version stage."""
2123
try:

0 commit comments

Comments
 (0)