2026-03-26 21:57:56 +00:00
|
|
|
"""Temporal worker entrypoint for activity-core.
|
|
|
|
|
|
|
|
|
|
Starts two workers (wired up in T20):
|
|
|
|
|
- orchestrator-tq: RunActivityWorkflow + its activities
|
|
|
|
|
- task-execution-tq: TaskExecutorWorkflow
|
|
|
|
|
|
|
|
|
|
Run with:
|
|
|
|
|
TEMPORAL_HOST=localhost:7233 \
|
|
|
|
|
ACTCORE_DB_URL=postgresql+asyncpg://actcore:actcore@localhost:5433/actcore \
|
|
|
|
|
python -m activity_core.worker
|
|
|
|
|
|
|
|
|
|
Environment variables:
|
|
|
|
|
TEMPORAL_HOST Temporal frontend address (default: localhost:7233)
|
|
|
|
|
TEMPORAL_NAMESPACE Temporal namespace (default: default)
|
|
|
|
|
ACTCORE_DB_URL App DB connection string (required)
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
import asyncio
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
from temporalio.client import Client
|
|
|
|
|
from temporalio.worker import Worker
|
|
|
|
|
|
|
|
|
|
from activity_core.activities import (
|
2026-03-26 22:02:15 +00:00
|
|
|
init_session_factory,
|
2026-03-26 21:57:56 +00:00
|
|
|
load_activity_definition,
|
|
|
|
|
log_run,
|
|
|
|
|
resolve_context,
|
|
|
|
|
)
|
|
|
|
|
from activity_core.workflows import RunActivityWorkflow, TaskExecutorWorkflow
|
|
|
|
|
|
|
|
|
|
TEMPORAL_HOST = os.environ.get("TEMPORAL_HOST", "localhost:7233")
|
|
|
|
|
TEMPORAL_NAMESPACE = os.environ.get("TEMPORAL_NAMESPACE", "default")
|
|
|
|
|
|
|
|
|
|
ORCHESTRATOR_TASK_QUEUE = "orchestrator-tq"
|
|
|
|
|
TASK_EXECUTION_TASK_QUEUE = "task-execution-tq"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def run() -> None:
|
2026-03-26 22:02:15 +00:00
|
|
|
db_url = os.environ.get("ACTCORE_DB_URL")
|
|
|
|
|
if not db_url:
|
|
|
|
|
raise RuntimeError("ACTCORE_DB_URL is required")
|
|
|
|
|
init_session_factory(db_url)
|
|
|
|
|
|
2026-03-26 21:57:56 +00:00
|
|
|
client = await Client.connect(TEMPORAL_HOST, namespace=TEMPORAL_NAMESPACE)
|
|
|
|
|
|
|
|
|
|
orchestrator_worker = Worker(
|
|
|
|
|
client,
|
|
|
|
|
task_queue=ORCHESTRATOR_TASK_QUEUE,
|
|
|
|
|
workflows=[RunActivityWorkflow],
|
|
|
|
|
activities=[load_activity_definition, resolve_context, log_run],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
task_worker = Worker(
|
|
|
|
|
client,
|
|
|
|
|
task_queue=TASK_EXECUTION_TASK_QUEUE,
|
|
|
|
|
workflows=[TaskExecutorWorkflow],
|
|
|
|
|
activities=[],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
async with orchestrator_worker, task_worker:
|
|
|
|
|
print(
|
|
|
|
|
f"Workers running — queues: {ORCHESTRATOR_TASK_QUEUE!r}, "
|
|
|
|
|
f"{TASK_EXECUTION_TASK_QUEUE!r} (namespace={TEMPORAL_NAMESPACE!r})"
|
|
|
|
|
)
|
|
|
|
|
await asyncio.Future() # run until cancelled
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
asyncio.run(run())
|