Skip to content

Commit 25e292c

Browse files
committed
fix(contracts_service): Improve datetime handling and add contract metrics
- Import timezone from datetime module for UTC timestamp generation - Import MetricUnit from aws_lambda_powertools.metrics for proper metric typing - Replace strftime formatting with isoformat() for ISO 8601 compliant timestamps in create_contract and update_contract functions - Add metric tracking for successful contract creation events - Rename UpdateExpression attribute from modified_date to contract_last_modified_on for consistency - Ensures timestamps are timezone-aware and use UTC for consistency across distributed systems
1 parent 9832a2e commit 25e292c

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

unicorn_contracts/src/contracts_service/contract_event_handler.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

44
import os
55
import uuid
6-
from datetime import datetime
6+
from datetime import datetime, timezone
77

88
import boto3
99
from boto3.dynamodb.conditions import Attr
1010
from botocore.exceptions import ClientError
1111

1212
from aws_lambda_powertools.logging import Logger
13-
from aws_lambda_powertools.metrics import Metrics
13+
from aws_lambda_powertools.metrics import Metrics, MetricUnit
1414
from aws_lambda_powertools.tracing import Tracer
1515
from aws_lambda_powertools.utilities.data_classes import event_source, SQSEvent
1616
from aws_lambda_powertools.utilities.typing import LambdaContext
@@ -76,7 +76,7 @@ def create_contract(event: dict) -> None:
7676
DynamoDB put Item response
7777
"""
7878

79-
current_date = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
79+
current_date = datetime.now(timezone.utc).isoformat()
8080
contract = {
8181
"property_id": event["property_id"], # PK
8282
"address": event["address"],
@@ -105,6 +105,7 @@ def create_contract(event: dict) -> None:
105105

106106
# Annotate trace with contract status
107107
tracer.put_annotation(key="ContractStatus", value=contract["contract_status"])
108+
metrics.add_metric(name="ContractCreated", unit=MetricUnit.Count, value=1)
108109

109110
except ClientError as e:
110111
code = e.response["Error"]["Code"]
@@ -147,13 +148,13 @@ def update_contract(contract: dict) -> None:
147148

148149
try:
149150
contract["contract_status"] = ContractStatus.APPROVED.name
150-
current_date = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
151+
current_date = datetime.now(timezone.utc).isoformat()
151152

152153
response = table.update_item(
153154
Key={
154155
"property_id": contract["property_id"],
155156
},
156-
UpdateExpression="set contract_status=:t, modified_date=:m",
157+
UpdateExpression="set contract_status=:t, contract_last_modified_on=:m",
157158
ConditionExpression=Attr("property_id").exists()
158159
& Attr("contract_status").is_in([ContractStatus.DRAFT.name]),
159160
ExpressionAttributeValues={

0 commit comments

Comments
 (0)