tasker-engine 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +443 -0
- data/Rakefile +10 -0
- data/app/controllers/tasker/analytics_controller.rb +179 -0
- data/app/controllers/tasker/application_controller.rb +45 -0
- data/app/controllers/tasker/graphql_controller.rb +193 -0
- data/app/controllers/tasker/handlers_controller.rb +217 -0
- data/app/controllers/tasker/health_controller.rb +229 -0
- data/app/controllers/tasker/metrics_controller.rb +111 -0
- data/app/controllers/tasker/page_sort.rb +97 -0
- data/app/controllers/tasker/task_diagrams_controller.rb +30 -0
- data/app/controllers/tasker/tasks_controller.rb +123 -0
- data/app/controllers/tasker/workflow_steps_controller.rb +69 -0
- data/app/graphql/examples/all_tasks.graphql +22 -0
- data/app/graphql/examples/pending_tasks.graphql +23 -0
- data/app/graphql/tasker/graph_ql_types/annotation_type.rb +14 -0
- data/app/graphql/tasker/graph_ql_types/base_argument.rb +9 -0
- data/app/graphql/tasker/graph_ql_types/base_connection.rb +11 -0
- data/app/graphql/tasker/graph_ql_types/base_edge.rb +10 -0
- data/app/graphql/tasker/graph_ql_types/base_enum.rb +9 -0
- data/app/graphql/tasker/graph_ql_types/base_field.rb +10 -0
- data/app/graphql/tasker/graph_ql_types/base_input_object.rb +10 -0
- data/app/graphql/tasker/graph_ql_types/base_interface.rb +14 -0
- data/app/graphql/tasker/graph_ql_types/base_object.rb +10 -0
- data/app/graphql/tasker/graph_ql_types/base_scalar.rb +9 -0
- data/app/graphql/tasker/graph_ql_types/base_union.rb +11 -0
- data/app/graphql/tasker/graph_ql_types/dependent_system_object_map_type.rb +18 -0
- data/app/graphql/tasker/graph_ql_types/dependent_system_type.rb +13 -0
- data/app/graphql/tasker/graph_ql_types/mutation_type.rb +16 -0
- data/app/graphql/tasker/graph_ql_types/named_step_type.rb +16 -0
- data/app/graphql/tasker/graph_ql_types/named_task_type.rb +14 -0
- data/app/graphql/tasker/graph_ql_types/named_tasks_named_step_type.rb +19 -0
- data/app/graphql/tasker/graph_ql_types/node_type.rb +12 -0
- data/app/graphql/tasker/graph_ql_types/query_type.rb +20 -0
- data/app/graphql/tasker/graph_ql_types/task_annotation_type.rb +17 -0
- data/app/graphql/tasker/graph_ql_types/task_interface.rb +17 -0
- data/app/graphql/tasker/graph_ql_types/task_type.rb +26 -0
- data/app/graphql/tasker/graph_ql_types/workflow_step_type.rb +154 -0
- data/app/graphql/tasker/graph_ql_types.rb +42 -0
- data/app/graphql/tasker/mutations/base_mutation.rb +13 -0
- data/app/graphql/tasker/mutations/cancel_step.rb +29 -0
- data/app/graphql/tasker/mutations/cancel_task.rb +29 -0
- data/app/graphql/tasker/mutations/create_task.rb +52 -0
- data/app/graphql/tasker/mutations/update_step.rb +36 -0
- data/app/graphql/tasker/mutations/update_task.rb +41 -0
- data/app/graphql/tasker/queries/all_annotation_types.rb +17 -0
- data/app/graphql/tasker/queries/all_tasks.rb +23 -0
- data/app/graphql/tasker/queries/base_query.rb +9 -0
- data/app/graphql/tasker/queries/helpers.rb +16 -0
- data/app/graphql/tasker/queries/one_step.rb +24 -0
- data/app/graphql/tasker/queries/one_task.rb +18 -0
- data/app/graphql/tasker/queries/tasks_by_annotation.rb +31 -0
- data/app/graphql/tasker/queries/tasks_by_status.rb +30 -0
- data/app/graphql/tasker/tasker_rails_schema.rb +52 -0
- data/app/jobs/tasker/application_job.rb +8 -0
- data/app/jobs/tasker/metrics_export_job.rb +252 -0
- data/app/jobs/tasker/task_runner_job.rb +224 -0
- data/app/models/tasker/annotation_type.rb +26 -0
- data/app/models/tasker/application_record.rb +70 -0
- data/app/models/tasker/dependent_system.rb +26 -0
- data/app/models/tasker/dependent_system_object_map.rb +64 -0
- data/app/models/tasker/diagram/edge.rb +106 -0
- data/app/models/tasker/diagram/flowchart.rb +137 -0
- data/app/models/tasker/diagram/node.rb +99 -0
- data/app/models/tasker/named_step.rb +41 -0
- data/app/models/tasker/named_task.rb +121 -0
- data/app/models/tasker/named_tasks_named_step.rb +82 -0
- data/app/models/tasker/step_dag_relationship.rb +65 -0
- data/app/models/tasker/step_readiness_status.rb +59 -0
- data/app/models/tasker/task.rb +424 -0
- data/app/models/tasker/task_annotation.rb +36 -0
- data/app/models/tasker/task_diagram.rb +332 -0
- data/app/models/tasker/task_execution_context.rb +29 -0
- data/app/models/tasker/task_namespace.rb +41 -0
- data/app/models/tasker/task_transition.rb +235 -0
- data/app/models/tasker/workflow_step.rb +461 -0
- data/app/models/tasker/workflow_step_edge.rb +94 -0
- data/app/models/tasker/workflow_step_transition.rb +434 -0
- data/app/serializers/tasker/annotation_type_serializer.rb +8 -0
- data/app/serializers/tasker/handler_serializer.rb +109 -0
- data/app/serializers/tasker/task_annotation_serializer.rb +32 -0
- data/app/serializers/tasker/task_serializer.rb +168 -0
- data/app/serializers/tasker/workflow_step_serializer.rb +27 -0
- data/app/services/tasker/analytics_service.rb +409 -0
- data/app/views/tasker/task/_diagram.html.erb +32 -0
- data/config/initializers/dry_struct.rb +11 -0
- data/config/initializers/statesman.rb +6 -0
- data/config/initializers/tasker_orchestration.rb +17 -0
- data/config/initializers/time_formats.rb +4 -0
- data/config/routes.rb +34 -0
- data/config/tasker/subscriptions/example_integrations.yml +67 -0
- data/config/tasker/system_events.yml +305 -0
- data/db/functions/calculate_dependency_levels_v01.sql +45 -0
- data/db/functions/get_analytics_metrics_v01.sql +137 -0
- data/db/functions/get_slowest_steps_v01.sql +82 -0
- data/db/functions/get_slowest_tasks_v01.sql +96 -0
- data/db/functions/get_step_readiness_status_batch_v01.sql +140 -0
- data/db/functions/get_step_readiness_status_v01.sql +139 -0
- data/db/functions/get_system_health_counts_v01.sql +108 -0
- data/db/functions/get_task_execution_context_v01.sql +108 -0
- data/db/functions/get_task_execution_contexts_batch_v01.sql +104 -0
- data/db/init/schema.sql +2277 -0
- data/db/migrate/20250701165431_initial_tasker_schema.rb +116 -0
- data/db/views/tasker_step_dag_relationships_v01.sql +69 -0
- data/docs/APPLICATION_GENERATOR.md +384 -0
- data/docs/AUTH.md +1780 -0
- data/docs/CIRCUIT_BREAKER.md +224 -0
- data/docs/DEVELOPER_GUIDE.md +2665 -0
- data/docs/EVENT_SYSTEM.md +637 -0
- data/docs/EXECUTION_CONFIGURATION.md +341 -0
- data/docs/FLOW_CHART.md +149 -0
- data/docs/HEALTH.md +542 -0
- data/docs/METRICS.md +731 -0
- data/docs/OPTIMIZATION_PLAN.md +1479 -0
- data/docs/OVERVIEW.md +552 -0
- data/docs/QUICK_START.md +270 -0
- data/docs/REGISTRY_SYSTEMS.md +373 -0
- data/docs/REST_API.md +632 -0
- data/docs/ROADMAP.md +221 -0
- data/docs/SQL_FUNCTIONS.md +1408 -0
- data/docs/TASK_DIAGRAM.md +252 -0
- data/docs/TASK_EXECUTION_CONTROL_FLOW.md +237 -0
- data/docs/TELEMETRY.md +795 -0
- data/docs/TROUBLESHOOTING.md +756 -0
- data/docs/TaskHandlerGenerator.html +255 -0
- data/docs/Tasker/Analysis/RuntimeGraphAnalyzer.html +907 -0
- data/docs/Tasker/Analysis/TemplateGraphAnalyzer.html +1236 -0
- data/docs/Tasker/Analysis.html +117 -0
- data/docs/Tasker/AnalyticsController.html +450 -0
- data/docs/Tasker/AnalyticsService/BottleneckAnalytics.html +816 -0
- data/docs/Tasker/AnalyticsService/PerformanceAnalytics.html +586 -0
- data/docs/Tasker/AnalyticsService.html +2221 -0
- data/docs/Tasker/AnnotationType.html +137 -0
- data/docs/Tasker/AnnotationTypeSerializer.html +124 -0
- data/docs/Tasker/ApplicationController.html +147 -0
- data/docs/Tasker/ApplicationJob.html +128 -0
- data/docs/Tasker/ApplicationRecord.html +378 -0
- data/docs/Tasker/Authentication/AuthenticationError.html +124 -0
- data/docs/Tasker/Authentication/ConfigurationError.html +124 -0
- data/docs/Tasker/Authentication/Coordinator.html +242 -0
- data/docs/Tasker/Authentication/Interface.html +560 -0
- data/docs/Tasker/Authentication/InterfaceError.html +124 -0
- data/docs/Tasker/Authentication/NoneAuthenticator.html +338 -0
- data/docs/Tasker/Authentication.html +119 -0
- data/docs/Tasker/Authorization/AuthorizationError.html +139 -0
- data/docs/Tasker/Authorization/BaseCoordinator.html +927 -0
- data/docs/Tasker/Authorization/ConfigurationError.html +153 -0
- data/docs/Tasker/Authorization/ResourceConstants/ACTIONS.html +428 -0
- data/docs/Tasker/Authorization/ResourceConstants/RESOURCES.html +365 -0
- data/docs/Tasker/Authorization/ResourceConstants.html +146 -0
- data/docs/Tasker/Authorization/ResourceRegistry.html +882 -0
- data/docs/Tasker/Authorization/UnauthorizedError.html +153 -0
- data/docs/Tasker/Authorization.html +582 -0
- data/docs/Tasker/CacheCapabilities.html +167 -0
- data/docs/Tasker/CacheStrategy.html +1297 -0
- data/docs/Tasker/Concerns/Authenticatable.html +116 -0
- data/docs/Tasker/Concerns/Authorizable/AdminStatusChecker.html +256 -0
- data/docs/Tasker/Concerns/Authorizable.html +816 -0
- data/docs/Tasker/Concerns/ControllerAuthorizable.html +157 -0
- data/docs/Tasker/Concerns/EventPublisher.html +4023 -0
- data/docs/Tasker/Concerns/IdempotentStateTransitions.html +806 -0
- data/docs/Tasker/Concerns/LifecycleEventHelpers.html +129 -0
- data/docs/Tasker/Concerns/OrchestrationPublisher.html +129 -0
- data/docs/Tasker/Concerns/StateMachineBase/ClassMethods.html +1075 -0
- data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase/ClassMethods.html +191 -0
- data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase.html +126 -0
- data/docs/Tasker/Concerns/StateMachineBase.html +153 -0
- data/docs/Tasker/Concerns/StructuredLogging.html +1413 -0
- data/docs/Tasker/Concerns.html +117 -0
- data/docs/Tasker/Configuration/AuthConfiguration.html +1023 -0
- data/docs/Tasker/Configuration/ConfigurationProxy.html +581 -0
- data/docs/Tasker/Configuration/DatabaseConfiguration.html +475 -0
- data/docs/Tasker/Configuration/EngineConfiguration.html +1265 -0
- data/docs/Tasker/Configuration/HealthConfiguration.html +791 -0
- data/docs/Tasker/Configuration/TelemetryConfiguration.html +1308 -0
- data/docs/Tasker/Configuration/TelemetryConfigurationProxy.html +388 -0
- data/docs/Tasker/Configuration.html +1669 -0
- data/docs/Tasker/ConfigurationError.html +143 -0
- data/docs/Tasker/ConfiguredTask.html +514 -0
- data/docs/Tasker/Constants/EventDefinitions.html +590 -0
- data/docs/Tasker/Constants/LifecycleEvents.html +137 -0
- data/docs/Tasker/Constants/ObservabilityEvents/Step.html +152 -0
- data/docs/Tasker/Constants/ObservabilityEvents/Task.html +142 -0
- data/docs/Tasker/Constants/ObservabilityEvents.html +126 -0
- data/docs/Tasker/Constants/RegistryEvents.html +285 -0
- data/docs/Tasker/Constants/StepEvents.html +177 -0
- data/docs/Tasker/Constants/TaskEvents.html +167 -0
- data/docs/Tasker/Constants/TaskExecution/ExecutionStatus.html +207 -0
- data/docs/Tasker/Constants/TaskExecution/HealthStatus.html +191 -0
- data/docs/Tasker/Constants/TaskExecution/RecommendedAction.html +207 -0
- data/docs/Tasker/Constants/TaskExecution.html +126 -0
- data/docs/Tasker/Constants/TaskFinalization/ErrorMessages.html +132 -0
- data/docs/Tasker/Constants/TaskFinalization/PendingReasons.html +207 -0
- data/docs/Tasker/Constants/TaskFinalization/ReenqueueReasons.html +239 -0
- data/docs/Tasker/Constants/TaskFinalization.html +126 -0
- data/docs/Tasker/Constants/TaskStatuses.html +223 -0
- data/docs/Tasker/Constants/TestEvents.html +163 -0
- data/docs/Tasker/Constants/WorkflowEvents.html +222 -0
- data/docs/Tasker/Constants/WorkflowStepStatuses.html +223 -0
- data/docs/Tasker/Constants.html +561 -0
- data/docs/Tasker/DependentSystem.html +137 -0
- data/docs/Tasker/DependentSystemObjectMap.html +250 -0
- data/docs/Tasker/DetectorRegistry.html +598 -0
- data/docs/Tasker/Diagram/Edge.html +1191 -0
- data/docs/Tasker/Diagram/Flowchart.html +1539 -0
- data/docs/Tasker/Diagram/Node.html +1165 -0
- data/docs/Tasker/Diagram.html +117 -0
- data/docs/Tasker/Engine.html +215 -0
- data/docs/Tasker/Error.html +139 -0
- data/docs/Tasker/Events/Bus.html +1226 -0
- data/docs/Tasker/Events/Catalog/CatalogPrinter.html +258 -0
- data/docs/Tasker/Events/Catalog/CustomEventRegistrar.html +276 -0
- data/docs/Tasker/Events/Catalog/ExamplePayloadGenerator.html +294 -0
- data/docs/Tasker/Events/Catalog.html +1291 -0
- data/docs/Tasker/Events/CustomRegistry.html +943 -0
- data/docs/Tasker/Events/DefinitionLoader.html +575 -0
- data/docs/Tasker/Events/EventPayloadBuilder/ErrorInfoExtractor.html +286 -0
- data/docs/Tasker/Events/EventPayloadBuilder/StepPayloadBuilder.html +312 -0
- data/docs/Tasker/Events/EventPayloadBuilder.html +664 -0
- data/docs/Tasker/Events/Publisher.html +365 -0
- data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer/ErrorTypeClassifier.html +1128 -0
- data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer.html +270 -0
- data/docs/Tasker/Events/Subscribers/BaseSubscriber/MetricTagsExtractor.html +266 -0
- data/docs/Tasker/Events/Subscribers/BaseSubscriber.html +2556 -0
- data/docs/Tasker/Events/Subscribers/MetricsSubscriber.html +723 -0
- data/docs/Tasker/Events/Subscribers/TelemetrySubscriber.html +2251 -0
- data/docs/Tasker/Events/Subscribers.html +117 -0
- data/docs/Tasker/Events/SubscriptionLoader.html +493 -0
- data/docs/Tasker/Events.html +294 -0
- data/docs/Tasker/EventsGenerator.html +459 -0
- data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics/AnalyticsMetrics.html +135 -0
- data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics.html +412 -0
- data/docs/Tasker/Functions/FunctionBasedDependencyLevels.html +598 -0
- data/docs/Tasker/Functions/FunctionBasedSlowestSteps/SlowestStep.html +135 -0
- data/docs/Tasker/Functions/FunctionBasedSlowestSteps.html +453 -0
- data/docs/Tasker/Functions/FunctionBasedSlowestTasks/SlowestTask.html +135 -0
- data/docs/Tasker/Functions/FunctionBasedSlowestTasks.html +453 -0
- data/docs/Tasker/Functions/FunctionBasedStepReadinessStatus.html +1457 -0
- data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts/HealthMetrics.html +135 -0
- data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts.html +370 -0
- data/docs/Tasker/Functions/FunctionBasedTaskExecutionContext.html +1250 -0
- data/docs/Tasker/Functions/FunctionWrapper.html +479 -0
- data/docs/Tasker/Functions.html +117 -0
- data/docs/Tasker/Generators/AuthenticatorGenerator/UsageInstructionsFormatter.html +244 -0
- data/docs/Tasker/Generators/AuthenticatorGenerator.html +373 -0
- data/docs/Tasker/Generators/AuthorizationCoordinatorGenerator.html +430 -0
- data/docs/Tasker/Generators/SubscriberGenerator.html +377 -0
- data/docs/Tasker/Generators/TaskHandlerGenerator.html +263 -0
- data/docs/Tasker/Generators.html +117 -0
- data/docs/Tasker/GraphQLTypes/AnnotationType.html +132 -0
- data/docs/Tasker/GraphQLTypes/BaseArgument.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseConnection.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseEdge.html +130 -0
- data/docs/Tasker/GraphQLTypes/BaseEnum.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseField.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseInputObject.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseInterface.html +116 -0
- data/docs/Tasker/GraphQLTypes/BaseObject.html +128 -0
- data/docs/Tasker/GraphQLTypes/BaseScalar.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseUnion.html +124 -0
- data/docs/Tasker/GraphQLTypes/DependentSystemObjectMapType.html +132 -0
- data/docs/Tasker/GraphQLTypes/DependentSystemType.html +132 -0
- data/docs/Tasker/GraphQLTypes/MutationType.html +132 -0
- data/docs/Tasker/GraphQLTypes/NamedStepType.html +132 -0
- data/docs/Tasker/GraphQLTypes/NamedTaskType.html +132 -0
- data/docs/Tasker/GraphQLTypes/NamedTasksNamedStepType.html +132 -0
- data/docs/Tasker/GraphQLTypes/NodeType.html +118 -0
- data/docs/Tasker/GraphQLTypes/QueryType.html +139 -0
- data/docs/Tasker/GraphQLTypes/TaskAnnotationType.html +132 -0
- data/docs/Tasker/GraphQLTypes/TaskInterface.html +111 -0
- data/docs/Tasker/GraphQLTypes/TaskType.html +201 -0
- data/docs/Tasker/GraphQLTypes/WorkflowStepType.html +694 -0
- data/docs/Tasker/GraphQLTypes.html +130 -0
- data/docs/Tasker/GraphqlController.html +251 -0
- data/docs/Tasker/HandlerFactory.html +1518 -0
- data/docs/Tasker/HandlerSerializer.html +682 -0
- data/docs/Tasker/HandlersController.html +574 -0
- data/docs/Tasker/HashIdentityStrategy.html +278 -0
- data/docs/Tasker/Health/ReadinessChecker.html +712 -0
- data/docs/Tasker/Health/StatusChecker.html +653 -0
- data/docs/Tasker/Health.html +117 -0
- data/docs/Tasker/HealthController.html +523 -0
- data/docs/Tasker/IdentityStrategy.html +276 -0
- data/docs/Tasker/InvalidTaskHandlerConfig.html +135 -0
- data/docs/Tasker/LifecycleEvents/Events/Step.html +162 -0
- data/docs/Tasker/LifecycleEvents/Events/Task.html +162 -0
- data/docs/Tasker/LifecycleEvents/Events.html +204 -0
- data/docs/Tasker/LifecycleEvents/Publisher.html +132 -0
- data/docs/Tasker/LifecycleEvents.html +799 -0
- data/docs/Tasker/Logging/CorrelationIdGenerator.html +688 -0
- data/docs/Tasker/Logging.html +115 -0
- data/docs/Tasker/MetricsController.html +293 -0
- data/docs/Tasker/MetricsExportJob.html +414 -0
- data/docs/Tasker/Mutations/BaseMutation.html +128 -0
- data/docs/Tasker/Mutations/CancelStep.html +219 -0
- data/docs/Tasker/Mutations/CancelTask.html +221 -0
- data/docs/Tasker/Mutations/CreateTask.html +243 -0
- data/docs/Tasker/Mutations/UpdateStep.html +243 -0
- data/docs/Tasker/Mutations/UpdateTask.html +243 -0
- data/docs/Tasker/Mutations.html +117 -0
- data/docs/Tasker/NamedStep.html +216 -0
- data/docs/Tasker/NamedTask.html +910 -0
- data/docs/Tasker/NamedTasksNamedStep.html +435 -0
- data/docs/Tasker/Orchestration/BackoffCalculator.html +404 -0
- data/docs/Tasker/Orchestration/ConnectionBuilder/ConfigValidator.html +258 -0
- data/docs/Tasker/Orchestration/ConnectionBuilder.html +435 -0
- data/docs/Tasker/Orchestration/ConnectionPoolIntelligence.html +513 -0
- data/docs/Tasker/Orchestration/Coordinator.html +641 -0
- data/docs/Tasker/Orchestration/FutureStateAnalyzer.html +1045 -0
- data/docs/Tasker/Orchestration/Orchestrator.html +679 -0
- data/docs/Tasker/Orchestration/PluginIntegration.html +1127 -0
- data/docs/Tasker/Orchestration/ResponseProcessor.html +504 -0
- data/docs/Tasker/Orchestration/RetryHeaderParser.html +304 -0
- data/docs/Tasker/Orchestration/StepExecutor.html +995 -0
- data/docs/Tasker/Orchestration/StepSequenceFactory.html +644 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/BlockageChecker.html +264 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/ContextManager.html +254 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/DelayCalculator.html +556 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationDecisionMaker.html +348 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationProcessor.html +286 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/ReasonDeterminer.html +432 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/ReenqueueManager.html +296 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/UnclearStateHandler.html +314 -0
- data/docs/Tasker/Orchestration/TaskFinalizer.html +1212 -0
- data/docs/Tasker/Orchestration/TaskInitializer.html +766 -0
- data/docs/Tasker/Orchestration/TaskReenqueuer.html +506 -0
- data/docs/Tasker/Orchestration/ViableStepDiscovery.html +442 -0
- data/docs/Tasker/Orchestration/WorkflowCoordinator.html +510 -0
- data/docs/Tasker/Orchestration.html +130 -0
- data/docs/Tasker/PageSort/PageSortParamsBuilder.html +296 -0
- data/docs/Tasker/PageSort.html +247 -0
- data/docs/Tasker/PermanentError.html +518 -0
- data/docs/Tasker/ProceduralError.html +147 -0
- data/docs/Tasker/Queries/AllAnnotationTypes.html +217 -0
- data/docs/Tasker/Queries/AllTasks.html +221 -0
- data/docs/Tasker/Queries/BaseQuery.html +128 -0
- data/docs/Tasker/Queries/Helpers.html +187 -0
- data/docs/Tasker/Queries/OneStep.html +225 -0
- data/docs/Tasker/Queries/OneTask.html +217 -0
- data/docs/Tasker/Queries/TasksByAnnotation.html +231 -0
- data/docs/Tasker/Queries/TasksByStatus.html +233 -0
- data/docs/Tasker/Queries.html +119 -0
- data/docs/Tasker/Railtie.html +124 -0
- data/docs/Tasker/Registry/BaseRegistry.html +1690 -0
- data/docs/Tasker/Registry/EventPublisher.html +667 -0
- data/docs/Tasker/Registry/InterfaceValidator.html +569 -0
- data/docs/Tasker/Registry/RegistrationError.html +132 -0
- data/docs/Tasker/Registry/RegistryError.html +139 -0
- data/docs/Tasker/Registry/StatisticsCollector.html +841 -0
- data/docs/Tasker/Registry/SubscriberRegistry.html +1504 -0
- data/docs/Tasker/Registry/ValidationError.html +132 -0
- data/docs/Tasker/Registry.html +119 -0
- data/docs/Tasker/RetryableError.html +515 -0
- data/docs/Tasker/StateMachine/Compatibility.html +282 -0
- data/docs/Tasker/StateMachine/InvalidStateTransition.html +135 -0
- data/docs/Tasker/StateMachine/StepStateMachine/StandardizedPayloadBuilder.html +260 -0
- data/docs/Tasker/StateMachine/StepStateMachine.html +2215 -0
- data/docs/Tasker/StateMachine/TaskStateMachine.html +734 -0
- data/docs/Tasker/StateMachine.html +602 -0
- data/docs/Tasker/StepDagRelationship.html +657 -0
- data/docs/Tasker/StepHandler/Api/Config.html +1091 -0
- data/docs/Tasker/StepHandler/Api.html +884 -0
- data/docs/Tasker/StepHandler/AutomaticEventPublishing.html +321 -0
- data/docs/Tasker/StepHandler/Base.html +970 -0
- data/docs/Tasker/StepHandler.html +119 -0
- data/docs/Tasker/StepReadinessStatus.html +836 -0
- data/docs/Tasker/Task.html +2575 -0
- data/docs/Tasker/TaskAnnotation.html +137 -0
- data/docs/Tasker/TaskAnnotationSerializer.html +124 -0
- data/docs/Tasker/TaskBuilder/StepNameValidator.html +264 -0
- data/docs/Tasker/TaskBuilder/StepTemplateDefiner.html +264 -0
- data/docs/Tasker/TaskBuilder.html +764 -0
- data/docs/Tasker/TaskDiagram/StepToStepEdgeBuilder.html +260 -0
- data/docs/Tasker/TaskDiagram/TaskToRootStepEdgeBuilder.html +290 -0
- data/docs/Tasker/TaskDiagram.html +548 -0
- data/docs/Tasker/TaskDiagramsController.html +240 -0
- data/docs/Tasker/TaskExecutionContext.html +469 -0
- data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/ClassBasedEventRegistrar.html +238 -0
- data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/YamlEventRegistrar.html +254 -0
- data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner.html +988 -0
- data/docs/Tasker/TaskHandler/ClassMethods.html +357 -0
- data/docs/Tasker/TaskHandler/InstanceMethods.html +1396 -0
- data/docs/Tasker/TaskHandler/StepGroup.html +1748 -0
- data/docs/Tasker/TaskHandler.html +271 -0
- data/docs/Tasker/TaskNamespace.html +312 -0
- data/docs/Tasker/TaskRunnerJob.html +406 -0
- data/docs/Tasker/TaskSerializer.html +474 -0
- data/docs/Tasker/TaskTransition.html +1517 -0
- data/docs/Tasker/TaskWorkflowSummary.html +988 -0
- data/docs/Tasker/TaskerRailsSchema/InvalidObjectTypeError.html +132 -0
- data/docs/Tasker/TaskerRailsSchema/TypeResolutionError.html +139 -0
- data/docs/Tasker/TaskerRailsSchema/UnknownInterfaceError.html +132 -0
- data/docs/Tasker/TaskerRailsSchema.html +384 -0
- data/docs/Tasker/TasksController.html +595 -0
- data/docs/Tasker/Telemetry/EventMapping.html +1307 -0
- data/docs/Tasker/Telemetry/EventRouter.html +2178 -0
- data/docs/Tasker/Telemetry/Events/ExportEvents.html +246 -0
- data/docs/Tasker/Telemetry/Events.html +115 -0
- data/docs/Tasker/Telemetry/ExportCoordinator/DistributedLockTimeoutError.html +135 -0
- data/docs/Tasker/Telemetry/ExportCoordinator.html +2137 -0
- data/docs/Tasker/Telemetry/IntelligentCacheManager.html +1083 -0
- data/docs/Tasker/Telemetry/LogBackend.html +1088 -0
- data/docs/Tasker/Telemetry/MetricTypes/Counter.html +1054 -0
- data/docs/Tasker/Telemetry/MetricTypes/Gauge.html +1270 -0
- data/docs/Tasker/Telemetry/MetricTypes/Histogram.html +1492 -0
- data/docs/Tasker/Telemetry/MetricTypes.html +153 -0
- data/docs/Tasker/Telemetry/MetricsBackend.html +2510 -0
- data/docs/Tasker/Telemetry/MetricsExportService.html +578 -0
- data/docs/Tasker/Telemetry/PluginRegistry.html +1774 -0
- data/docs/Tasker/Telemetry/Plugins/BaseExporter.html +1835 -0
- data/docs/Tasker/Telemetry/Plugins/CsvExporter.html +768 -0
- data/docs/Tasker/Telemetry/Plugins/JsonExporter.html +747 -0
- data/docs/Tasker/Telemetry/Plugins.html +117 -0
- data/docs/Tasker/Telemetry/PrometheusExporter.html +481 -0
- data/docs/Tasker/Telemetry/TraceBackend.html +891 -0
- data/docs/Tasker/Telemetry.html +130 -0
- data/docs/Tasker/Types/AuthConfig.html +886 -0
- data/docs/Tasker/Types/BackoffConfig.html +1063 -0
- data/docs/Tasker/Types/BaseConfig.html +227 -0
- data/docs/Tasker/Types/CacheConfig.html +1731 -0
- data/docs/Tasker/Types/DatabaseConfig.html +388 -0
- data/docs/Tasker/Types/DependencyGraph.html +526 -0
- data/docs/Tasker/Types/DependencyGraphConfig.html +753 -0
- data/docs/Tasker/Types/EngineConfig.html +1181 -0
- data/docs/Tasker/Types/ExecutionConfig.html +1963 -0
- data/docs/Tasker/Types/GraphEdge.html +517 -0
- data/docs/Tasker/Types/GraphMetadata.html +781 -0
- data/docs/Tasker/Types/GraphNode.html +694 -0
- data/docs/Tasker/Types/HealthConfig.html +784 -0
- data/docs/Tasker/Types/StepSequence.html +353 -0
- data/docs/Tasker/Types/StepTemplate.html +1193 -0
- data/docs/Tasker/Types/TaskRequest.html +1179 -0
- data/docs/Tasker/Types/TelemetryConfig.html +2746 -0
- data/docs/Tasker/Types.html +154 -0
- data/docs/Tasker/WorkflowStep/StepFinder.html +282 -0
- data/docs/Tasker/WorkflowStep.html +2724 -0
- data/docs/Tasker/WorkflowStepEdge.html +304 -0
- data/docs/Tasker/WorkflowStepSerializer.html +305 -0
- data/docs/Tasker/WorkflowStepTransition/TransitionDescriptionFormatter.html +282 -0
- data/docs/Tasker/WorkflowStepTransition.html +2201 -0
- data/docs/Tasker/WorkflowStepsController.html +462 -0
- data/docs/Tasker.html +452 -0
- data/docs/VISION.md +584 -0
- data/docs/WHY.md +21 -0
- data/docs/_index.html +2375 -0
- data/docs/class_list.html +54 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +503 -0
- data/docs/events/migration_plan_outcomes.md +80 -0
- data/docs/file.README.html +541 -0
- data/docs/file_list.html +59 -0
- data/docs/frames.html +22 -0
- data/docs/index.html +541 -0
- data/docs/js/app.js +344 -0
- data/docs/js/full_list.js +242 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +9182 -0
- data/docs/top-level-namespace.html +110 -0
- data/lib/generators/tasker/authenticator_generator.rb +301 -0
- data/lib/generators/tasker/authorization_coordinator_generator.rb +139 -0
- data/lib/generators/tasker/events_generator.rb +91 -0
- data/lib/generators/tasker/subscriber_generator.rb +107 -0
- data/lib/generators/tasker/task_handler_generator.rb +138 -0
- data/lib/generators/tasker/templates/api_token_authenticator.rb.erb +113 -0
- data/lib/generators/tasker/templates/api_token_authenticator_spec.rb.erb +144 -0
- data/lib/generators/tasker/templates/authorization_coordinator.rb.erb +95 -0
- data/lib/generators/tasker/templates/authorization_coordinator_spec.rb.erb +142 -0
- data/lib/generators/tasker/templates/custom_authenticator.rb.erb +108 -0
- data/lib/generators/tasker/templates/custom_authenticator_spec.rb.erb +162 -0
- data/lib/generators/tasker/templates/custom_events.yml.erb +62 -0
- data/lib/generators/tasker/templates/custom_subscriber.rb.erb +72 -0
- data/lib/generators/tasker/templates/devise_authenticator.rb.erb +101 -0
- data/lib/generators/tasker/templates/devise_authenticator_spec.rb.erb +126 -0
- data/lib/generators/tasker/templates/initialize.rb.erb +202 -0
- data/lib/generators/tasker/templates/jwt_authenticator.rb.erb +144 -0
- data/lib/generators/tasker/templates/jwt_authenticator_spec.rb.erb +298 -0
- data/lib/generators/tasker/templates/metrics_subscriber.rb.erb +258 -0
- data/lib/generators/tasker/templates/metrics_subscriber_spec.rb.erb +308 -0
- data/lib/generators/tasker/templates/omniauth_authenticator.rb.erb +135 -0
- data/lib/generators/tasker/templates/omniauth_authenticator_spec.rb.erb +196 -0
- data/lib/generators/tasker/templates/opentelemetry_initializer.rb +52 -0
- data/lib/generators/tasker/templates/subscriber.rb.erb +64 -0
- data/lib/generators/tasker/templates/subscriber_spec.rb.erb +80 -0
- data/lib/generators/tasker/templates/task_config.yaml.erb +117 -0
- data/lib/generators/tasker/templates/task_handler.rb.erb +59 -0
- data/lib/generators/tasker/templates/task_handler_spec.rb.erb +159 -0
- data/lib/tasker/analysis/runtime_graph_analyzer.rb +1168 -0
- data/lib/tasker/analysis/template_graph_analyzer.rb +328 -0
- data/lib/tasker/authentication/coordinator.rb +78 -0
- data/lib/tasker/authentication/errors.rb +9 -0
- data/lib/tasker/authentication/interface.rb +36 -0
- data/lib/tasker/authentication/none_authenticator.rb +26 -0
- data/lib/tasker/authorization/base_coordinator.rb +112 -0
- data/lib/tasker/authorization/errors.rb +26 -0
- data/lib/tasker/authorization/resource_constants.rb +74 -0
- data/lib/tasker/authorization/resource_registry.rb +143 -0
- data/lib/tasker/authorization.rb +75 -0
- data/lib/tasker/cache_capabilities.rb +131 -0
- data/lib/tasker/cache_strategy.rb +469 -0
- data/lib/tasker/concerns/authenticatable.rb +41 -0
- data/lib/tasker/concerns/authorizable.rb +204 -0
- data/lib/tasker/concerns/controller_authorizable.rb +124 -0
- data/lib/tasker/concerns/event_publisher.rb +716 -0
- data/lib/tasker/concerns/idempotent_state_transitions.rb +128 -0
- data/lib/tasker/concerns/state_machine_base.rb +218 -0
- data/lib/tasker/concerns/structured_logging.rb +387 -0
- data/lib/tasker/configuration.rb +325 -0
- data/lib/tasker/constants/event_definitions.rb +147 -0
- data/lib/tasker/constants/registry_events.rb +54 -0
- data/lib/tasker/constants.rb +417 -0
- data/lib/tasker/engine.rb +90 -0
- data/lib/tasker/errors.rb +90 -0
- data/lib/tasker/events/catalog.rb +432 -0
- data/lib/tasker/events/custom_registry.rb +175 -0
- data/lib/tasker/events/definition_loader.rb +199 -0
- data/lib/tasker/events/event_payload_builder.rb +461 -0
- data/lib/tasker/events/publisher.rb +149 -0
- data/lib/tasker/events/subscribers/base_subscriber.rb +601 -0
- data/lib/tasker/events/subscribers/metrics_subscriber.rb +120 -0
- data/lib/tasker/events/subscribers/telemetry_subscriber.rb +462 -0
- data/lib/tasker/events/subscription_loader.rb +161 -0
- data/lib/tasker/events.rb +37 -0
- data/lib/tasker/functions/function_based_analytics_metrics.rb +103 -0
- data/lib/tasker/functions/function_based_dependency_levels.rb +54 -0
- data/lib/tasker/functions/function_based_slowest_steps.rb +84 -0
- data/lib/tasker/functions/function_based_slowest_tasks.rb +84 -0
- data/lib/tasker/functions/function_based_step_readiness_status.rb +183 -0
- data/lib/tasker/functions/function_based_system_health_counts.rb +94 -0
- data/lib/tasker/functions/function_based_task_execution_context.rb +148 -0
- data/lib/tasker/functions/function_wrapper.rb +42 -0
- data/lib/tasker/functions.rb +12 -0
- data/lib/tasker/handler_factory.rb +322 -0
- data/lib/tasker/health/readiness_checker.rb +186 -0
- data/lib/tasker/health/status_checker.rb +203 -0
- data/lib/tasker/identity_strategy.rb +38 -0
- data/lib/tasker/logging/correlation_id_generator.rb +120 -0
- data/lib/tasker/orchestration/backoff_calculator.rb +184 -0
- data/lib/tasker/orchestration/connection_builder.rb +122 -0
- data/lib/tasker/orchestration/connection_pool_intelligence.rb +177 -0
- data/lib/tasker/orchestration/coordinator.rb +119 -0
- data/lib/tasker/orchestration/future_state_analyzer.rb +137 -0
- data/lib/tasker/orchestration/plugin_integration.rb +124 -0
- data/lib/tasker/orchestration/response_processor.rb +168 -0
- data/lib/tasker/orchestration/retry_header_parser.rb +78 -0
- data/lib/tasker/orchestration/step_executor.rb +941 -0
- data/lib/tasker/orchestration/step_sequence_factory.rb +67 -0
- data/lib/tasker/orchestration/task_finalizer.rb +564 -0
- data/lib/tasker/orchestration/task_initializer.rb +140 -0
- data/lib/tasker/orchestration/task_reenqueuer.rb +71 -0
- data/lib/tasker/orchestration/viable_step_discovery.rb +65 -0
- data/lib/tasker/orchestration/workflow_coordinator.rb +294 -0
- data/lib/tasker/orchestration.rb +45 -0
- data/lib/tasker/railtie.rb +9 -0
- data/lib/tasker/registry/base_registry.rb +177 -0
- data/lib/tasker/registry/event_publisher.rb +91 -0
- data/lib/tasker/registry/interface_validator.rb +140 -0
- data/lib/tasker/registry/statistics_collector.rb +381 -0
- data/lib/tasker/registry/subscriber_registry.rb +285 -0
- data/lib/tasker/registry.rb +22 -0
- data/lib/tasker/state_machine/step_state_machine.rb +508 -0
- data/lib/tasker/state_machine/task_state_machine.rb +192 -0
- data/lib/tasker/state_machine.rb +83 -0
- data/lib/tasker/step_handler/api.rb +410 -0
- data/lib/tasker/step_handler/base.rb +206 -0
- data/lib/tasker/task_builder.rb +432 -0
- data/lib/tasker/task_handler/class_methods.rb +324 -0
- data/lib/tasker/task_handler/instance_methods.rb +293 -0
- data/lib/tasker/task_handler/step_group.rb +182 -0
- data/lib/tasker/task_handler.rb +43 -0
- data/lib/tasker/telemetry/event_mapping.rb +126 -0
- data/lib/tasker/telemetry/event_router.rb +318 -0
- data/lib/tasker/telemetry/events/export_events.rb +38 -0
- data/lib/tasker/telemetry/export_coordinator.rb +497 -0
- data/lib/tasker/telemetry/intelligent_cache_manager.rb +508 -0
- data/lib/tasker/telemetry/log_backend.rb +224 -0
- data/lib/tasker/telemetry/metric_types.rb +368 -0
- data/lib/tasker/telemetry/metrics_backend.rb +1227 -0
- data/lib/tasker/telemetry/metrics_export_service.rb +392 -0
- data/lib/tasker/telemetry/plugin_registry.rb +333 -0
- data/lib/tasker/telemetry/plugins/base_exporter.rb +246 -0
- data/lib/tasker/telemetry/plugins/csv_exporter.rb +198 -0
- data/lib/tasker/telemetry/plugins/json_exporter.rb +141 -0
- data/lib/tasker/telemetry/prometheus_exporter.rb +249 -0
- data/lib/tasker/telemetry/trace_backend.rb +186 -0
- data/lib/tasker/telemetry.rb +59 -0
- data/lib/tasker/types/auth_config.rb +81 -0
- data/lib/tasker/types/backoff_config.rb +142 -0
- data/lib/tasker/types/cache_config.rb +257 -0
- data/lib/tasker/types/database_config.rb +39 -0
- data/lib/tasker/types/dependency_graph.rb +225 -0
- data/lib/tasker/types/dependency_graph_config.rb +149 -0
- data/lib/tasker/types/engine_config.rb +131 -0
- data/lib/tasker/types/execution_config.rb +289 -0
- data/lib/tasker/types/health_config.rb +84 -0
- data/lib/tasker/types/step_sequence.rb +24 -0
- data/lib/tasker/types/step_template.rb +63 -0
- data/lib/tasker/types/task_request.rb +60 -0
- data/lib/tasker/types/telemetry_config.rb +273 -0
- data/lib/tasker/types.rb +64 -0
- data/lib/tasker/version.rb +7 -0
- data/lib/tasker.rb +82 -0
- data/lib/tasks/tasker_tasks.rake +302 -0
- metadata +958 -0
@@ -0,0 +1,341 @@
|
|
1
|
+
# **🚀 TASKER EXECUTION CONFIGURATION GUIDE**
|
2
|
+
|
3
|
+
*Strategic configuration for performance optimization and system tuning*
|
4
|
+
|
5
|
+
---
|
6
|
+
|
7
|
+
## **📊 OVERVIEW**
|
8
|
+
|
9
|
+
Tasker's execution configuration system provides fine-grained control over performance characteristics while maintaining carefully chosen architectural constants. This design separates **configurable system tuning** from **Ruby-specific optimizations** that should remain fixed.
|
10
|
+
|
11
|
+
## **🎯 CONFIGURATION PHILOSOPHY**
|
12
|
+
|
13
|
+
### **✅ CONFIGURABLE SETTINGS**
|
14
|
+
These affect performance characteristics and should vary by deployment environment:
|
15
|
+
|
16
|
+
- **Concurrency bounds** - Different systems have different optimal ranges
|
17
|
+
- **Timeout configuration** - Heavily dependent on workload characteristics
|
18
|
+
- **Cache duration** - Varies based on system stability vs responsiveness needs
|
19
|
+
|
20
|
+
### **🏗️ ARCHITECTURAL CONSTANTS**
|
21
|
+
These are carefully chosen based on Ruby/Rails characteristics and should NOT be configurable:
|
22
|
+
|
23
|
+
- **Future cleanup timing** - Based on Ruby Concurrent::Future characteristics
|
24
|
+
- **GC trigger thresholds** - Based on Ruby memory management patterns
|
25
|
+
- **Memory management constants** - Based on Ruby GC timing characteristics
|
26
|
+
|
27
|
+
---
|
28
|
+
|
29
|
+
## **⚙️ CONFIGURATION REFERENCE**
|
30
|
+
|
31
|
+
### **Basic Configuration**
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
# config/initializers/tasker.rb
|
35
|
+
Tasker.configure do |config|
|
36
|
+
config.execution do |exec|
|
37
|
+
# Concurrency settings
|
38
|
+
exec.min_concurrent_steps = 3 # Minimum concurrent steps (default: 3)
|
39
|
+
exec.max_concurrent_steps_limit = 12 # Maximum concurrent steps (default: 12)
|
40
|
+
exec.concurrency_cache_duration = 30 # Cache duration in seconds (default: 30)
|
41
|
+
|
42
|
+
# Timeout settings
|
43
|
+
exec.batch_timeout_base_seconds = 30 # Base timeout (default: 30)
|
44
|
+
exec.batch_timeout_per_step_seconds = 5 # Per-step timeout (default: 5)
|
45
|
+
exec.max_batch_timeout_seconds = 120 # Maximum timeout cap (default: 120)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
```
|
49
|
+
|
50
|
+
### **Environment-Specific Examples**
|
51
|
+
|
52
|
+
#### **Development Environment**
|
53
|
+
```ruby
|
54
|
+
# config/environments/development.rb
|
55
|
+
Tasker.configure do |config|
|
56
|
+
config.execution do |exec|
|
57
|
+
# Conservative settings for development
|
58
|
+
exec.min_concurrent_steps = 2
|
59
|
+
exec.max_concurrent_steps_limit = 6
|
60
|
+
exec.concurrency_cache_duration = 60 # Longer cache for stability
|
61
|
+
exec.batch_timeout_base_seconds = 20 # Shorter timeouts for fast feedback
|
62
|
+
exec.max_batch_timeout_seconds = 60
|
63
|
+
end
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
#### **Production Environment**
|
68
|
+
```ruby
|
69
|
+
# config/environments/production.rb
|
70
|
+
Tasker.configure do |config|
|
71
|
+
config.execution do |exec|
|
72
|
+
# High-performance settings for production
|
73
|
+
exec.min_concurrent_steps = 5
|
74
|
+
exec.max_concurrent_steps_limit = 25
|
75
|
+
exec.concurrency_cache_duration = 15 # Shorter cache for responsiveness
|
76
|
+
exec.batch_timeout_base_seconds = 45 # Longer timeouts for reliability
|
77
|
+
exec.batch_timeout_per_step_seconds = 8
|
78
|
+
exec.max_batch_timeout_seconds = 300
|
79
|
+
end
|
80
|
+
end
|
81
|
+
```
|
82
|
+
|
83
|
+
#### **High-Performance System**
|
84
|
+
```ruby
|
85
|
+
# For systems with large database connection pools
|
86
|
+
Tasker.configure do |config|
|
87
|
+
config.execution do |exec|
|
88
|
+
exec.min_concurrent_steps = 10
|
89
|
+
exec.max_concurrent_steps_limit = 50
|
90
|
+
exec.concurrency_cache_duration = 10 # Very responsive
|
91
|
+
exec.batch_timeout_base_seconds = 60
|
92
|
+
exec.batch_timeout_per_step_seconds = 10
|
93
|
+
exec.max_batch_timeout_seconds = 600 # Long-running workflows
|
94
|
+
end
|
95
|
+
end
|
96
|
+
```
|
97
|
+
|
98
|
+
---
|
99
|
+
|
100
|
+
## **🔧 CONFIGURATION DETAILS**
|
101
|
+
|
102
|
+
### **Concurrency Settings**
|
103
|
+
|
104
|
+
| Setting | Purpose | Considerations |
|
105
|
+
|---------|---------|----------------|
|
106
|
+
| `min_concurrent_steps` | Conservative lower bound | Ensures system stability under extreme load |
|
107
|
+
| `max_concurrent_steps_limit` | Upper bound for dynamic calculation | Should align with database connection pool size |
|
108
|
+
| `concurrency_cache_duration` | How long to cache concurrency calculations | Balance between responsiveness and performance |
|
109
|
+
|
110
|
+
**Dynamic Calculation**: Tasker automatically calculates optimal concurrency between `min` and `max` based on:
|
111
|
+
- System health metrics
|
112
|
+
- Database connection pool utilization
|
113
|
+
- Current workload patterns
|
114
|
+
|
115
|
+
### **Timeout Configuration**
|
116
|
+
|
117
|
+
| Setting | Purpose | Formula |
|
118
|
+
|---------|---------|---------|
|
119
|
+
| `batch_timeout_base_seconds` | Starting timeout | Base time before per-step adjustments |
|
120
|
+
| `batch_timeout_per_step_seconds` | Per-step addition | `base + (steps * per_step)` |
|
121
|
+
| `max_batch_timeout_seconds` | Absolute maximum | Prevents runaway timeouts |
|
122
|
+
|
123
|
+
**Example Calculations**:
|
124
|
+
```ruby
|
125
|
+
# With defaults: base=30, per_step=5, max=120
|
126
|
+
config.calculate_batch_timeout(1) # => 35 seconds (30 + 1*5)
|
127
|
+
config.calculate_batch_timeout(10) # => 80 seconds (30 + 10*5)
|
128
|
+
config.calculate_batch_timeout(50) # => 120 seconds (capped at max)
|
129
|
+
```
|
130
|
+
|
131
|
+
### **Architectural Constants**
|
132
|
+
|
133
|
+
These values are **NOT configurable** and are based on Ruby characteristics:
|
134
|
+
|
135
|
+
| Constant | Value | Rationale |
|
136
|
+
|----------|-------|-----------|
|
137
|
+
| `future_cleanup_wait_seconds` | 1 second | Optimal for Ruby Concurrent::Future cleanup |
|
138
|
+
| `gc_trigger_batch_size_threshold` | 6 operations | Ruby memory pressure detection point |
|
139
|
+
| `gc_trigger_duration_threshold` | 30 seconds | Ruby GC timing characteristics |
|
140
|
+
|
141
|
+
---
|
142
|
+
|
143
|
+
## **📊 PERFORMANCE TUNING GUIDE**
|
144
|
+
|
145
|
+
### **Identifying Optimal Settings**
|
146
|
+
|
147
|
+
1. **Start with defaults** for initial deployment
|
148
|
+
2. **Monitor system metrics**:
|
149
|
+
- Database connection pool utilization
|
150
|
+
- Step execution times
|
151
|
+
- Memory usage patterns
|
152
|
+
- Error rates
|
153
|
+
|
154
|
+
3. **Adjust based on patterns**:
|
155
|
+
- **High connection pressure** → Reduce `max_concurrent_steps_limit`
|
156
|
+
- **Frequent timeouts** → Increase timeout settings
|
157
|
+
- **Slow response to load changes** → Reduce `concurrency_cache_duration`
|
158
|
+
|
159
|
+
### **Common Tuning Scenarios**
|
160
|
+
|
161
|
+
#### **API-Heavy Workflows**
|
162
|
+
```ruby
|
163
|
+
config.execution do |exec|
|
164
|
+
exec.batch_timeout_base_seconds = 60 # Longer base for API calls
|
165
|
+
exec.batch_timeout_per_step_seconds = 10 # More time per API step
|
166
|
+
exec.max_batch_timeout_seconds = 300 # Allow for slow APIs
|
167
|
+
end
|
168
|
+
```
|
169
|
+
|
170
|
+
#### **Database-Intensive Workflows**
|
171
|
+
```ruby
|
172
|
+
config.execution do |exec|
|
173
|
+
exec.max_concurrent_steps_limit = 8 # Respect DB connection limits
|
174
|
+
exec.concurrency_cache_duration = 45 # Stable DB load
|
175
|
+
end
|
176
|
+
```
|
177
|
+
|
178
|
+
#### **Mixed Workload System**
|
179
|
+
```ruby
|
180
|
+
config.execution do |exec|
|
181
|
+
exec.min_concurrent_steps = 4 # Higher minimum for consistency
|
182
|
+
exec.max_concurrent_steps_limit = 16 # Moderate maximum
|
183
|
+
exec.concurrency_cache_duration = 20 # Balance responsiveness/stability
|
184
|
+
end
|
185
|
+
```
|
186
|
+
|
187
|
+
---
|
188
|
+
|
189
|
+
## **🔍 VALIDATION & MONITORING**
|
190
|
+
|
191
|
+
### **Configuration Validation**
|
192
|
+
|
193
|
+
Tasker automatically validates configuration on startup:
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
# This will raise an error if invalid
|
197
|
+
config.execution.validate!
|
198
|
+
|
199
|
+
# Manual validation with detailed errors
|
200
|
+
errors = config.execution.validate_concurrency_bounds
|
201
|
+
errors += config.execution.validate_timeout_configuration
|
202
|
+
puts "Configuration errors: #{errors}" unless errors.empty?
|
203
|
+
```
|
204
|
+
|
205
|
+
### **Runtime Monitoring**
|
206
|
+
|
207
|
+
Monitor these metrics to optimize configuration:
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
# Access current configuration
|
211
|
+
current_config = Tasker.configuration.execution
|
212
|
+
|
213
|
+
# Monitor dynamic concurrency decisions
|
214
|
+
max_concurrent = step_executor.max_concurrent_steps
|
215
|
+
|
216
|
+
# Check timeout calculations
|
217
|
+
timeout_for_batch = current_config.calculate_batch_timeout(batch_size)
|
218
|
+
|
219
|
+
# Monitor GC triggers
|
220
|
+
should_gc = current_config.should_trigger_gc?(batch_size, duration)
|
221
|
+
```
|
222
|
+
|
223
|
+
### **Structured Logging Integration**
|
224
|
+
|
225
|
+
Tasker logs configuration-related decisions:
|
226
|
+
|
227
|
+
```json
|
228
|
+
{
|
229
|
+
"message": "Dynamic concurrency calculated",
|
230
|
+
"rails_pool_size": 25,
|
231
|
+
"rails_available": 18,
|
232
|
+
"recommended_concurrency": 8,
|
233
|
+
"connection_pressure": "moderate"
|
234
|
+
}
|
235
|
+
```
|
236
|
+
|
237
|
+
---
|
238
|
+
|
239
|
+
## **🚨 BEST PRACTICES**
|
240
|
+
|
241
|
+
### **✅ DO**
|
242
|
+
|
243
|
+
- **Start with defaults** and measure before optimizing
|
244
|
+
- **Test configuration changes** in staging before production
|
245
|
+
- **Monitor system metrics** after configuration changes
|
246
|
+
- **Use environment-specific settings** for development vs production
|
247
|
+
- **Validate configuration** during deployment
|
248
|
+
|
249
|
+
### **❌ DON'T**
|
250
|
+
|
251
|
+
- **Set extreme values** without understanding implications
|
252
|
+
- **Ignore validation errors** - they prevent runtime issues
|
253
|
+
- **Use same settings everywhere** - environments have different needs
|
254
|
+
- **Change multiple settings simultaneously** - makes troubleshooting difficult
|
255
|
+
- **Set `min` higher than `max`** - validation will catch this but avoid it
|
256
|
+
|
257
|
+
### **⚠️ CAUTION**
|
258
|
+
|
259
|
+
- **Database connection exhaustion**: Ensure `max_concurrent_steps_limit` respects your connection pool
|
260
|
+
- **Memory pressure**: Very high concurrency can cause memory issues
|
261
|
+
- **Timeout cascades**: Very short timeouts can cause cascading failures
|
262
|
+
- **Cache duration**: Very short cache duration increases CPU overhead
|
263
|
+
|
264
|
+
---
|
265
|
+
|
266
|
+
## **🔧 TROUBLESHOOTING**
|
267
|
+
|
268
|
+
### **Common Issues**
|
269
|
+
|
270
|
+
#### **"Connection pool exhausted" errors**
|
271
|
+
```ruby
|
272
|
+
# Solution: Reduce concurrency limit
|
273
|
+
config.execution.max_concurrent_steps_limit = 8
|
274
|
+
```
|
275
|
+
|
276
|
+
#### **Frequent timeout errors**
|
277
|
+
```ruby
|
278
|
+
# Solution: Increase timeout settings
|
279
|
+
config.execution.batch_timeout_base_seconds = 60
|
280
|
+
config.execution.max_batch_timeout_seconds = 300
|
281
|
+
```
|
282
|
+
|
283
|
+
#### **Slow response to load changes**
|
284
|
+
```ruby
|
285
|
+
# Solution: Reduce cache duration
|
286
|
+
config.execution.concurrency_cache_duration = 15
|
287
|
+
```
|
288
|
+
|
289
|
+
#### **High CPU from concurrency calculation**
|
290
|
+
```ruby
|
291
|
+
# Solution: Increase cache duration
|
292
|
+
config.execution.concurrency_cache_duration = 60
|
293
|
+
```
|
294
|
+
|
295
|
+
### **Validation Errors**
|
296
|
+
|
297
|
+
| Error | Cause | Solution |
|
298
|
+
|-------|-------|----------|
|
299
|
+
| "min_concurrent_steps must be positive" | Zero or negative minimum | Set to positive value (≥1) |
|
300
|
+
| "min cannot exceed max" | Invalid bounds | Ensure min < max |
|
301
|
+
| "max_batch_timeout_seconds must be greater than base" | Invalid timeout relationship | Ensure max > base |
|
302
|
+
|
303
|
+
---
|
304
|
+
|
305
|
+
## **📈 PERFORMANCE IMPACT**
|
306
|
+
|
307
|
+
### **Expected Improvements**
|
308
|
+
|
309
|
+
With proper configuration tuning:
|
310
|
+
|
311
|
+
- **200-300% throughput increase** through optimal concurrency
|
312
|
+
- **40% reduction in timeout-related failures** through proper timeout settings
|
313
|
+
- **30% faster response to load changes** through optimal cache duration
|
314
|
+
- **Reduced database connection pressure** through intelligent concurrency limiting
|
315
|
+
|
316
|
+
### **Monitoring Success**
|
317
|
+
|
318
|
+
Track these metrics to validate configuration effectiveness:
|
319
|
+
|
320
|
+
```ruby
|
321
|
+
# Throughput metrics
|
322
|
+
steps_per_minute = completed_steps / elapsed_minutes
|
323
|
+
|
324
|
+
# Resource utilization
|
325
|
+
connection_utilization = active_connections / pool_size
|
326
|
+
memory_growth_rate = (current_memory - initial_memory) / elapsed_time
|
327
|
+
|
328
|
+
# Error rates
|
329
|
+
timeout_rate = timeout_errors / total_batches
|
330
|
+
connection_error_rate = connection_errors / total_operations
|
331
|
+
```
|
332
|
+
|
333
|
+
---
|
334
|
+
|
335
|
+
## **✨ CONCLUSION**
|
336
|
+
|
337
|
+
Tasker's execution configuration system provides powerful tuning capabilities while maintaining architectural integrity. By separating configurable performance characteristics from Ruby-specific optimizations, developers can optimize for their specific deployment environment while benefiting from carefully chosen defaults.
|
338
|
+
|
339
|
+
The key to successful configuration is **measurement-driven optimization**: start with defaults, monitor system behavior, and adjust based on observed patterns rather than assumptions.
|
340
|
+
|
341
|
+
For additional support or advanced configuration scenarios, refer to the main Tasker documentation or reach out to the development team.
|
data/docs/FLOW_CHART.md
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
# Workflow & Retry Mechanism
|
2
|
+
|
3
|
+
```mermaid
|
4
|
+
graph TD
|
5
|
+
Start([Task Initialization]) --> FindRoots[Find Root Steps]
|
6
|
+
FindRoots --> QueueRoots[Queue Root Steps]
|
7
|
+
QueueRoots --> ParallelExec{Parallel Execution}
|
8
|
+
|
9
|
+
ParallelExec --> RootA[Root Step A]
|
10
|
+
ParallelExec --> RootB[Root Step B]
|
11
|
+
|
12
|
+
RootA --> |Running| A[Step Ready for Execution]
|
13
|
+
RootB --> |Running| A
|
14
|
+
|
15
|
+
A --> B{Step Succeeded?}
|
16
|
+
B -->|Yes| C[Mark Step Complete]
|
17
|
+
B -->|No| D{Retryable Error?}
|
18
|
+
D -->|No| E[Mark as Failed]
|
19
|
+
D -->|Yes| F{Attempts < Max?}
|
20
|
+
F -->|No| E
|
21
|
+
F -->|Yes| G[Calculate Backoff]
|
22
|
+
|
23
|
+
G --> H[Apply Exponential Backoff with Jitter]
|
24
|
+
H --> I[Wait for Backoff Period]
|
25
|
+
I --> J[Increment Attempt Count]
|
26
|
+
J --> A
|
27
|
+
|
28
|
+
C --> K{Find Dependent Steps}
|
29
|
+
K --> DepCheck{For Each Dependent Step}
|
30
|
+
DepCheck --> DependenciesMet{All Dependencies\nComplete?}
|
31
|
+
DependenciesMet -->|Yes| QueueStep[Queue Step for Execution]
|
32
|
+
QueueStep --> ParallelExec
|
33
|
+
DependenciesMet -->|No| Wait[Step Remains Pending]
|
34
|
+
|
35
|
+
E --> TaskCheck{Any Step\nFailed?}
|
36
|
+
TaskCheck -->|Yes| FailTask[Mark Task as Failed]
|
37
|
+
|
38
|
+
Wait -.- DepMonitor[Dependency Monitor]
|
39
|
+
DepMonitor -.- DependenciesMet
|
40
|
+
|
41
|
+
C --> CompleteCheck{All Steps\nComplete?}
|
42
|
+
CompleteCheck -->|Yes| CompleteTask[Mark Task as Complete]
|
43
|
+
CompleteCheck -->|No| Continue[Continue Processing]
|
44
|
+
|
45
|
+
subgraph DAG Traversal
|
46
|
+
FindRoots
|
47
|
+
QueueRoots
|
48
|
+
ParallelExec
|
49
|
+
RootA
|
50
|
+
RootB
|
51
|
+
K
|
52
|
+
DepCheck
|
53
|
+
DependenciesMet
|
54
|
+
QueueStep
|
55
|
+
Wait
|
56
|
+
DepMonitor
|
57
|
+
end
|
58
|
+
|
59
|
+
subgraph Exponential Backoff
|
60
|
+
G
|
61
|
+
H
|
62
|
+
I
|
63
|
+
J
|
64
|
+
end
|
65
|
+
|
66
|
+
subgraph Task Status Management
|
67
|
+
E
|
68
|
+
TaskCheck
|
69
|
+
FailTask
|
70
|
+
CompleteCheck
|
71
|
+
CompleteTask
|
72
|
+
end
|
73
|
+
|
74
|
+
%% Initialize with dark borders and light fills
|
75
|
+
style Start fill:#ffffff,stroke:#444444,stroke-width:2px
|
76
|
+
style FindRoots fill:#f6f6f6,stroke:#444444
|
77
|
+
style QueueRoots fill:#f6f6f6,stroke:#444444
|
78
|
+
style ParallelExec fill:#f6f6f6,stroke:#444444,stroke-width:2px
|
79
|
+
|
80
|
+
%% Root steps (slightly lighter gray)
|
81
|
+
style RootA fill:#e8e8e8,stroke:#666666
|
82
|
+
style RootB fill:#e8e8e8,stroke:#666666
|
83
|
+
|
84
|
+
%% Standard flow components (white with medium gray borders)
|
85
|
+
style A fill:#ffffff,stroke:#666666
|
86
|
+
style B fill:#ffffff,stroke:#666666
|
87
|
+
style C fill:#ffffff,stroke:#666666
|
88
|
+
style D fill:#ffffff,stroke:#666666
|
89
|
+
style F fill:#ffffff,stroke:#666666
|
90
|
+
style CompleteCheck fill:#ffffff,stroke:#666666
|
91
|
+
style Continue fill:#ffffff,stroke:#666666
|
92
|
+
style TaskCheck fill:#ffffff,stroke:#666666
|
93
|
+
|
94
|
+
%% Exponential backoff (light gray)
|
95
|
+
style G fill:#f0f0f0,stroke:#666666
|
96
|
+
style H fill:#f0f0f0,stroke:#666666
|
97
|
+
style I fill:#f0f0f0,stroke:#666666
|
98
|
+
style J fill:#f0f0f0,stroke:#666666
|
99
|
+
|
100
|
+
%% DAG specific components (slightly darker gray)
|
101
|
+
style K fill:#e0e0e0,stroke:#444444
|
102
|
+
style DepCheck fill:#e0e0e0,stroke:#444444
|
103
|
+
style DependenciesMet fill:#e0e0e0,stroke:#444444,stroke-width:2px
|
104
|
+
style QueueStep fill:#e0e0e0,stroke:#444444
|
105
|
+
style Wait fill:#e0e0e0,stroke:#444444,stroke-dasharray: 5 5
|
106
|
+
style DepMonitor fill:#e0e0e0,stroke:#444444,stroke-dasharray: 5 5
|
107
|
+
|
108
|
+
%% Success and failure states (dark and medium grays)
|
109
|
+
style CompleteTask fill:#d0d0d0,stroke:#222222,stroke-width:2px
|
110
|
+
style FailTask fill:#b0b0b0,stroke:#222222,stroke-width:2px
|
111
|
+
style E fill:#b0b0b0,stroke:#222222
|
112
|
+
```
|
113
|
+
|
114
|
+
The system implements advanced workflow traversal with parallel execution, sophisticated retry logic, and comprehensive event-driven observability:
|
115
|
+
|
116
|
+
- **DAG Traversal & Parallel Execution**
|
117
|
+
- Initial identification and queueing of root steps (no dependencies)
|
118
|
+
- Parallel execution of independent steps at each level
|
119
|
+
- Dynamic discovery of next executable steps as dependencies are satisfied
|
120
|
+
- Continuous monitoring of dependency status to activate pending steps
|
121
|
+
- Automatic task completion detection when all steps are finished
|
122
|
+
|
123
|
+
- **Industry Standard Exponential Backoff**
|
124
|
+
- Base delay that doubles with each attempt: `base_delay * (2^attempt)`
|
125
|
+
- Random jitter to prevent thundering herd problems
|
126
|
+
- Configurable maximum delay cap (30 seconds)
|
127
|
+
- Respects server-provided Retry-After headers when available
|
128
|
+
|
129
|
+
- **Task Status Management**
|
130
|
+
- Real-time monitoring of all step statuses
|
131
|
+
- Early failure detection and propagation
|
132
|
+
- Graceful handling of unrecoverable errors
|
133
|
+
|
134
|
+
- **Event-Driven Observability**
|
135
|
+
- Events published at every workflow transition point
|
136
|
+
- Custom subscribers for external integrations (Sentry, PagerDuty, Slack)
|
137
|
+
- OpenTelemetry integration for production observability
|
138
|
+
- Complete event catalog for discovery and documentation
|
139
|
+
|
140
|
+
### Event Flow Architecture
|
141
|
+
|
142
|
+
Throughout the workflow execution, Tasker publishes events that enable comprehensive observability and custom integrations:
|
143
|
+
|
144
|
+
- **Task Events**: `task.started`, `task.completed`, `task.failed`
|
145
|
+
- **Step Events**: `step.started`, `step.completed`, `step.failed`, `step.retry_requested`
|
146
|
+
- **Workflow Events**: `workflow.viable_steps_discovered`, `workflow.no_viable_steps`
|
147
|
+
- **Observability Events**: Performance and monitoring metrics
|
148
|
+
|
149
|
+
For complete documentation on the event system and creating custom subscribers, see [EVENT_SYSTEM.md](EVENT_SYSTEM.md).
|