Skip to content

Commit 15a7a14

Browse files
committed
log_firehose
1 parent b94ae56 commit 15a7a14

File tree

4 files changed

+85
-70
lines changed

4 files changed

+85
-70
lines changed

lambdas/shared/src/common/log_decorator.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,8 @@
99
from datetime import datetime
1010
from functools import wraps
1111

12-
from common.clients import firehose_client, logger
13-
14-
15-
def send_log_to_firehose(stream_name, log_data: dict) -> None:
16-
"""Sends the log_message to Firehose"""
17-
try:
18-
record = {"Data": json.dumps({"event": log_data}).encode("utf-8")}
19-
response = firehose_client.put_record(DeliveryStreamName=stream_name, Record=record)
20-
logger.info("Log sent to Firehose: %s", response)
21-
except Exception as error: # pylint:disable = broad-exception-caught
22-
logger.exception("Error sending log to Firehose: %s", error)
12+
from common.clients import logger
13+
from common.log_firehose import send_log_to_firehose
2314

2415

2516
def generate_and_send_logs(
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import json
2+
from common.clients import firehose_client, logger
3+
4+
5+
def send_log_to_firehose(stream_name, log_data: dict) -> None:
6+
"""Sends the log_message to Firehose"""
7+
try:
8+
record = {"Data": json.dumps({"event": log_data}).encode("utf-8")}
9+
response = firehose_client.put_record(DeliveryStreamName=stream_name, Record=record)
10+
logger.info("Log sent to Firehose: %s", response)
11+
except Exception as error: # pylint:disable = broad-exception-caught
12+
logger.exception("Error sending log to Firehose: %s", error)

lambdas/shared/tests/test_common/test_log_decorator.py

Lines changed: 1 addition & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,60 +6,22 @@
66
from common.log_decorator import (
77
generate_and_send_logs,
88
logging_decorator,
9-
send_log_to_firehose,
109
)
10+
from common.log_firehose import send_log_to_firehose
1111

1212

1313
class TestLogDecorator(unittest.TestCase):
1414
def setUp(self):
1515
self.test_stream = "test-stream"
1616
self.test_prefix = "test"
17-
self.logger_info_patcher = patch("common.log_decorator.logger.info")
18-
self.mock_logger_info = self.logger_info_patcher.start()
19-
self.logger_exception_patcher = patch("common.log_decorator.logger.exception")
20-
self.mock_logger_exception = self.logger_exception_patcher.start()
2117
self.logger_error_patcher = patch("common.log_decorator.logger.error")
2218
self.mock_logger_error = self.logger_error_patcher.start()
23-
self.firehose_client_patcher = patch("common.log_decorator.firehose_client")
24-
self.mock_firehose_client = self.firehose_client_patcher.start()
2519
# patch common.log_decorator.time
2620
self.mock_generate_send = patch("common.log_decorator.generate_and_send_logs").start()
2721

2822
def tearDown(self):
2923
patch.stopall()
3024

31-
def test_send_log_to_firehose_success(self):
32-
"""Test send_log_to_firehose with successful firehose response"""
33-
# Arrange
34-
test_log_data = {"function_name": "test_func", "result": "success"}
35-
mock_response = {"ResponseMetadata": {"HTTPStatusCode": 200}}
36-
self.mock_firehose_client.put_record.return_value = mock_response
37-
38-
# Act
39-
send_log_to_firehose(self.test_stream, test_log_data)
40-
41-
# Assert
42-
expected_record = {"Data": json.dumps({"event": test_log_data}).encode("utf-8")}
43-
self.mock_firehose_client.put_record.assert_called_once_with(
44-
DeliveryStreamName=self.test_stream, Record=expected_record
45-
)
46-
47-
def test_send_log_to_firehose_exception(self):
48-
"""Test send_log_to_firehose with firehose exception"""
49-
# Arrange
50-
test_log_data = {"function_name": "test_func", "result": "error"}
51-
self.mock_firehose_client.put_record.side_effect = Exception("Firehose error")
52-
53-
# Act
54-
send_log_to_firehose(self.test_stream, test_log_data)
55-
56-
# Assert
57-
self.mock_firehose_client.put_record.assert_called_once()
58-
self.mock_logger_exception.assert_called_once_with(
59-
"Error sending log to Firehose: %s",
60-
self.mock_firehose_client.put_record.side_effect,
61-
)
62-
6325
@patch("time.time")
6426
@patch("common.log_decorator.send_log_to_firehose")
6527
def test_generate_and_send_logs_success(self, mock_send_log, mock_time):
@@ -217,23 +179,3 @@ def documented_function():
217179
# Act & Assert
218180
self.assertEqual(documented_function.__name__, "documented_function")
219181
self.assertEqual(documented_function.__doc__, "This is a test function with documentation")
220-
221-
def test_send_log_to_firehose_exception_logging(self):
222-
"""Test that logger.exception is called when firehose_client.put_record throws an error"""
223-
# Arrange
224-
test_log_data = {"function_name": "test_func", "result": "error"}
225-
test_error = Exception("Firehose connection failed")
226-
self.mock_firehose_client.put_record.side_effect = test_error
227-
228-
# Act
229-
send_log_to_firehose(self.test_stream, test_log_data)
230-
231-
# Assert
232-
# Verify firehose_client.put_record was called
233-
expected_record = {"Data": json.dumps({"event": test_log_data}).encode("utf-8")}
234-
self.mock_firehose_client.put_record.assert_called_once_with(
235-
DeliveryStreamName=self.test_stream, Record=expected_record
236-
)
237-
238-
# Verify logger.exception was called with the correct message and error
239-
self.mock_logger_exception.assert_called_once_with("Error sending log to Firehose: %s", test_error)
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import json
2+
import unittest
3+
from datetime import datetime
4+
from unittest.mock import patch
5+
6+
from common.log_firehose import send_log_to_firehose
7+
8+
9+
class TestLogFirehose(unittest.TestCase):
10+
def setUp(self):
11+
self.test_stream = "test-stream"
12+
self.logger_exception_patcher = patch("common.log_firehose.logger.exception")
13+
self.mock_logger_exception = self.logger_exception_patcher.start()
14+
self.firehose_client_patcher = patch("common.log_firehose.firehose_client")
15+
self.mock_firehose_client = self.firehose_client_patcher.start()
16+
17+
def tearDown(self):
18+
patch.stopall()
19+
20+
def test_send_log_to_firehose_success(self):
21+
"""Test send_log_to_firehose with successful firehose response"""
22+
# Arrange
23+
test_log_data = {"function_name": "test_func", "result": "success"}
24+
mock_response = {"ResponseMetadata": {"HTTPStatusCode": 200}}
25+
self.mock_firehose_client.put_record.return_value = mock_response
26+
27+
# Act
28+
send_log_to_firehose(self.test_stream, test_log_data)
29+
30+
# Assert
31+
expected_record = {"Data": json.dumps({"event": test_log_data}).encode("utf-8")}
32+
self.mock_firehose_client.put_record.assert_called_once_with(
33+
DeliveryStreamName=self.test_stream, Record=expected_record
34+
)
35+
36+
def test_send_log_to_firehose_exception(self):
37+
"""Test send_log_to_firehose with firehose exception"""
38+
# Arrange
39+
test_log_data = {"function_name": "test_func", "result": "error"}
40+
self.mock_firehose_client.put_record.side_effect = Exception("Firehose error")
41+
42+
# Act
43+
send_log_to_firehose(self.test_stream, test_log_data)
44+
45+
# Assert
46+
self.mock_firehose_client.put_record.assert_called_once()
47+
self.mock_logger_exception.assert_called_once_with(
48+
"Error sending log to Firehose: %s",
49+
self.mock_firehose_client.put_record.side_effect,
50+
)
51+
52+
def test_send_log_to_firehose_exception_logging(self):
53+
"""Test that logger.exception is called when firehose_client.put_record throws an error"""
54+
# Arrange
55+
test_log_data = {"function_name": "test_func", "result": "error"}
56+
test_error = Exception("Firehose connection failed")
57+
self.mock_firehose_client.put_record.side_effect = test_error
58+
59+
# Act
60+
send_log_to_firehose(self.test_stream, test_log_data)
61+
62+
# Assert
63+
# Verify firehose_client.put_record was called
64+
expected_record = {"Data": json.dumps({"event": test_log_data}).encode("utf-8")}
65+
self.mock_firehose_client.put_record.assert_called_once_with(
66+
DeliveryStreamName=self.test_stream, Record=expected_record
67+
)
68+
69+
# Verify logger.exception was called with the correct message and error
70+
self.mock_logger_exception.assert_called_once_with("Error sending log to Firehose: %s", test_error)

0 commit comments

Comments
 (0)