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,116 @@
|
|
1
|
+
# typed: false
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
class InitialTaskerSchema < ActiveRecord::Migration[7.2]
|
5
|
+
def up
|
6
|
+
# Load the complete schema from our init file
|
7
|
+
# This ensures we get the exact same database structure that has been tested
|
8
|
+
# Handle both engine context and standalone context
|
9
|
+
if defined?(Tasker::Engine)
|
10
|
+
# When running in engine context, look in the engine root
|
11
|
+
engine_root = Tasker::Engine.root
|
12
|
+
schema_path = engine_root.join('db', 'init', 'schema.sql')
|
13
|
+
else
|
14
|
+
# When running standalone, use Rails.root
|
15
|
+
schema_path = Rails.root.join('db/init/schema.sql')
|
16
|
+
end
|
17
|
+
|
18
|
+
unless File.exist?(schema_path)
|
19
|
+
raise "Schema file not found at #{schema_path}. Please ensure db/init/schema.sql exists."
|
20
|
+
end
|
21
|
+
|
22
|
+
# Read and execute the schema file
|
23
|
+
schema_sql = File.read(schema_path)
|
24
|
+
|
25
|
+
# Filter out Rails internal tables that conflict with Rails' automatic creation
|
26
|
+
# These tables are created automatically by Rails during db:create
|
27
|
+
filtered_sql = filter_rails_internal_tables(schema_sql)
|
28
|
+
|
29
|
+
# Execute the filtered schema
|
30
|
+
execute(filtered_sql)
|
31
|
+
|
32
|
+
# Ensure the migration version is recorded
|
33
|
+
# (This happens automatically but being explicit)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Filter out Rails internal tables from the schema SQL
|
39
|
+
# These tables are automatically created by Rails and will conflict if we try to create them
|
40
|
+
def filter_rails_internal_tables(sql)
|
41
|
+
lines = sql.lines
|
42
|
+
filtered_lines = []
|
43
|
+
skip_table = false
|
44
|
+
current_table = nil
|
45
|
+
|
46
|
+
lines.each do |line|
|
47
|
+
# Detect table creation for Rails internal tables
|
48
|
+
if line =~ /CREATE TABLE (?:public\.)?(ar_internal_metadata|schema_migrations)/
|
49
|
+
current_table = ::Regexp.last_match(1)
|
50
|
+
skip_table = true
|
51
|
+
next
|
52
|
+
end
|
53
|
+
|
54
|
+
# Detect end of table creation (semicolon on its own line or other CREATE/ALTER statement)
|
55
|
+
if skip_table && (line.strip == ';' || line.match(/^(CREATE|ALTER|INSERT|COPY)/))
|
56
|
+
if line.strip == ';'
|
57
|
+
# Skip the semicolon that ends the table we're filtering
|
58
|
+
skip_table = false
|
59
|
+
current_table = nil
|
60
|
+
next
|
61
|
+
elsif /^(CREATE|ALTER|INSERT|COPY)/.match?(line)
|
62
|
+
# New statement starts, stop skipping
|
63
|
+
skip_table = false
|
64
|
+
current_table = nil
|
65
|
+
# Don't skip this line, it's a new statement
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Skip INSERT statements for Rails internal tables
|
70
|
+
if line =~ /INSERT INTO (?:public\.)?(ar_internal_metadata|schema_migrations)/
|
71
|
+
skip_table = true
|
72
|
+
current_table = ::Regexp.last_match(1)
|
73
|
+
next
|
74
|
+
end
|
75
|
+
|
76
|
+
# Skip COPY statements for Rails internal tables
|
77
|
+
if line =~ /COPY (?:public\.)?(ar_internal_metadata|schema_migrations)/
|
78
|
+
skip_table = true
|
79
|
+
current_table = ::Regexp.last_match(1)
|
80
|
+
next
|
81
|
+
end
|
82
|
+
|
83
|
+
# Add line if we're not skipping
|
84
|
+
filtered_lines << line unless skip_table
|
85
|
+
end
|
86
|
+
|
87
|
+
filtered_lines.join
|
88
|
+
end
|
89
|
+
|
90
|
+
def down
|
91
|
+
# Drop all Tasker tables in reverse dependency order
|
92
|
+
execute 'DROP TABLE IF EXISTS tasker_workflow_step_transitions CASCADE;'
|
93
|
+
execute 'DROP TABLE IF EXISTS tasker_task_transitions CASCADE;'
|
94
|
+
execute 'DROP TABLE IF EXISTS tasker_task_annotations CASCADE;'
|
95
|
+
execute 'DROP TABLE IF EXISTS tasker_workflow_step_edges CASCADE;'
|
96
|
+
execute 'DROP TABLE IF EXISTS tasker_workflow_steps CASCADE;'
|
97
|
+
execute 'DROP TABLE IF EXISTS tasker_tasks CASCADE;'
|
98
|
+
execute 'DROP TABLE IF EXISTS tasker_named_tasks_named_steps CASCADE;'
|
99
|
+
execute 'DROP TABLE IF EXISTS tasker_named_steps CASCADE;'
|
100
|
+
execute 'DROP TABLE IF EXISTS tasker_named_tasks CASCADE;'
|
101
|
+
execute 'DROP TABLE IF EXISTS tasker_dependent_system_object_maps CASCADE;'
|
102
|
+
execute 'DROP TABLE IF EXISTS tasker_dependent_systems CASCADE;'
|
103
|
+
execute 'DROP TABLE IF EXISTS tasker_task_namespaces CASCADE;'
|
104
|
+
execute 'DROP TABLE IF EXISTS tasker_annotation_types CASCADE;'
|
105
|
+
|
106
|
+
# Drop views
|
107
|
+
execute 'DROP VIEW IF EXISTS tasker_step_dag_relationships CASCADE;'
|
108
|
+
|
109
|
+
# Drop functions
|
110
|
+
execute 'DROP FUNCTION IF EXISTS public.get_step_readiness_status(bigint, bigint[]) CASCADE;'
|
111
|
+
execute 'DROP FUNCTION IF EXISTS public.get_step_readiness_status_batch(bigint[]) CASCADE;'
|
112
|
+
execute 'DROP FUNCTION IF EXISTS public.calculate_dependency_levels(bigint) CASCADE;'
|
113
|
+
execute 'DROP FUNCTION IF EXISTS public.get_system_health_counts_v01() CASCADE;'
|
114
|
+
execute 'DROP FUNCTION IF EXISTS public.get_analytics_metrics_v01(timestamp with time zone) CASCADE;'
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
SELECT
|
2
|
+
ws.workflow_step_id,
|
3
|
+
ws.task_id,
|
4
|
+
ws.named_step_id,
|
5
|
+
|
6
|
+
-- Parent/Child relationship data (pre-calculated as JSONB arrays)
|
7
|
+
COALESCE(parent_data.parent_ids, '[]'::jsonb) as parent_step_ids,
|
8
|
+
COALESCE(child_data.child_ids, '[]'::jsonb) as child_step_ids,
|
9
|
+
COALESCE(parent_data.parent_count, 0) as parent_count,
|
10
|
+
COALESCE(child_data.child_count, 0) as child_count,
|
11
|
+
|
12
|
+
-- DAG position information
|
13
|
+
CASE WHEN COALESCE(parent_data.parent_count, 0) = 0 THEN true ELSE false END as is_root_step,
|
14
|
+
CASE WHEN COALESCE(child_data.child_count, 0) = 0 THEN true ELSE false END as is_leaf_step,
|
15
|
+
|
16
|
+
-- Depth calculation for DAG traversal optimization
|
17
|
+
depth_info.min_depth_from_root
|
18
|
+
|
19
|
+
FROM tasker_workflow_steps ws
|
20
|
+
|
21
|
+
LEFT JOIN (
|
22
|
+
SELECT
|
23
|
+
to_step_id,
|
24
|
+
jsonb_agg(from_step_id ORDER BY from_step_id) as parent_ids,
|
25
|
+
count(*) as parent_count
|
26
|
+
FROM tasker_workflow_step_edges
|
27
|
+
GROUP BY to_step_id
|
28
|
+
) parent_data ON parent_data.to_step_id = ws.workflow_step_id
|
29
|
+
|
30
|
+
LEFT JOIN (
|
31
|
+
SELECT
|
32
|
+
from_step_id,
|
33
|
+
jsonb_agg(to_step_id ORDER BY to_step_id) as child_ids,
|
34
|
+
count(*) as child_count
|
35
|
+
FROM tasker_workflow_step_edges
|
36
|
+
GROUP BY from_step_id
|
37
|
+
) child_data ON child_data.from_step_id = ws.workflow_step_id
|
38
|
+
|
39
|
+
LEFT JOIN (
|
40
|
+
-- Recursive CTE for depth calculation (PostgreSQL-specific)
|
41
|
+
WITH RECURSIVE step_depths AS (
|
42
|
+
-- Base case: root steps (no parents)
|
43
|
+
SELECT
|
44
|
+
ws_inner.workflow_step_id,
|
45
|
+
0 as depth_from_root,
|
46
|
+
ws_inner.task_id
|
47
|
+
FROM tasker_workflow_steps ws_inner
|
48
|
+
WHERE NOT EXISTS (
|
49
|
+
SELECT 1 FROM tasker_workflow_step_edges e
|
50
|
+
WHERE e.to_step_id = ws_inner.workflow_step_id
|
51
|
+
)
|
52
|
+
|
53
|
+
UNION ALL
|
54
|
+
|
55
|
+
-- Recursive case: steps with parents
|
56
|
+
SELECT
|
57
|
+
e.to_step_id,
|
58
|
+
sd.depth_from_root + 1,
|
59
|
+
sd.task_id
|
60
|
+
FROM step_depths sd
|
61
|
+
JOIN tasker_workflow_step_edges e ON e.from_step_id = sd.workflow_step_id
|
62
|
+
WHERE sd.depth_from_root < 50 -- Prevent infinite recursion
|
63
|
+
)
|
64
|
+
SELECT
|
65
|
+
workflow_step_id,
|
66
|
+
MIN(depth_from_root) as min_depth_from_root
|
67
|
+
FROM step_depths
|
68
|
+
GROUP BY workflow_step_id
|
69
|
+
) depth_info ON depth_info.workflow_step_id = ws.workflow_step_id
|
@@ -0,0 +1,384 @@
|
|
1
|
+
# Tasker Application Template Generator
|
2
|
+
|
3
|
+
The Tasker Application Template Generator provides a one-line creation experience for building production-ready applications that leverage Tasker's enterprise workflow orchestration capabilities. Version 2.6.0 introduces Docker-based development environments and comprehensive dry-run validation.
|
4
|
+
|
5
|
+
## Quick Start
|
6
|
+
|
7
|
+
### One-Line Creation (Interactive)
|
8
|
+
```bash
|
9
|
+
curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash
|
10
|
+
```
|
11
|
+
|
12
|
+
This will:
|
13
|
+
1. Check your system dependencies (Ruby 3.0+, Rails 7+, Git)
|
14
|
+
2. Download the application generator and templates
|
15
|
+
3. Run an interactive setup to customize your application
|
16
|
+
4. Create a complete Rails application with Tasker integration
|
17
|
+
|
18
|
+
### Docker-Based Development (NEW in v2.6.0)
|
19
|
+
```bash
|
20
|
+
# Create a Docker-based development environment
|
21
|
+
curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash -s -- \
|
22
|
+
--app-name my-tasker-app \
|
23
|
+
--docker \
|
24
|
+
--with-observability
|
25
|
+
```
|
26
|
+
|
27
|
+
This creates a complete Docker environment with:
|
28
|
+
- Rails application container with live code reloading
|
29
|
+
- PostgreSQL 15 with Tasker schema
|
30
|
+
- Redis 7 for caching and background jobs
|
31
|
+
- Jaeger distributed tracing (optional)
|
32
|
+
- Prometheus metrics collection (optional)
|
33
|
+
|
34
|
+
### Non-Interactive Creation
|
35
|
+
```bash
|
36
|
+
curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash -s -- \
|
37
|
+
--app-name my-tasker-app \
|
38
|
+
--tasks ecommerce,inventory \
|
39
|
+
--non-interactive
|
40
|
+
```
|
41
|
+
|
42
|
+
### With Custom Options
|
43
|
+
```bash
|
44
|
+
curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash -s -- \
|
45
|
+
--app-name ecommerce-app \
|
46
|
+
--tasks ecommerce \
|
47
|
+
--output-dir ./my-applications \
|
48
|
+
--no-observability
|
49
|
+
```
|
50
|
+
|
51
|
+
## Available Options
|
52
|
+
|
53
|
+
| Option | Description | Default |
|
54
|
+
|--------|-------------|---------|
|
55
|
+
| `--app-name NAME` | Name of the Tasker application | `my-tasker-app` |
|
56
|
+
| `--tasks LIST` | Comma-separated application templates to include | `ecommerce,inventory,customer` |
|
57
|
+
| `--output-dir DIR` | Where to create the application | `./tasker-applications` |
|
58
|
+
| `--observability` | Include OpenTelemetry/Prometheus config | `true` |
|
59
|
+
| `--interactive` | Enable interactive prompts | `true` |
|
60
|
+
| `--api-base-url URL` | DummyJSON API base URL | `https://dummyjson.com` |
|
61
|
+
| `--docker` | Generate Docker-based development environment | `false` |
|
62
|
+
| `--with-observability` | Include Jaeger and Prometheus in Docker setup | `false` |
|
63
|
+
|
64
|
+
## What Gets Created
|
65
|
+
|
66
|
+
The generator creates a complete Rails application featuring:
|
67
|
+
|
68
|
+
### ๐๏ธ **Application Structure**
|
69
|
+
- Rails 7+ API application with Tasker integration
|
70
|
+
- Proper Gemfile with Tasker gem and dependencies
|
71
|
+
- Database setup with Tasker migrations
|
72
|
+
- Development and production configurations
|
73
|
+
|
74
|
+
### ๐ **Application Templates**
|
75
|
+
Choose from three business domains:
|
76
|
+
|
77
|
+
**E-commerce (`ecommerce`)**
|
78
|
+
- Order processing workflow
|
79
|
+
- Cart validation โ Inventory check โ Pricing calculation โ Order creation
|
80
|
+
- DummyJSON API integration for realistic data
|
81
|
+
|
82
|
+
**Inventory Management (`inventory`)**
|
83
|
+
- Stock monitoring and reorder management
|
84
|
+
- Threshold-based stock level monitoring
|
85
|
+
- Low stock identification and alerting
|
86
|
+
|
87
|
+
**Customer Onboarding (`customer`)**
|
88
|
+
- User registration and validation workflow
|
89
|
+
- Duplicate user detection
|
90
|
+
- Registration data validation
|
91
|
+
|
92
|
+
### ๐จ **Generated Components**
|
93
|
+
|
94
|
+
**YAML Configuration Files** (`config/tasker/tasks/`)
|
95
|
+
- Proper `Tasker::ConfiguredTask` format
|
96
|
+
- Environment-specific configurations
|
97
|
+
- Step templates with dependencies
|
98
|
+
|
99
|
+
**Step Handler Classes** (`app/tasks/`)
|
100
|
+
- API integration handlers using `Tasker::StepHandler::Api`
|
101
|
+
- Calculation handlers for business logic
|
102
|
+
- Database operation handlers
|
103
|
+
- Notification handlers (email, SMS, webhooks, Slack)
|
104
|
+
|
105
|
+
**Enhanced Configuration** (`config/initializers/tasker.rb`)
|
106
|
+
- Authentication setup
|
107
|
+
- Telemetry and metrics configuration
|
108
|
+
- Engine configuration with proper directories
|
109
|
+
- Health check configuration
|
110
|
+
|
111
|
+
### ๐ **Observability Stack**
|
112
|
+
- OpenTelemetry integration for distributed tracing
|
113
|
+
- Prometheus metrics collection
|
114
|
+
- Structured logging with correlation IDs
|
115
|
+
- Example configurations for Jaeger, Zipkin, and other OTLP backends
|
116
|
+
|
117
|
+
### ๐ **Documentation**
|
118
|
+
- Comprehensive README with setup instructions
|
119
|
+
- API endpoint documentation
|
120
|
+
- Example GraphQL queries and REST API calls
|
121
|
+
- Observability setup guides
|
122
|
+
|
123
|
+
## Architecture Benefits
|
124
|
+
|
125
|
+
### ๐ **Two-Layer Approach**
|
126
|
+
1. **Shell Script Layer**: Environment validation, dependency checking, file downloads
|
127
|
+
2. **Ruby Script Layer**: Complex application generation, template processing, Rails integration
|
128
|
+
|
129
|
+
### โจ **Why This Pattern Works**
|
130
|
+
- **Familiar**: Developers expect `curl | sh` for dev tools
|
131
|
+
- **Robust**: Ruby script provides comprehensive environment validation
|
132
|
+
- **Maintainable**: Complex logic stays in Ruby where it belongs
|
133
|
+
- **Flexible**: Easy to extend with new task types and configurations
|
134
|
+
- **Marketing**: Reduces friction for trying Tasker
|
135
|
+
|
136
|
+
## Security Considerations
|
137
|
+
|
138
|
+
### ๐ **Safe Practices**
|
139
|
+
- Always review scripts before running: `curl -fsSL <url> | less`
|
140
|
+
- Use HTTPS URLs to prevent man-in-the-middle attacks
|
141
|
+
- Script uses temporary directories with cleanup
|
142
|
+
- No persistent system modifications outside project directory
|
143
|
+
|
144
|
+
### ๐ก๏ธ **Transparency**
|
145
|
+
- All source code is public and reviewable
|
146
|
+
- No hidden downloads or external dependencies
|
147
|
+
- Clear logging of all operations
|
148
|
+
- Fail-fast error handling
|
149
|
+
|
150
|
+
## Docker Development Environment (v2.6.0)
|
151
|
+
|
152
|
+
### Quick Start with Docker
|
153
|
+
The Docker mode provides a complete containerized development environment, eliminating setup friction:
|
154
|
+
|
155
|
+
```bash
|
156
|
+
# Generate application with Docker support
|
157
|
+
ruby scripts/create_tasker_app.rb build my-app --docker --with-observability
|
158
|
+
|
159
|
+
# Navigate to your app
|
160
|
+
cd tasker-applications/my-app
|
161
|
+
|
162
|
+
# Start the development environment
|
163
|
+
./bin/docker-dev up # Core services only
|
164
|
+
./bin/docker-dev up-full # Include observability stack
|
165
|
+
```
|
166
|
+
|
167
|
+
### Docker Development Commands
|
168
|
+
The `./bin/docker-dev` helper script provides 15+ commands for Docker management:
|
169
|
+
|
170
|
+
**Service Management**
|
171
|
+
```bash
|
172
|
+
./bin/docker-dev up # Start core services
|
173
|
+
./bin/docker-dev up-full # Start with observability
|
174
|
+
./bin/docker-dev down # Stop all services
|
175
|
+
./bin/docker-dev restart # Restart app service
|
176
|
+
./bin/docker-dev status # Show service status
|
177
|
+
```
|
178
|
+
|
179
|
+
**Development Tools**
|
180
|
+
```bash
|
181
|
+
./bin/docker-dev console # Rails console
|
182
|
+
./bin/docker-dev bash # Shell access
|
183
|
+
./bin/docker-dev logs # View all logs
|
184
|
+
./bin/docker-dev logs-app # View app logs only
|
185
|
+
```
|
186
|
+
|
187
|
+
**Database Operations**
|
188
|
+
```bash
|
189
|
+
./bin/docker-dev migrate # Run migrations
|
190
|
+
./bin/docker-dev setup # Run Tasker setup
|
191
|
+
./bin/docker-dev reset-db # Reset database (destructive)
|
192
|
+
```
|
193
|
+
|
194
|
+
**Testing & Validation**
|
195
|
+
```bash
|
196
|
+
./bin/docker-dev test # Run test suite
|
197
|
+
./bin/docker-dev validate # Run integration validations
|
198
|
+
```
|
199
|
+
|
200
|
+
### Docker Architecture
|
201
|
+
- **Multi-stage Dockerfile**: Optimized for development and production
|
202
|
+
- **Service orchestration**: PostgreSQL, Redis, Rails app, and optional observability
|
203
|
+
- **Volume mounts**: Live code reloading with persistent data
|
204
|
+
- **Health checks**: Automatic service dependency management
|
205
|
+
- **Network isolation**: Secure bridge network for all services
|
206
|
+
|
207
|
+
## Dry-Run Validation System (v2.6.0)
|
208
|
+
|
209
|
+
### Overview
|
210
|
+
The generator includes a comprehensive dry-run validation system that tests template consistency without generating files:
|
211
|
+
|
212
|
+
```bash
|
213
|
+
# Run all validations
|
214
|
+
ruby scripts/create_tasker_app.rb dry_run
|
215
|
+
|
216
|
+
# Run specific validation modes
|
217
|
+
ruby scripts/create_tasker_app.rb dry_run --mode=templates # File existence
|
218
|
+
ruby scripts/create_tasker_app.rb dry_run --mode=syntax # ERB/Ruby/YAML syntax
|
219
|
+
ruby scripts/create_tasker_app.rb dry_run --mode=cli # CLI option mapping
|
220
|
+
ruby scripts/create_tasker_app.rb dry_run --mode=bindings # Template variables
|
221
|
+
|
222
|
+
# Validate Docker templates
|
223
|
+
ruby scripts/create_tasker_app.rb dry_run --docker --with-observability
|
224
|
+
```
|
225
|
+
|
226
|
+
### Validation Categories
|
227
|
+
|
228
|
+
**1. Template File Existence**
|
229
|
+
- Verifies all required ERB templates exist
|
230
|
+
- Adapts to Docker/observability modes
|
231
|
+
- Reports missing templates with paths
|
232
|
+
|
233
|
+
**2. ERB Template Syntax**
|
234
|
+
- Parses all ERB templates for syntax errors
|
235
|
+
- Validates without executing templates
|
236
|
+
- Catches malformed Ruby blocks and expressions
|
237
|
+
|
238
|
+
**3. Generated Code Syntax**
|
239
|
+
- Renders templates with test data
|
240
|
+
- Validates Ruby syntax using RubyVM::InstructionSequence
|
241
|
+
- Validates YAML syntax using YAML.safe_load
|
242
|
+
- Tests actual generated output, not just templates
|
243
|
+
|
244
|
+
**4. CLI Options Mapping**
|
245
|
+
- Ensures all Thor options have corresponding instance variables
|
246
|
+
- Validates required methods exist
|
247
|
+
- Handles renamed variables (e.g., `--docker` โ `@docker_mode`)
|
248
|
+
|
249
|
+
**5. Template Variable Bindings**
|
250
|
+
- Tests templates can render with expected contexts
|
251
|
+
- Validates all required variables are available
|
252
|
+
- Tests step handlers, configuration, and Docker bindings
|
253
|
+
|
254
|
+
### Example Output
|
255
|
+
```
|
256
|
+
๐งช Starting Dry Run Validation...
|
257
|
+
๐ Mode: all
|
258
|
+
๐๏ธ Tasks: ecommerce, inventory, customer
|
259
|
+
๐ณ Docker mode: enabled
|
260
|
+
๐ Observability: enabled
|
261
|
+
|
262
|
+
๐ Validating template files existence...
|
263
|
+
โ
14 templates found
|
264
|
+
๐ง Validating ERB template syntax...
|
265
|
+
โ
19 ERB templates valid
|
266
|
+
๐ Validating Ruby template output syntax...
|
267
|
+
โ
4 Ruby templates generate valid syntax
|
268
|
+
๐ Validating YAML template output syntax...
|
269
|
+
โ
4 YAML templates generate valid syntax
|
270
|
+
โ๏ธ Validating CLI options mapping...
|
271
|
+
โ
17 CLI mappings valid
|
272
|
+
๐ Validating template variable bindings...
|
273
|
+
โ
5 binding contexts valid
|
274
|
+
|
275
|
+
๐ฏ Overall Result:
|
276
|
+
โ
All validations passed! (63 checks)
|
277
|
+
```
|
278
|
+
|
279
|
+
### CI/CD Integration
|
280
|
+
The dry-run system is perfect for CI/CD pipelines:
|
281
|
+
- Zero file system impact
|
282
|
+
- Clear exit codes (0 for success, 1 for failure)
|
283
|
+
- Detailed error reporting
|
284
|
+
- Sub-second execution time
|
285
|
+
|
286
|
+
## Development Setup
|
287
|
+
|
288
|
+
### For Contributors
|
289
|
+
|
290
|
+
If you're developing or testing the installer:
|
291
|
+
|
292
|
+
```bash
|
293
|
+
# Test locally without network
|
294
|
+
./scripts/install-tasker-app.sh --help
|
295
|
+
|
296
|
+
# Test with local templates
|
297
|
+
ruby scripts/create_tasker_app.rb build test-app \
|
298
|
+
--templates-dir ./scripts/templates \
|
299
|
+
--non-interactive
|
300
|
+
|
301
|
+
# Run comprehensive validation
|
302
|
+
ruby scripts/create_tasker_app.rb dry_run --mode=all
|
303
|
+
|
304
|
+
# Test Docker generation
|
305
|
+
ruby scripts/create_tasker_app.rb build docker-app \
|
306
|
+
--docker --with-observability
|
307
|
+
```
|
308
|
+
|
309
|
+
### Repository Setup
|
310
|
+
|
311
|
+
To host this installer on your GitHub repository:
|
312
|
+
|
313
|
+
1. **Update URLs** in `scripts/install-tasker-app.sh`:
|
314
|
+
```bash
|
315
|
+
GITHUB_REPO="tasker-systems/tasker" # Your actual GitHub repo
|
316
|
+
BRANCH="main" # Your default branch
|
317
|
+
```
|
318
|
+
|
319
|
+
2. **Ensure Files Are Public**:
|
320
|
+
- `scripts/install-tasker-app.sh`
|
321
|
+
- `scripts/create_tasker_app.rb`
|
322
|
+
- All files in `scripts/templates/`
|
323
|
+
|
324
|
+
3. **Test the URLs**:
|
325
|
+
```bash
|
326
|
+
curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh
|
327
|
+
```
|
328
|
+
|
329
|
+
## Example Usage Flows
|
330
|
+
|
331
|
+
### Marketing/Conference Flow
|
332
|
+
```bash
|
333
|
+
# Conference presentation or documentation
|
334
|
+
curl -fsSL https://install.tasker.dev | bash
|
335
|
+
```
|
336
|
+
|
337
|
+
### Developer Evaluation
|
338
|
+
```bash
|
339
|
+
# Quick evaluation with specific use case
|
340
|
+
curl -fsSL https://install.tasker.dev | bash -s -- \
|
341
|
+
--app-name my-evaluation-app \
|
342
|
+
--tasks ecommerce \
|
343
|
+
--non-interactive
|
344
|
+
```
|
345
|
+
|
346
|
+
### Tutorial/Workshop
|
347
|
+
```bash
|
348
|
+
# Guided setup for workshops
|
349
|
+
curl -fsSL https://install.tasker.dev | bash -s -- \
|
350
|
+
--app-name workshop-app \
|
351
|
+
--interactive
|
352
|
+
```
|
353
|
+
|
354
|
+
## Integration Examples
|
355
|
+
|
356
|
+
Once installed, developers can immediately:
|
357
|
+
|
358
|
+
### ๐ **Explore APIs**
|
359
|
+
- GraphQL Playground: `http://localhost:3000/tasker/graphql`
|
360
|
+
- REST API Docs: `http://localhost:3000/tasker/api-docs`
|
361
|
+
- Health Endpoints: `http://localhost:3000/tasker/health/status`
|
362
|
+
|
363
|
+
### ๐ **Execute Workflows**
|
364
|
+
```ruby
|
365
|
+
# Create and run an e-commerce order processing task
|
366
|
+
task = Tasker::HandlerFactory.instance.get(
|
367
|
+
'order_processing',
|
368
|
+
namespace_name: 'ecommerce',
|
369
|
+
version: '1.0.0'
|
370
|
+
).initialize_task!(
|
371
|
+
Tasker::Types::TaskRequest.new(
|
372
|
+
name: 'order_processing',
|
373
|
+
namespace: 'ecommerce',
|
374
|
+
context: { cart_id: 123, user_id: 456 }
|
375
|
+
)
|
376
|
+
)
|
377
|
+
```
|
378
|
+
|
379
|
+
### ๐ **Monitor Observability**
|
380
|
+
- Metrics: `http://localhost:3000/tasker/metrics`
|
381
|
+
- Configure your observability backend via `OTEL_EXPORTER_OTLP_ENDPOINT`
|
382
|
+
- View structured logs with correlation IDs
|
383
|
+
|
384
|
+
This generator transforms Tasker from "interesting project" to "production application" in under 5 minutes, providing an exceptional developer experience that showcases enterprise-grade workflow orchestration capabilities.
|