Update environment configuration and refactor OPC activities for async handling

- Expanded the .env file with configurations for MongoDB, Postgres, MlFlow, and Temporal.
- Refactored OPC class methods to be asynchronous, including init_opc, write_data, manage_output_tags, and shutdown.
- Updated the worker to initialize OPC asynchronously and adjusted shutdown handling for activities.
This commit is contained in:
vitor-aignosi
2025-08-26 16:49:19 -03:00
parent a8f7d3562e
commit 1bd532b7d8
6 changed files with 70 additions and 42 deletions

View File

@@ -26,7 +26,10 @@ class OPC(BaseActivity):
self, logger, notification_handler, set_error_counter=True)
self.opc_repository: dict[str, OpcRepository] = {}
for id, server in opc_servers.items():
self.opc_servers = opc_servers
async def init_opc(self):
for id, server in self.opc_servers.items():
self.opc_repository[id] = OpcRepository(
id=server['id'],
url=server['url'],
@@ -39,7 +42,7 @@ class OPC(BaseActivity):
reconnection_interval=server['reconnection_interval'],
pod_id=self.pod_id
)
is_connected, error_data = self.opc_repository[id].connect()
is_connected, error_data = await self.opc_repository[id].connect()
if not is_connected:
self.send_notification(
metadata={
@@ -56,8 +59,8 @@ class OPC(BaseActivity):
'attachment_content', None)
)
def write_data(self, server_id: str, tag: str, data: Any,
data_type: str, tag_type: str, metadata: dict[str, Any]) -> bool:
async def write_data(self, server_id: str, tag: str, data: Any,
data_type: str, tag_type: str, metadata: dict[str, Any]) -> bool:
"""
Write data to OPC server.
@@ -73,7 +76,7 @@ class OPC(BaseActivity):
"""
try:
is_success, error_data = self.opc_repository[server_id].write_data(
is_success, error_data = await self.opc_repository[server_id].write_data(
tag, data, data_type, self.logger, metadata)
if not is_success:
self.send_notification(
@@ -113,14 +116,14 @@ class OPC(BaseActivity):
return False
return True
def manage_output_tags(
async def manage_output_tags(
self, server_id: str, config: dict[str, Any], data: DataFrame,
metadata: dict[str, Any], success: bool) -> tuple[bool, int]:
count = 0
if 'prediction_tags' in config:
for tag, tag_config in config['prediction_tags'].items():
local_success = self.write_data(
local_success = await self.write_data(
server_id=server_id,
tag=tag,
data=data.head(1)['prediction'].values[0],
@@ -136,7 +139,7 @@ class OPC(BaseActivity):
if 'confidence_tags' in config:
for tag, tag_config in config['confidence_tags'].items():
local_success = self.write_data(
local_success = await self.write_data(
server_id=server_id,
tag=tag,
data=data.head(1)['prediction_confidence'].values[0],
@@ -185,7 +188,7 @@ class OPC(BaseActivity):
success = False
continue
local_success, local_count = self.manage_output_tags(
local_success, local_count = await self.manage_output_tags(
server_id, config, data, metadata, success)
success = success and local_success
@@ -221,6 +224,6 @@ class OPC(BaseActivity):
return data.to_dict()
def shutdown(self):
async def shutdown(self):
for opc in self.opc_repository.values():
opc.disconnect()
await opc.disconnect()