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
data/docs/REST_API.md
ADDED
@@ -0,0 +1,632 @@
|
|
1
|
+
# Tasker REST API Guide
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
Tasker provides a comprehensive REST API for handler discovery, task management, and dependency graph analysis. The API supports namespace-based organization and semantic versioning, enabling enterprise-scale workflow management.
|
6
|
+
|
7
|
+
## Base URL & Mounting
|
8
|
+
|
9
|
+
The API is available at the mount point configured in your Rails routes:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
# config/routes.rb
|
13
|
+
Rails.application.routes.draw do
|
14
|
+
mount Tasker::Engine, at: '/tasker', as: 'tasker'
|
15
|
+
end
|
16
|
+
```
|
17
|
+
|
18
|
+
**Base URL**: `https://your-app.com/tasker`
|
19
|
+
|
20
|
+
## Authentication
|
21
|
+
|
22
|
+
All API endpoints support the same authentication system configured for your Tasker installation:
|
23
|
+
|
24
|
+
### JWT Authentication
|
25
|
+
```bash
|
26
|
+
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
27
|
+
-H "Content-Type: application/json" \
|
28
|
+
https://your-app.com/tasker/handlers
|
29
|
+
```
|
30
|
+
|
31
|
+
### Custom Authentication
|
32
|
+
If you've configured a custom authenticator, use the authentication method appropriate for your setup:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
# config/initializers/tasker.rb
|
36
|
+
Tasker.configuration do |config|
|
37
|
+
config.auth do |auth|
|
38
|
+
auth.authentication_enabled = true
|
39
|
+
auth.authenticator_class = 'YourCustomAuthenticator'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
44
|
+
## Handler Discovery API
|
45
|
+
|
46
|
+
The handler discovery API provides comprehensive information about available task handlers, their configurations, and dependency graphs.
|
47
|
+
|
48
|
+
### List Namespaces
|
49
|
+
|
50
|
+
**Endpoint**: `GET /tasker/handlers`
|
51
|
+
|
52
|
+
**Description**: Returns all namespaces with handler counts and metadata.
|
53
|
+
|
54
|
+
**Example Request**:
|
55
|
+
```bash
|
56
|
+
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
57
|
+
https://your-app.com/tasker/handlers
|
58
|
+
```
|
59
|
+
|
60
|
+
**Example Response**:
|
61
|
+
```json
|
62
|
+
{
|
63
|
+
"namespaces": [
|
64
|
+
{
|
65
|
+
"name": "payments",
|
66
|
+
"description": "Payment processing workflows",
|
67
|
+
"handler_count": 5,
|
68
|
+
"handlers": ["process_payment", "refund_payment", "validate_card", "process_subscription", "cancel_subscription"]
|
69
|
+
},
|
70
|
+
{
|
71
|
+
"name": "inventory",
|
72
|
+
"description": "Inventory management workflows",
|
73
|
+
"handler_count": 3,
|
74
|
+
"handlers": ["update_stock", "process_order", "check_availability"]
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"name": "notifications",
|
78
|
+
"description": "Notification and messaging workflows",
|
79
|
+
"handler_count": 4,
|
80
|
+
"handlers": ["send_email", "send_sms", "push_notification", "alert_admin"]
|
81
|
+
}
|
82
|
+
]
|
83
|
+
}
|
84
|
+
```
|
85
|
+
|
86
|
+
### List Handlers in Namespace
|
87
|
+
|
88
|
+
**Endpoint**: `GET /tasker/handlers/{namespace}`
|
89
|
+
|
90
|
+
**Description**: Returns all handlers available in a specific namespace.
|
91
|
+
|
92
|
+
**Parameters**:
|
93
|
+
- `namespace` (path) - The namespace name (e.g., "payments", "inventory")
|
94
|
+
|
95
|
+
**Example Request**:
|
96
|
+
```bash
|
97
|
+
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
98
|
+
https://your-app.com/tasker/handlers/payments
|
99
|
+
```
|
100
|
+
|
101
|
+
**Example Response**:
|
102
|
+
```json
|
103
|
+
{
|
104
|
+
"namespace": "payments",
|
105
|
+
"handlers": [
|
106
|
+
{
|
107
|
+
"id": "process_payment",
|
108
|
+
"namespace": "payments",
|
109
|
+
"version": "2.1.0",
|
110
|
+
"description": "Process customer payment with validation and confirmation",
|
111
|
+
"step_count": 4,
|
112
|
+
"step_names": ["validate_payment", "charge_card", "update_order", "send_confirmation"]
|
113
|
+
},
|
114
|
+
{
|
115
|
+
"id": "refund_payment",
|
116
|
+
"namespace": "payments",
|
117
|
+
"version": "1.5.0",
|
118
|
+
"description": "Process customer refund with validation",
|
119
|
+
"step_count": 3,
|
120
|
+
"step_names": ["validate_refund", "process_refund", "notify_customer"]
|
121
|
+
}
|
122
|
+
]
|
123
|
+
}
|
124
|
+
```
|
125
|
+
|
126
|
+
### Get Handler Details with Dependency Graph
|
127
|
+
|
128
|
+
**Endpoint**: `GET /tasker/handlers/{namespace}/{name}`
|
129
|
+
|
130
|
+
**Description**: Returns detailed handler information including step templates, configuration, and dependency graph.
|
131
|
+
|
132
|
+
**Parameters**:
|
133
|
+
- `namespace` (path) - The namespace name
|
134
|
+
- `name` (path) - The handler name
|
135
|
+
- `version` (query, optional) - Specific version to retrieve (defaults to latest)
|
136
|
+
|
137
|
+
**Example Request**:
|
138
|
+
```bash
|
139
|
+
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
140
|
+
https://your-app.com/tasker/handlers/payments/process_payment?version=2.1.0
|
141
|
+
```
|
142
|
+
|
143
|
+
**Example Response**:
|
144
|
+
```json
|
145
|
+
{
|
146
|
+
"id": "process_payment",
|
147
|
+
"namespace": "payments",
|
148
|
+
"version": "2.1.0",
|
149
|
+
"description": "Process customer payment with validation and confirmation",
|
150
|
+
"step_templates": [
|
151
|
+
{
|
152
|
+
"name": "validate_payment",
|
153
|
+
"description": "Validate payment details and customer information",
|
154
|
+
"handler_class": "Payments::StepHandler::ValidatePaymentHandler",
|
155
|
+
"depends_on_step": null,
|
156
|
+
"default_retryable": false,
|
157
|
+
"default_retry_limit": 0,
|
158
|
+
"skippable": false,
|
159
|
+
"custom_events": []
|
160
|
+
},
|
161
|
+
{
|
162
|
+
"name": "charge_card",
|
163
|
+
"description": "Process payment through payment gateway",
|
164
|
+
"handler_class": "Payments::StepHandler::ChargeCardHandler",
|
165
|
+
"depends_on_step": "validate_payment",
|
166
|
+
"default_retryable": true,
|
167
|
+
"default_retry_limit": 3,
|
168
|
+
"skippable": false,
|
169
|
+
"custom_events": ["payment.gateway.charged"]
|
170
|
+
},
|
171
|
+
{
|
172
|
+
"name": "update_order",
|
173
|
+
"description": "Update order status after successful payment",
|
174
|
+
"handler_class": "Payments::StepHandler::UpdateOrderHandler",
|
175
|
+
"depends_on_step": "charge_card",
|
176
|
+
"default_retryable": true,
|
177
|
+
"default_retry_limit": 2,
|
178
|
+
"skippable": false,
|
179
|
+
"custom_events": []
|
180
|
+
},
|
181
|
+
{
|
182
|
+
"name": "send_confirmation",
|
183
|
+
"description": "Send payment confirmation email to customer",
|
184
|
+
"handler_class": "Payments::StepHandler::SendConfirmationHandler",
|
185
|
+
"depends_on_step": "update_order",
|
186
|
+
"default_retryable": true,
|
187
|
+
"default_retry_limit": 5,
|
188
|
+
"skippable": true,
|
189
|
+
"custom_events": ["notification.email.sent"]
|
190
|
+
}
|
191
|
+
],
|
192
|
+
"dependency_graph": {
|
193
|
+
"nodes": ["validate_payment", "charge_card", "update_order", "send_confirmation"],
|
194
|
+
"edges": [
|
195
|
+
{"from": "validate_payment", "to": "charge_card"},
|
196
|
+
{"from": "charge_card", "to": "update_order"},
|
197
|
+
{"from": "update_order", "to": "send_confirmation"}
|
198
|
+
],
|
199
|
+
"execution_order": ["validate_payment", "charge_card", "update_order", "send_confirmation"]
|
200
|
+
}
|
201
|
+
}
|
202
|
+
```
|
203
|
+
|
204
|
+
## Task Management API
|
205
|
+
|
206
|
+
The task management API supports creating and managing tasks with full namespace and version support.
|
207
|
+
|
208
|
+
### Create Task
|
209
|
+
|
210
|
+
**Endpoint**: `POST /tasker/tasks`
|
211
|
+
|
212
|
+
**Description**: Creates a new task with namespace and version support.
|
213
|
+
|
214
|
+
**Request Body**:
|
215
|
+
```json
|
216
|
+
{
|
217
|
+
"name": "process_payment",
|
218
|
+
"namespace": "payments",
|
219
|
+
"version": "2.1.0",
|
220
|
+
"context": {
|
221
|
+
"payment_id": 12345,
|
222
|
+
"amount": 99.99,
|
223
|
+
"currency": "USD",
|
224
|
+
"customer_id": 67890
|
225
|
+
}
|
226
|
+
}
|
227
|
+
```
|
228
|
+
|
229
|
+
**Example Request**:
|
230
|
+
```bash
|
231
|
+
curl -X POST -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
232
|
+
-H "Content-Type: application/json" \
|
233
|
+
-d '{
|
234
|
+
"name": "process_payment",
|
235
|
+
"namespace": "payments",
|
236
|
+
"version": "2.1.0",
|
237
|
+
"context": {
|
238
|
+
"payment_id": 12345,
|
239
|
+
"amount": 99.99,
|
240
|
+
"currency": "USD",
|
241
|
+
"customer_id": 67890
|
242
|
+
}
|
243
|
+
}' \
|
244
|
+
https://your-app.com/tasker/tasks
|
245
|
+
```
|
246
|
+
|
247
|
+
**Example Response**:
|
248
|
+
```json
|
249
|
+
{
|
250
|
+
"id": "550e8400-e29b-41d4-a716-446655440000",
|
251
|
+
"name": "process_payment",
|
252
|
+
"namespace": "payments",
|
253
|
+
"version": "2.1.0",
|
254
|
+
"full_name": "payments.process_payment@2.1.0",
|
255
|
+
"status": "pending",
|
256
|
+
"context": {
|
257
|
+
"payment_id": 12345,
|
258
|
+
"amount": 99.99,
|
259
|
+
"currency": "USD",
|
260
|
+
"customer_id": 67890
|
261
|
+
},
|
262
|
+
"created_at": "2024-01-15T10:30:00Z",
|
263
|
+
"updated_at": "2024-01-15T10:30:00Z"
|
264
|
+
}
|
265
|
+
```
|
266
|
+
|
267
|
+
### List Tasks
|
268
|
+
|
269
|
+
**Endpoint**: `GET /tasker/tasks`
|
270
|
+
|
271
|
+
**Description**: Lists tasks with optional filtering by namespace, version, and status.
|
272
|
+
|
273
|
+
**Query Parameters**:
|
274
|
+
- `namespace` (optional) - Filter by namespace
|
275
|
+
- `version` (optional) - Filter by version
|
276
|
+
- `status` (optional) - Filter by task status
|
277
|
+
- `page` (optional) - Page number for pagination
|
278
|
+
- `per_page` (optional) - Items per page (default: 25, max: 100)
|
279
|
+
|
280
|
+
**Example Request**:
|
281
|
+
```bash
|
282
|
+
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
283
|
+
"https://your-app.com/tasker/tasks?namespace=payments&version=2.1.0&status=pending&page=1&per_page=10"
|
284
|
+
```
|
285
|
+
|
286
|
+
**Example Response**:
|
287
|
+
```json
|
288
|
+
{
|
289
|
+
"tasks": [
|
290
|
+
{
|
291
|
+
"id": "550e8400-e29b-41d4-a716-446655440000",
|
292
|
+
"name": "process_payment",
|
293
|
+
"namespace": "payments",
|
294
|
+
"version": "2.1.0",
|
295
|
+
"full_name": "payments.process_payment@2.1.0",
|
296
|
+
"status": "pending",
|
297
|
+
"context": {...},
|
298
|
+
"created_at": "2024-01-15T10:30:00Z",
|
299
|
+
"updated_at": "2024-01-15T10:30:00Z"
|
300
|
+
}
|
301
|
+
],
|
302
|
+
"pagination": {
|
303
|
+
"current_page": 1,
|
304
|
+
"per_page": 10,
|
305
|
+
"total_pages": 5,
|
306
|
+
"total_count": 42
|
307
|
+
}
|
308
|
+
}
|
309
|
+
```
|
310
|
+
|
311
|
+
### Get Task Details
|
312
|
+
|
313
|
+
**Endpoint**: `GET /tasker/tasks/{id}`
|
314
|
+
|
315
|
+
**Description**: Returns detailed information about a specific task.
|
316
|
+
|
317
|
+
**Parameters**:
|
318
|
+
- `id` (path) - The task ID
|
319
|
+
- `include_dependencies` (query, optional) - Include dependency graph analysis
|
320
|
+
|
321
|
+
**Example Request**:
|
322
|
+
```bash
|
323
|
+
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
324
|
+
https://your-app.com/tasker/tasks/550e8400-e29b-41d4-a716-446655440000?include_dependencies=true
|
325
|
+
```
|
326
|
+
|
327
|
+
**Example Response**:
|
328
|
+
```json
|
329
|
+
{
|
330
|
+
"id": "550e8400-e29b-41d4-a716-446655440000",
|
331
|
+
"name": "process_payment",
|
332
|
+
"namespace": "payments",
|
333
|
+
"version": "2.1.0",
|
334
|
+
"full_name": "payments.process_payment@2.1.0",
|
335
|
+
"status": "in_progress",
|
336
|
+
"context": {
|
337
|
+
"payment_id": 12345,
|
338
|
+
"amount": 99.99,
|
339
|
+
"currency": "USD",
|
340
|
+
"customer_id": 67890
|
341
|
+
},
|
342
|
+
"steps": [
|
343
|
+
{
|
344
|
+
"name": "validate_payment",
|
345
|
+
"status": "complete",
|
346
|
+
"results": {"valid": true, "validation_id": "val_123"},
|
347
|
+
"attempts": 1,
|
348
|
+
"started_at": "2024-01-15T10:30:05Z",
|
349
|
+
"completed_at": "2024-01-15T10:30:06Z"
|
350
|
+
},
|
351
|
+
{
|
352
|
+
"name": "charge_card",
|
353
|
+
"status": "in_progress",
|
354
|
+
"results": null,
|
355
|
+
"attempts": 1,
|
356
|
+
"started_at": "2024-01-15T10:30:07Z",
|
357
|
+
"completed_at": null
|
358
|
+
}
|
359
|
+
],
|
360
|
+
"dependencies": {
|
361
|
+
"analysis": "Task is progressing normally through dependency chain",
|
362
|
+
"blocked_steps": [],
|
363
|
+
"ready_steps": ["charge_card"],
|
364
|
+
"completed_steps": ["validate_payment"]
|
365
|
+
},
|
366
|
+
"created_at": "2024-01-15T10:30:00Z",
|
367
|
+
"updated_at": "2024-01-15T10:30:07Z"
|
368
|
+
}
|
369
|
+
```
|
370
|
+
|
371
|
+
## Error Handling
|
372
|
+
|
373
|
+
The API uses standard HTTP status codes and provides detailed error information:
|
374
|
+
|
375
|
+
### HTTP Status Codes
|
376
|
+
|
377
|
+
- `200 OK` - Successful request
|
378
|
+
- `201 Created` - Resource created successfully
|
379
|
+
- `400 Bad Request` - Invalid request parameters
|
380
|
+
- `401 Unauthorized` - Authentication required
|
381
|
+
- `403 Forbidden` - Insufficient permissions
|
382
|
+
- `404 Not Found` - Resource not found
|
383
|
+
- `422 Unprocessable Entity` - Validation errors
|
384
|
+
- `500 Internal Server Error` - Server error
|
385
|
+
|
386
|
+
### Error Response Format
|
387
|
+
|
388
|
+
```json
|
389
|
+
{
|
390
|
+
"error": {
|
391
|
+
"type": "ValidationError",
|
392
|
+
"message": "Invalid task configuration",
|
393
|
+
"details": {
|
394
|
+
"namespace": ["must be present"],
|
395
|
+
"version": ["must be a valid semantic version"]
|
396
|
+
},
|
397
|
+
"code": "INVALID_TASK_CONFIG"
|
398
|
+
}
|
399
|
+
}
|
400
|
+
```
|
401
|
+
|
402
|
+
### Common Error Scenarios
|
403
|
+
|
404
|
+
**Handler Not Found**:
|
405
|
+
```json
|
406
|
+
{
|
407
|
+
"error": {
|
408
|
+
"type": "HandlerNotFound",
|
409
|
+
"message": "Handler 'unknown_handler' not found in namespace 'payments' version '1.0.0'",
|
410
|
+
"code": "HANDLER_NOT_FOUND"
|
411
|
+
}
|
412
|
+
}
|
413
|
+
```
|
414
|
+
|
415
|
+
**Namespace Not Found**:
|
416
|
+
```json
|
417
|
+
{
|
418
|
+
"error": {
|
419
|
+
"type": "NamespaceNotFound",
|
420
|
+
"message": "Namespace 'unknown_namespace' does not exist",
|
421
|
+
"code": "NAMESPACE_NOT_FOUND"
|
422
|
+
}
|
423
|
+
}
|
424
|
+
```
|
425
|
+
|
426
|
+
**Authentication Error**:
|
427
|
+
```json
|
428
|
+
{
|
429
|
+
"error": {
|
430
|
+
"type": "AuthenticationError",
|
431
|
+
"message": "Invalid or expired authentication token",
|
432
|
+
"code": "AUTHENTICATION_FAILED"
|
433
|
+
}
|
434
|
+
}
|
435
|
+
```
|
436
|
+
|
437
|
+
**Authorization Error**:
|
438
|
+
```json
|
439
|
+
{
|
440
|
+
"error": {
|
441
|
+
"type": "AuthorizationError",
|
442
|
+
"message": "Insufficient permissions for tasker.handler:index",
|
443
|
+
"code": "AUTHORIZATION_FAILED"
|
444
|
+
}
|
445
|
+
}
|
446
|
+
```
|
447
|
+
|
448
|
+
## Rate Limiting
|
449
|
+
|
450
|
+
The API respects standard Rails rate limiting configurations. Consider implementing rate limiting for production deployments:
|
451
|
+
|
452
|
+
```ruby
|
453
|
+
# config/initializers/rack_attack.rb
|
454
|
+
Rack::Attack.throttle('tasker-api', limit: 100, period: 1.minute) do |req|
|
455
|
+
req.ip if req.path.start_with?('/tasker/')
|
456
|
+
end
|
457
|
+
```
|
458
|
+
|
459
|
+
## OpenAPI/Swagger Documentation
|
460
|
+
|
461
|
+
Tasker automatically generates OpenAPI documentation for all endpoints. The API documentation is available at:
|
462
|
+
|
463
|
+
- **Swagger UI**: `https://your-app.com/tasker/api-docs`
|
464
|
+
- **OpenAPI Spec**: `https://your-app.com/tasker/api-docs.json`
|
465
|
+
|
466
|
+
The documentation includes:
|
467
|
+
- Complete endpoint specifications
|
468
|
+
- Request/response schemas
|
469
|
+
- Authentication requirements
|
470
|
+
- Error response formats
|
471
|
+
- Interactive API testing interface
|
472
|
+
|
473
|
+
## SDK and Client Libraries
|
474
|
+
|
475
|
+
### cURL Examples
|
476
|
+
|
477
|
+
**Complete Handler Discovery Workflow**:
|
478
|
+
```bash
|
479
|
+
# 1. List all namespaces
|
480
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
481
|
+
https://your-app.com/tasker/handlers
|
482
|
+
|
483
|
+
# 2. Explore handlers in payments namespace
|
484
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
485
|
+
https://your-app.com/tasker/handlers/payments
|
486
|
+
|
487
|
+
# 3. Get detailed handler information with dependency graph
|
488
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
489
|
+
https://your-app.com/tasker/handlers/payments/process_payment?version=2.1.0
|
490
|
+
|
491
|
+
# 4. Create a task using discovered handler
|
492
|
+
curl -X POST -H "Authorization: Bearer $TOKEN" \
|
493
|
+
-H "Content-Type: application/json" \
|
494
|
+
-d '{"name": "process_payment", "namespace": "payments", "version": "2.1.0", "context": {"payment_id": 123}}' \
|
495
|
+
https://your-app.com/tasker/tasks
|
496
|
+
|
497
|
+
# 5. Monitor task progress
|
498
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
499
|
+
https://your-app.com/tasker/tasks/TASK_ID?include_dependencies=true
|
500
|
+
```
|
501
|
+
|
502
|
+
### JavaScript/Node.js Example
|
503
|
+
|
504
|
+
```javascript
|
505
|
+
const axios = require('axios');
|
506
|
+
|
507
|
+
class TaskerClient {
|
508
|
+
constructor(baseURL, token) {
|
509
|
+
this.client = axios.create({
|
510
|
+
baseURL,
|
511
|
+
headers: {
|
512
|
+
'Authorization': `Bearer ${token}`,
|
513
|
+
'Content-Type': 'application/json'
|
514
|
+
}
|
515
|
+
});
|
516
|
+
}
|
517
|
+
|
518
|
+
async getNamespaces() {
|
519
|
+
const response = await this.client.get('/handlers');
|
520
|
+
return response.data.namespaces;
|
521
|
+
}
|
522
|
+
|
523
|
+
async getHandlers(namespace) {
|
524
|
+
const response = await this.client.get(`/handlers/${namespace}`);
|
525
|
+
return response.data.handlers;
|
526
|
+
}
|
527
|
+
|
528
|
+
async getHandlerDetails(namespace, name, version = null) {
|
529
|
+
const params = version ? { version } : {};
|
530
|
+
const response = await this.client.get(`/handlers/${namespace}/${name}`, { params });
|
531
|
+
return response.data;
|
532
|
+
}
|
533
|
+
|
534
|
+
async createTask(name, namespace, version, context) {
|
535
|
+
const response = await this.client.post('/tasks', {
|
536
|
+
name, namespace, version, context
|
537
|
+
});
|
538
|
+
return response.data;
|
539
|
+
}
|
540
|
+
|
541
|
+
async getTask(id, includeDependencies = false) {
|
542
|
+
const params = includeDependencies ? { include_dependencies: true } : {};
|
543
|
+
const response = await this.client.get(`/tasks/${id}`, { params });
|
544
|
+
return response.data;
|
545
|
+
}
|
546
|
+
}
|
547
|
+
|
548
|
+
// Usage
|
549
|
+
const tasker = new TaskerClient('https://your-app.com/tasker', 'YOUR_JWT_TOKEN');
|
550
|
+
|
551
|
+
// Discover and create task
|
552
|
+
const namespaces = await tasker.getNamespaces();
|
553
|
+
const handlers = await tasker.getHandlers('payments');
|
554
|
+
const handlerDetails = await tasker.getHandlerDetails('payments', 'process_payment', '2.1.0');
|
555
|
+
const task = await tasker.createTask('process_payment', 'payments', '2.1.0', { payment_id: 123 });
|
556
|
+
```
|
557
|
+
|
558
|
+
## Best Practices
|
559
|
+
|
560
|
+
### 1. Version Management
|
561
|
+
- Always specify versions in production integrations
|
562
|
+
- Use semantic versioning for handler versions
|
563
|
+
- Test version compatibility before deployment
|
564
|
+
|
565
|
+
### 2. Error Handling
|
566
|
+
- Implement proper error handling for all API calls
|
567
|
+
- Use exponential backoff for retryable errors
|
568
|
+
- Log API errors for monitoring and debugging
|
569
|
+
|
570
|
+
### 3. Authentication
|
571
|
+
- Use secure token storage and rotation
|
572
|
+
- Implement proper token refresh mechanisms
|
573
|
+
- Never log authentication tokens
|
574
|
+
|
575
|
+
### 4. Performance
|
576
|
+
- Use pagination for large result sets
|
577
|
+
- Cache handler discovery results when appropriate
|
578
|
+
- Monitor API response times and implement timeouts
|
579
|
+
|
580
|
+
### 5. Monitoring
|
581
|
+
- Track API usage and performance metrics
|
582
|
+
- Set up alerts for error rates and response times
|
583
|
+
- Monitor task creation and completion rates
|
584
|
+
|
585
|
+
## Integration Examples
|
586
|
+
|
587
|
+
### CI/CD Pipeline Integration
|
588
|
+
|
589
|
+
```yaml
|
590
|
+
# .github/workflows/deploy.yml
|
591
|
+
- name: Validate Handlers
|
592
|
+
run: |
|
593
|
+
# Validate all handlers are accessible via API
|
594
|
+
curl -f -H "Authorization: Bearer $TASKER_TOKEN" \
|
595
|
+
https://your-app.com/tasker/handlers/payments/process_payment?version=2.1.0
|
596
|
+
```
|
597
|
+
|
598
|
+
### Monitoring Dashboard Integration
|
599
|
+
|
600
|
+
```javascript
|
601
|
+
// Monitor task creation and handler usage
|
602
|
+
const monitorTasks = async () => {
|
603
|
+
const tasks = await tasker.client.get('/tasks?status=pending&per_page=100');
|
604
|
+
const metrics = {
|
605
|
+
pending_tasks: tasks.data.pagination.total_count,
|
606
|
+
namespaces: new Set(tasks.data.tasks.map(t => t.namespace)).size
|
607
|
+
};
|
608
|
+
|
609
|
+
// Send to monitoring system
|
610
|
+
await sendMetrics(metrics);
|
611
|
+
};
|
612
|
+
```
|
613
|
+
|
614
|
+
### Load Testing
|
615
|
+
|
616
|
+
```javascript
|
617
|
+
// Load test handler discovery API
|
618
|
+
const loadTestHandlers = async () => {
|
619
|
+
const promises = [];
|
620
|
+
for (let i = 0; i < 100; i++) {
|
621
|
+
promises.push(tasker.getHandlerDetails('payments', 'process_payment'));
|
622
|
+
}
|
623
|
+
|
624
|
+
const results = await Promise.allSettled(promises);
|
625
|
+
const successful = results.filter(r => r.status === 'fulfilled').length;
|
626
|
+
console.log(`${successful}/100 requests successful`);
|
627
|
+
};
|
628
|
+
```
|
629
|
+
|
630
|
+
---
|
631
|
+
|
632
|
+
This REST API provides comprehensive access to Tasker's handler discovery and task management capabilities, enabling enterprise-scale workflow orchestration with full namespace and version support.
|