SIENTIAPDE-1100

Improve error handling in OPC activities; raise exceptions instead of logging errors and add data type validation in OpcRepository
This commit is contained in:
vitor-aignosi
2025-06-12 09:06:31 -03:00
parent e8afa2673e
commit 1057db1d73
3 changed files with 26 additions and 11 deletions

View File

@@ -63,7 +63,7 @@ class OPC(BaseActivity):
level=NotificationLevel.ERROR, level=NotificationLevel.ERROR,
attachment_content=trace attachment_content=trace
) )
self.logger.error(trace) raise e
@activity.defn(name='write_opc_data') @activity.defn(name='write_opc_data')
async def write_opc_data(self, input_data: dict[str, Any]): async def write_opc_data(self, input_data: dict[str, Any]):

View File

@@ -218,6 +218,15 @@ class OpcRepository():
self.error_count += 1 self.error_count += 1
return return
if data_type not in data_type_map:
self.notification_handler.build_and_send_notification(
notification_id=f"OPC_WRITE_DATA_TYPE_ERROR_{self.name}",
message=f"Unsupported data type: {data_type}",
block="opc_repository",
level=NotificationLevel.ERROR
)
return
data = data_type_map[data_type]['converter'](value) data = data_type_map[data_type]['converter'](value)
self.logger.info(f'Writing {data} - {type(data)} to {node}') self.logger.info(f'Writing {data} - {type(data)} to {node}')
ua_data = DataValue( ua_data = DataValue(

View File

@@ -112,8 +112,12 @@ def test_write_data_success(opc, tag, data_type, data):
def test_write_data_exception(opc): def test_write_data_exception(opc):
opc.opc_repository['server1'].write_data.side_effect = Exception( opc.opc_repository['server1'].write_data.side_effect = Exception(
"Test error") "Test error")
try:
opc.write_data(server='server1', tag='tag1', data=50, opc.write_data(server='server1', tag='tag1', data=50,
data_type='int', tag_type='prediction') data_type='int', tag_type='prediction')
except Exception:
opc.notification_handler.build_and_send_notification.assert_called_once_with( opc.notification_handler.build_and_send_notification.assert_called_once_with(
notification_id="WRITE_OPC_PREDICTION_ERROR", notification_id="WRITE_OPC_PREDICTION_ERROR",
message="Error writing data to OPC server: Test error", message="Error writing data to OPC server: Test error",
@@ -121,7 +125,9 @@ def test_write_data_exception(opc):
level=NotificationLevel.ERROR, level=NotificationLevel.ERROR,
attachment_content=ANY attachment_content=ANY
) )
opc.logger.error.assert_called_once()
else:
assert False, "Expected an exception to be raised"
@mark.asyncio @mark.asyncio