SIENTIAPDE-1445

SIENTIAPDE-1445 Add PI Web API configuration to .env.example and enhance worker setup

- Introduced new environment variables for PI Web API configuration in .env.example.
- Updated prepare_worker.py to utilize a camelCase to kebab-case conversion function for queue naming.
- Enhanced logging in prepare_worker to provide better insights during worker preparation.
- Adjusted execution counts in tests.ipynb for improved notebook state management.
This commit is contained in:
vitor-aignosi
2025-12-17 17:02:06 -03:00
parent 034e0b2520
commit e61cb38b5b
4 changed files with 69 additions and 5 deletions

View File

@@ -19,6 +19,10 @@ REDIS_PASSWORD="pass"
TEMPORAL_HOST=localhost:7233 TEMPORAL_HOST=localhost:7233
TEMPORAL_NAMESPACE=scouter TEMPORAL_NAMESPACE=scouter
PI_WEB_API_BASE_URL="https://piwebapi.link.com/piwebapi"
PI_WEB_API_AUTH_TYPE="basic"
PI_WEB_API_AUTH_TOKEN="password"
LOG_LEVEL=INFO LOG_LEVEL=INFO
PROJECT_NAME=scouter PROJECT_NAME=scouter

View File

@@ -5,6 +5,10 @@ from typing import Any
from temporalio.client import Client from temporalio.client import Client
from temporalio.worker import PollerBehaviorAutoscaling, Worker from temporalio.worker import PollerBehaviorAutoscaling, Worker
from sientia_do.observability.logger import Logger
import re
parameters = [ parameters = [
('MAX_CONCURRENT_WORKFLOW_TASKS', '200'), ('MAX_CONCURRENT_WORKFLOW_TASKS', '200'),
('MAX_CONCURRENT_ACTIVITIES', '200'), ('MAX_CONCURRENT_ACTIVITIES', '200'),
@@ -18,16 +22,25 @@ parameters = [
('ACTIVITY_POLLER_BEHAVIUR_MAXIMUM', '200'), ('ACTIVITY_POLLER_BEHAVIUR_MAXIMUM', '200'),
] ]
import re
def camel_to_kebab(text: str) -> str:
"""Convert camelCase or PascalCase to kebab-case."""
text = re.sub('(.)([A-Z][a-z]+)', r'\1-\2', text)
text = re.sub('([a-z0-9])([A-Z])', r'\1-\2', text)
return text.lower()
def prepare_worker( def prepare_worker(
main_workflow: type, main_workflow: type,
other_workflows: Sequence[type], other_workflows: Sequence[type],
activities: Sequence[Any], activities: Sequence[Any],
temporal_client: Client, temporal_client: Client,
logger: Logger,
) -> Worker: ) -> Worker:
main_workflow_name = main_workflow.__name__.upper() main_workflow_name = main_workflow.__name__.upper()
queue_name = f'{main_workflow_name.lower().replace("_", "-")}-queue' queue_name = f'{camel_to_kebab(main_workflow.__name__)}-queue'
local_workflow_parameters = {} local_workflow_parameters = {}
@@ -36,6 +49,8 @@ def prepare_worker(
os.getenv(main_workflow_name + '_' + parameter[0], parameter[1]) os.getenv(main_workflow_name + '_' + parameter[0], parameter[1])
) )
logger.info(f'Preparing worker for {main_workflow_name} with queue {queue_name}')
return Worker( return Worker(
temporal_client, temporal_client,
task_queue=queue_name, task_queue=queue_name,

View File

@@ -140,6 +140,7 @@ async def main():
activities.write_metrics, activities.write_metrics,
activities.store_data_package, activities.store_data_package,
], ],
logger=logger,
), ),
prepare_worker( prepare_worker(
temporal_client=temporal_client, temporal_client=temporal_client,
@@ -154,6 +155,7 @@ async def main():
activities.write_metrics, activities.write_metrics,
activities.store_data_package, activities.store_data_package,
], ],
logger=logger,
), ),
] ]

View File

@@ -2,7 +2,7 @@
"cells": [ "cells": [
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 2,
"id": "9d16b24a", "id": "9d16b24a",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@@ -38,7 +38,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 3,
"id": "5e344fb0", "id": "5e344fb0",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@@ -103,12 +103,22 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"from temporalio import client\n", "from temporalio import client\n",
"import datetime\n",
"\n", "\n",
"temporal_client = await client.Client.connect(\n", "temporal_client = await client.Client.connect(\n",
" target_host=\"localhost:7233\",\n", " target_host=\"localhost:7233\",\n",
" namespace=\"scouter\"\n", " namespace=\"scouter\"\n",
")\n", ")\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "45712d7a",
"metadata": {},
"outputs": [],
"source": [
"\n",
"import datetime\n",
"\n", "\n",
"now = datetime.datetime.now()\n", "now = datetime.datetime.now()\n",
"\n", "\n",
@@ -124,6 +134,31 @@
")\n", ")\n",
"\n" "\n"
] ]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "d065d0de",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"pi-web-api-scouter\n"
]
}
],
"source": [
"import re\n",
"def camel_to_kebab(text: str) -> str:\n",
" \"\"\"Convert camelCase or PascalCase to kebab-case.\"\"\"\n",
" text = re.sub('(.)([A-Z][a-z]+)', r'\\1-\\2', text)\n",
" text = re.sub('([a-z0-9])([A-Z])', r'\\1-\\2', text)\n",
" return text.lower()\n",
"\n",
"print(camel_to_kebab('PiWebApiScouter'))\n"
]
} }
], ],
"metadata": { "metadata": {
@@ -133,7 +168,15 @@
"name": "python3" "name": "python3"
}, },
"language_info": { "language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python", "name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.14" "version": "3.11.14"
} }
}, },