from temporalio import workflow with workflow.unsafe.imports_passed_through(): from scouter.activities.faker import Faker from datetime import timedelta from typing import Dict, Any from sientia_do.temporal.policies import retry_policy @workflow.defn(name="fake_data") class FakeData: """ Test data generation workflow for development and testing purposes. This workflow generates synthetic industrial sensor data and publishes it to Kafka topics. It's designed for: - Development and testing of data processing pipelines - Load testing of downstream systems - Demonstration of data flow patterns - Validation of data quality filters and aggregation functions The generated data simulates realistic industrial sensor readings with configurable message counts and topic routing. """ @workflow.run async def run(self, workflow_input: Dict[str, Any]) -> str: """ Execute the fake data generation workflow. This method generates synthetic sensor data and publishes it to the specified Kafka topic. The data includes realistic industrial sensor readings with configurable parameters for testing and development purposes. Args: workflow_input (dict[str, Any]): Workflow configuration parameters. Required fields: - topic (str): Kafka topic name for data publication - metadata (dict[str, Any], optional): Workflow execution metadata - num_messages (int, optional): Number of messages to generate. Defaults to random count between 1 and available sensor tags. Returns: str: Success confirmation message Raises: WorkflowExecutionError: If workflow execution fails ActivityExecutionError: If data generation or Kafka publishing fails """ await workflow.execute_activity_method( Faker.generate_and_send_data, { 'topic': workflow_input['topic'] }, retry_policy=retry_policy, start_to_close_timeout=timedelta(seconds=60) )