Skip to content

Commit 39c7012

Browse files
authored
fix: s3 logs (#744)
### Description Please explain the changes you made here. ### Checklist - [ ] Created tests which fail without the change (if possible) - [ ] All tests passing - [ ] Extended the documentation, if necessary
1 parent a19a7e8 commit 39c7012

File tree

5 files changed

+32
-31
lines changed

5 files changed

+32
-31
lines changed

app/core/myeclpay/endpoints_myeclpay.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import uuid
55
from datetime import UTC, date, datetime, timedelta
66
from pathlib import Path
7-
from uuid import UUID, uuid4
7+
from uuid import UUID
88

99
import calypsso
1010
from fastapi import (
@@ -1409,8 +1409,8 @@ async def create_user_devices(
14091409
hyperion_myeclpay_logger.info(
14101410
wallet_device_creation.ed25519_public_key,
14111411
extra={
1412-
"s3_subfolder": MYECLPAY_DEVICES_S3_SUBFOLDER,
1413-
"s3_filename": f"{user.id}-{str(uuid4())[:8]}",
1412+
"s3_subfolder": f"{MYECLPAY_DEVICES_S3_SUBFOLDER}/{user.id}",
1413+
"s3_filename": str(wallet_device_db.id),
14141414
},
14151415
)
14161416

@@ -2164,8 +2164,8 @@ async def store_scan_qrcode(
21642164
hyperion_myeclpay_logger.info(
21652165
format_transaction_log(transaction),
21662166
extra={
2167-
"subfolder": MYECLPAY_LOGS_S3_SUBFOLDER,
2168-
"retention": RETENTION_DURATION,
2167+
"s3_subfolder": MYECLPAY_LOGS_S3_SUBFOLDER,
2168+
"s3_retention": RETENTION_DURATION,
21692169
},
21702170
)
21712171
message = Message(
@@ -2340,8 +2340,8 @@ async def refund_transaction(
23402340
hyperion_myeclpay_logger.info(
23412341
format_refund_log(refund),
23422342
extra={
2343-
"subfolder": MYECLPAY_LOGS_S3_SUBFOLDER,
2344-
"retention": RETENTION_DURATION,
2343+
"s3_subfolder": MYECLPAY_LOGS_S3_SUBFOLDER,
2344+
"s3_retention": RETENTION_DURATION,
23452345
},
23462346
)
23472347

@@ -2490,8 +2490,8 @@ async def cancel_transaction(
24902490
hyperion_myeclpay_logger.info(
24912491
format_cancel_log(transaction_id),
24922492
extra={
2493-
"subfolder": MYECLPAY_LOGS_S3_SUBFOLDER,
2494-
"retention": RETENTION_DURATION,
2493+
"s3_subfolder": MYECLPAY_LOGS_S3_SUBFOLDER,
2494+
"s3_retention": RETENTION_DURATION,
24952495
},
24962496
)
24972497

app/core/myeclpay/utils_myeclpay.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ async def validate_transfer_callback(
113113
hyperion_myeclpay_logger.info(
114114
format_transfer_log(transfer),
115115
extra={
116-
"subfolder": MYECLPAY_LOGS_S3_SUBFOLDER,
117-
"retention": RETENTION_DURATION,
116+
"s3_subfolder": MYECLPAY_LOGS_S3_SUBFOLDER,
117+
"s3_retention": RETENTION_DURATION,
118118
},
119119
)

app/types/s3_access.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def __init__(
4040
or s3_bucket_name is None
4141
):
4242
self.failure_logger.critical(
43-
"S3_ACCESS_KEY_ID or S3_SECRET_ACCESS_KEY or S3_MYECLPAY_LOGS_BUCKET_NAME is not set. Working with fallback logger only.",
43+
"S3_ACCESS_KEY_ID or S3_SECRET_ACCESS_KEY or S3_BUCKET_NAME is not set. Working with fallback logger only.",
4444
)
4545
self.s3 = None
4646
return
@@ -69,7 +69,7 @@ def write_file(
6969
self,
7070
message: str,
7171
filename: str,
72-
subfolder: str = "",
72+
subfolder: str | None = None,
7373
retention: int = 0,
7474
):
7575
"""Write in an S3 bucket with object locking if needed.
@@ -90,14 +90,13 @@ def write_file(
9090
# If there is a "/" in the filename the s3 while consider it as a folder
9191
if not re.match(AUTHORIZED_FILE_STRING, filename):
9292
raise InvalidS3FileNameError(filename)
93-
if subfolder != "" and not re.match(AUTHORIZED_FOLDER_STRING, subfolder):
93+
if subfolder is not None and not re.match(AUTHORIZED_FOLDER_STRING, subfolder):
9494
raise InvalidS3FolderError(subfolder)
9595

96-
filename = (
97-
f"{self.folder}/{subfolder}/{filename}"
98-
if self.folder != ""
99-
else f"{subfolder}/{filename}"
100-
)
96+
if subfolder is not None:
97+
filename = subfolder + "/" + filename
98+
if self.folder != "":
99+
filename = self.folder + "/" + filename
101100

102101
file_object = BytesIO(message.encode("utf-8"))
103102

@@ -127,7 +126,7 @@ def write_file(
127126
def get_file_with_name(
128127
self,
129128
filename: str,
130-
subfolder: str = "",
129+
subfolder: str | None = None,
131130
) -> str:
132131
"""Get a file from S3 with a given name and subfolder.
133132
The filename must not contain a "/" because S3 will consider it as a folder.
@@ -145,14 +144,13 @@ def get_file_with_name(
145144
# If there is a "/" in the filename the s3 while consider it as a folder
146145
if not re.match(AUTHORIZED_FILE_STRING, filename):
147146
raise InvalidS3FileNameError(filename)
148-
if subfolder != "" and not re.match(AUTHORIZED_FOLDER_STRING, subfolder):
147+
if subfolder is not None and not re.match(AUTHORIZED_FOLDER_STRING, subfolder):
149148
raise InvalidS3FolderError(subfolder)
150149

151-
filename = (
152-
f"{self.folder}/{subfolder}/{filename}"
153-
if self.folder != ""
154-
else f"{subfolder}/{filename}"
155-
)
150+
if subfolder is not None:
151+
filename = subfolder + "/" + filename
152+
if self.folder != "":
153+
filename = self.folder + "/" + filename
156154

157155
file_object = BytesIO()
158156
if self.s3 is None:

app/utils/loggers_tools/s3_handler.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import string
12
from datetime import UTC, datetime
23
from logging import StreamHandler
3-
from uuid import uuid4
44

55
from typing_extensions import override
66

77
from app.types.s3_access import S3Access
8+
from app.utils.tools import get_random_string
9+
10+
alphanum = string.ascii_lowercase + string.digits
811

912

1013
class S3LogHandler(StreamHandler):
@@ -27,13 +30,13 @@ def __init__(
2730

2831
@override
2932
def emit(self, record):
30-
filename = getattr(record, "s3_filename", None)
31-
subfolder = str(getattr(record, "s3_subfolder", ""))
33+
filename: str | None = getattr(record, "s3_filename", None)
34+
subfolder: str | None = getattr(record, "s3_subfolder", None)
3235
retention: int = getattr(record, "s3_retention", 0)
3336

3437
if filename is None:
3538
now = datetime.now(UTC)
36-
filename = now.strftime("%Y-%m-%dT%H:%M:%S.%fZ") + str(uuid4())[8:]
39+
filename = now.strftime("%Y-%m-%dT%H:%M:%S.%fZ") + get_random_string(8)
3740

3841
msg = self.format(record)
3942
self.s3_access.write_file(msg, filename, subfolder, retention)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ authors = [{ name = "AEECL ECLAIR" }]
66

77
# Hyperion follows Semantic Versioning
88
# https://semver.org/
9-
version = "4.5.2"
9+
version = "4.5.3"
1010
minimal-titan-version-code = 139
1111
requires-python = ">= 3.11, < 3.13"
1212

0 commit comments

Comments
 (0)