SIENTIAPDE-1110
Refactor Activities class to remove Kafka and Druid dependencies, simplifying initialization. Update values.yaml to set replica count to 1 for reduced resource usage. Adjust Redis activity to set TTL to None for better data retention. Remove unused Kafka and Druid activity files and their associated tests, streamlining the codebase.
This commit is contained in:
@@ -2,16 +2,16 @@ from unittest.mock import patch, MagicMock, ANY
|
||||
from pytest import mark
|
||||
from sientia_do.temporal.activities.postgres import Postgres
|
||||
from scouter.activities.activities import Activities
|
||||
from scouter.activities.mongodb import MongoDB
|
||||
from scouter.activities.redis import Redis
|
||||
from scouter.activities.kafka import Kafka
|
||||
from scouter.activities.gates import Gates
|
||||
|
||||
|
||||
@patch('scouter.activities.activities.MongoDB.__init__')
|
||||
@patch('scouter.activities.activities.Postgres.__init__')
|
||||
@patch('scouter.activities.activities.Redis.__init__')
|
||||
@patch('scouter.activities.activities.Kafka.__init__')
|
||||
@patch('scouter.activities.activities.Gates.__init__')
|
||||
def test___init__(mock_gates_init, mock_kafka_init, mock_redis_init, mock_postgres_init):
|
||||
def test___init__(mock_gates_init, mock_redis_init, mock_postgres_init, mock_mongodb_init):
|
||||
|
||||
postgres_config = {
|
||||
'host': 'localhost',
|
||||
@@ -30,10 +30,9 @@ def test___init__(mock_gates_init, mock_kafka_init, mock_redis_init, mock_postgr
|
||||
'password': 'redis'
|
||||
}
|
||||
|
||||
kafka_config = {
|
||||
'bootstrap_servers': 'localhost:9092',
|
||||
'polling_time': 1000,
|
||||
'group_id': 'test-group'
|
||||
mongodb_config = {
|
||||
'connection_string': 'mongodb://localhost:27017',
|
||||
'database_name': 'test_database'
|
||||
}
|
||||
|
||||
logger = MagicMock()
|
||||
@@ -42,7 +41,7 @@ def test___init__(mock_gates_init, mock_kafka_init, mock_redis_init, mock_postgr
|
||||
activities = Activities(
|
||||
postgres_config=postgres_config,
|
||||
redis_config=redis_config,
|
||||
kafka_config=kafka_config,
|
||||
mongodb_config=mongodb_config,
|
||||
logger=logger,
|
||||
notification_handler=notification_handler
|
||||
)
|
||||
@@ -50,7 +49,7 @@ def test___init__(mock_gates_init, mock_kafka_init, mock_redis_init, mock_postgr
|
||||
assert isinstance(activities, Activities)
|
||||
assert isinstance(activities, Postgres)
|
||||
assert isinstance(activities, Redis)
|
||||
assert isinstance(activities, Kafka)
|
||||
assert isinstance(activities, MongoDB)
|
||||
assert isinstance(activities, Gates)
|
||||
|
||||
mock_postgres_init.assert_called_once_with(
|
||||
@@ -76,11 +75,10 @@ def test___init__(mock_gates_init, mock_kafka_init, mock_redis_init, mock_postgr
|
||||
notification_handler=notification_handler
|
||||
)
|
||||
|
||||
mock_kafka_init.assert_called_once_with(
|
||||
mock_mongodb_init.assert_called_once_with(
|
||||
ANY,
|
||||
bootstrap_servers=kafka_config['bootstrap_servers'],
|
||||
polling_time=kafka_config['polling_time'],
|
||||
group_id=kafka_config['group_id'],
|
||||
connection_string=mongodb_config['connection_string'],
|
||||
database_name=mongodb_config['database_name'],
|
||||
logger=logger,
|
||||
notification_handler=notification_handler
|
||||
)
|
||||
@@ -94,12 +92,12 @@ def test___init__(mock_gates_init, mock_kafka_init, mock_redis_init, mock_postgr
|
||||
|
||||
@patch('scouter.activities.activities.Postgres.__init__')
|
||||
@patch('scouter.activities.activities.Redis.__init__')
|
||||
@patch('scouter.activities.activities.Kafka.__init__')
|
||||
@patch('scouter.activities.activities.Gates.__init__')
|
||||
@patch('scouter.activities.activities.MongoDB.__init__')
|
||||
@patch('scouter.activities.activities.Postgres.close')
|
||||
@patch('scouter.activities.activities.Kafka.close')
|
||||
def test_shutdown(mock_kafka_close, mock_postgres_close,
|
||||
_mock_gates_init, _mock_redis_init, _mock_kafka_init, _mock_postgres_init):
|
||||
@patch('scouter.activities.activities.MongoDB.shutdown')
|
||||
def test_shutdown(mock_mongodb_close, mock_postgres_close, _mock_mongodb_init,
|
||||
_mock_gates_init, _mock_redis_init, _mock_postgres_init):
|
||||
postgres_config = {
|
||||
'host': 'localhost',
|
||||
'port': 5432,
|
||||
@@ -117,10 +115,9 @@ def test_shutdown(mock_kafka_close, mock_postgres_close,
|
||||
'password': 'redis'
|
||||
}
|
||||
|
||||
kafka_config = {
|
||||
'bootstrap_servers': 'localhost:9092',
|
||||
'polling_time': 1000,
|
||||
'group_id': 'test-group'
|
||||
mongodb_config = {
|
||||
'connection_string': 'mongodb://localhost:27017',
|
||||
'database_name': 'test_database'
|
||||
}
|
||||
|
||||
logger = MagicMock()
|
||||
@@ -129,7 +126,7 @@ def test_shutdown(mock_kafka_close, mock_postgres_close,
|
||||
activities = Activities(
|
||||
postgres_config=postgres_config,
|
||||
redis_config=redis_config,
|
||||
kafka_config=kafka_config,
|
||||
mongodb_config=mongodb_config,
|
||||
logger=logger,
|
||||
notification_handler=notification_handler
|
||||
)
|
||||
@@ -137,4 +134,4 @@ def test_shutdown(mock_kafka_close, mock_postgres_close,
|
||||
activities.shutdown()
|
||||
|
||||
mock_postgres_close.assert_called_once()
|
||||
mock_kafka_close.assert_called_once()
|
||||
mock_mongodb_close.assert_called_once()
|
||||
|
||||
@@ -290,8 +290,8 @@ async def test_aggregate_data(gates_fixture):
|
||||
'value': None, 'timestamp': '2023-01-04'},
|
||||
],
|
||||
'model_tags': {
|
||||
'name1': {'aggr_function': 'avg'},
|
||||
'name2': {'aggr_function': 'max'},
|
||||
'name1': {'aggr_func': 'avg'},
|
||||
'name2': {'aggr_func': 'max'},
|
||||
},
|
||||
**metadata
|
||||
}
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
from unittest.mock import MagicMock, patch, ANY
|
||||
from pytest import fixture, mark
|
||||
from pandas import DataFrame
|
||||
from scouter.activities.kafka import Kafka
|
||||
|
||||
|
||||
@fixture
|
||||
@patch("scouter.activities.kafka.KafkaConsumer")
|
||||
def kafka(_kafka_consumer):
|
||||
return Kafka(
|
||||
bootstrap_servers="localhost:9092",
|
||||
polling_time=1000,
|
||||
group_id="test-group",
|
||||
logger=MagicMock(),
|
||||
notification_handler=MagicMock()
|
||||
)
|
||||
|
||||
|
||||
@patch("scouter.activities.kafka.KafkaConsumer")
|
||||
def test___init__(kafka_consumer):
|
||||
kafka = Kafka(
|
||||
bootstrap_servers="localhost:9092",
|
||||
polling_time=1000,
|
||||
group_id="test-group",
|
||||
logger=MagicMock(),
|
||||
notification_handler=MagicMock()
|
||||
)
|
||||
|
||||
assert kafka.polling_time == 1000
|
||||
assert kafka.kafka_connector == kafka_consumer.return_value
|
||||
|
||||
kafka_consumer.assert_called_once_with(
|
||||
bootstrap_servers="localhost:9092",
|
||||
auto_offset_reset="earliest",
|
||||
enable_auto_commit=True,
|
||||
group_id="test-group",
|
||||
value_deserializer=ANY
|
||||
)
|
||||
|
||||
|
||||
metadata = {
|
||||
'metadata': {
|
||||
'model_id': 'test_model_id',
|
||||
'model_name': 'test_model',
|
||||
'schedule_name': 'test_schedule',
|
||||
'workflow_name': 'scouter'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@mark.asyncio
|
||||
async def test_load_from_kafka(kafka):
|
||||
input_data = {"topic": "test-topic", **metadata}
|
||||
|
||||
data = [
|
||||
("test-topic", [
|
||||
MagicMock(
|
||||
value=f"test-value-{i}"
|
||||
) for i in range(10)
|
||||
])
|
||||
]
|
||||
|
||||
kafka.kafka_connector.poll.return_value = MagicMock(
|
||||
items=MagicMock(return_value=data)
|
||||
)
|
||||
|
||||
expected = DataFrame([d.value for d in data[0][1]]).to_dict()
|
||||
|
||||
result = await kafka.load_from_kafka(input_data)
|
||||
|
||||
assert result == expected
|
||||
|
||||
kafka.kafka_connector.subscribe.assert_called_once_with(["test-topic"])
|
||||
|
||||
kafka.kafka_connector.poll.assert_called_once_with(timeout_ms=1000)
|
||||
|
||||
|
||||
@mark.asyncio
|
||||
async def test_load_from_kafka_empty(kafka):
|
||||
input_data = {"topic": "test-topic", **metadata}
|
||||
|
||||
kafka.kafka_connector.poll.return_value = MagicMock(
|
||||
items=MagicMock(return_value=[])
|
||||
)
|
||||
|
||||
result = await kafka.load_from_kafka(input_data)
|
||||
|
||||
assert result == {}
|
||||
|
||||
kafka.kafka_connector.subscribe.assert_called_once_with(["test-topic"])
|
||||
|
||||
kafka.kafka_connector.poll.assert_called_once_with(timeout_ms=1000)
|
||||
@@ -87,7 +87,7 @@ async def test_group_and_hold_data_new_key(redis_activity):
|
||||
# Verify set was called with correct arguments
|
||||
redis_activity.set.assert_called_once()
|
||||
args, kwargs = redis_activity.set.call_args
|
||||
assert args[0] == 'test_pipeline_test_schedule'
|
||||
assert args[0] == 'held_data_test_pipeline_test_schedule'
|
||||
assert args[1] == {
|
||||
'sensor1': 25.5,
|
||||
'sensor2': 30.0,
|
||||
@@ -139,7 +139,7 @@ async def test_group_and_hold_data_update_existing(redis_activity):
|
||||
# Verify set was called with correct arguments
|
||||
redis_activity.set.assert_called_once()
|
||||
args, kwargs = redis_activity.set.call_args
|
||||
assert args[0] == 'test_workflow_test_schedule'
|
||||
assert args[0] == 'held_data_test_workflow_test_schedule'
|
||||
assert args[1] == {
|
||||
'sensor1': 25.5,
|
||||
'sensor2': 28.0,
|
||||
|
||||
Reference in New Issue
Block a user