SIENTIAPDE-1646

Refactor OPC and OpcRepository classes to remove logger dependency and streamline logging calls

- Removed logger attribute from OPC and OpcRepository classes, replacing direct logger calls with class methods for logging.
- Updated write_data method signatures to eliminate logger parameter, simplifying the interface.
- Adjusted related tests to reflect changes in method signatures and logging behavior.
This commit is contained in:
vitor-aignosi
2026-05-13 10:36:35 -03:00
parent 84e6501063
commit 00cf8a2ad6
4 changed files with 25 additions and 30 deletions

View File

@@ -80,12 +80,10 @@ class OpcRepository(SientiaMonitoring):
self.cert_path = cert_path
self.private_key_path = private_key_path
self.server_cert_path = server_cert_path
self.logger = logger
self.error_count = 0
self.reconnection_interval = reconnection_interval
self.last_reconnection_time: datetime | None = None
self.disconnection_interval = 10.0
self.notification_handler = notification_handler
self.client: Client | None = None
SientiaMonitoring.__init__(self, logger, notification_handler, metrics_controller)
@@ -118,7 +116,7 @@ class OpcRepository(SientiaMonitoring):
raise ValueError('Client must be initialized before setting security')
self.client.application_uri = self.server_uri or self.client.application_uri
self.logger.custom_info('Setting security...', self.metadata)
self.info('Setting security...', self.metadata)
self.client.set_security(
security_policies.SecurityPolicyBasic256,
str(cert),
@@ -147,7 +145,7 @@ class OpcRepository(SientiaMonitoring):
if self.cert_path:
self.set_security()
self.logger.custom_info(
self.info(
f'Starting connection to OPC server {self.id}:{self.server_name}...', self.metadata
)
return self.try_connect()
@@ -191,7 +189,7 @@ class OpcRepository(SientiaMonitoring):
self.disconnect()
trace = traceback.format_exc()
self.logger.custom_error(trace, self.metadata)
self.error(trace, self.metadata)
self.emit_metric_sync(metrics.OPC_CONNECTIONS_FAILED, tags)
@@ -215,13 +213,13 @@ class OpcRepository(SientiaMonitoring):
error_stack = []
for i in range(5):
try:
self.logger.custom_info(
self.info(
f'Disconnecting from OPC UA server, attempt {i + 1} of 5', self.metadata
)
self.client.disconnect()
return []
except Exception as e:
self.logger.custom_error(
self.error(
f'Failed to disconnect from OPC UA server in attempt {i + 1} of 5: {e}',
self.metadata,
)
@@ -254,7 +252,7 @@ class OpcRepository(SientiaMonitoring):
attachment_content=json.dumps(errors, indent=4),
)
else:
self.logger.custom_warning(
self.warning(
f'Disconnected from OPC server {self.id} successfully', self.metadata
)
self.emit_metric_sync(
@@ -299,14 +297,14 @@ class OpcRepository(SientiaMonitoring):
try:
if not self._session_alive():
self.logger.custom_error(f'OPC server {self.id} is not connected', self.metadata)
self.error(f'OPC server {self.id} is not connected', self.metadata)
if (
self.last_reconnection_time is None
or (datetime.now() - self.last_reconnection_time).total_seconds()
> self.reconnection_interval
):
self.disconnect()
self.logger.custom_info(
self.info(
f'Trying to reconnect to OPC server {self.id}...', self.metadata
)
return self.connect()
@@ -323,7 +321,7 @@ class OpcRepository(SientiaMonitoring):
except Exception as e:
trace = traceback.format_exc()
message = f'Failed to validate connection to OPC server: {e}'
self.logger.custom_error(message, self.metadata)
self.error(message, self.metadata)
return False, {
'notification_id': f'OPC_CONNECTION_CHECK_ERROR_{self.id}',
'message': message,
@@ -333,7 +331,7 @@ class OpcRepository(SientiaMonitoring):
}
def write_data(
self, node: str, value: Any, data_type: str, logger: Logger, metadata: dict[str, Any]
self, node: str, value: Any, data_type: str, metadata: dict[str, Any]
) -> tuple[bool, dict[str, Any]]:
"""
Write a typed value to an OPC UA node after validating connectivity.
@@ -342,7 +340,6 @@ class OpcRepository(SientiaMonitoring):
node: Node id string accepted by ``Client.get_node``.
value: Scalar value to encode.
data_type: Key into ``data_type_map`` (e.g. float, str).
logger: Caller logger for per-write traces.
metadata: Workflow metadata for error context.
Return:
@@ -361,7 +358,7 @@ class OpcRepository(SientiaMonitoring):
node_obj = self.client.get_node(node)
except Exception as e:
trace = traceback.format_exc()
logger.custom_error(trace, metadata.get('schedule_name', 'N/A'))
self.error(trace, metadata)
self.error_count += 1
return False, {
'notification_id': f'OPC_WRITE_GET_NODE_ERROR_{self.id}',
@@ -380,7 +377,7 @@ class OpcRepository(SientiaMonitoring):
}
data = data_type_map[data_type]['converter'](value)
logger.custom_info(f'Writing {data} - {type(data)} to {node}', metadata)
self.info(f'Writing {data} - {type(data)} to {node}', metadata)
variant_type = data_type_map[data_type]['opc_type']
try:
@@ -391,7 +388,7 @@ class OpcRepository(SientiaMonitoring):
except Exception as e:
trace = traceback.format_exc()
logger.custom_error(trace, metadata)
self.error(trace, metadata)
self.error_count += 1
return False, {
'notification_id': f'OPC_WRITE_DATA_ERROR_{self.id}',