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.
Files changed (605) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +443 -0
  4. data/Rakefile +10 -0
  5. data/app/controllers/tasker/analytics_controller.rb +179 -0
  6. data/app/controllers/tasker/application_controller.rb +45 -0
  7. data/app/controllers/tasker/graphql_controller.rb +193 -0
  8. data/app/controllers/tasker/handlers_controller.rb +217 -0
  9. data/app/controllers/tasker/health_controller.rb +229 -0
  10. data/app/controllers/tasker/metrics_controller.rb +111 -0
  11. data/app/controllers/tasker/page_sort.rb +97 -0
  12. data/app/controllers/tasker/task_diagrams_controller.rb +30 -0
  13. data/app/controllers/tasker/tasks_controller.rb +123 -0
  14. data/app/controllers/tasker/workflow_steps_controller.rb +69 -0
  15. data/app/graphql/examples/all_tasks.graphql +22 -0
  16. data/app/graphql/examples/pending_tasks.graphql +23 -0
  17. data/app/graphql/tasker/graph_ql_types/annotation_type.rb +14 -0
  18. data/app/graphql/tasker/graph_ql_types/base_argument.rb +9 -0
  19. data/app/graphql/tasker/graph_ql_types/base_connection.rb +11 -0
  20. data/app/graphql/tasker/graph_ql_types/base_edge.rb +10 -0
  21. data/app/graphql/tasker/graph_ql_types/base_enum.rb +9 -0
  22. data/app/graphql/tasker/graph_ql_types/base_field.rb +10 -0
  23. data/app/graphql/tasker/graph_ql_types/base_input_object.rb +10 -0
  24. data/app/graphql/tasker/graph_ql_types/base_interface.rb +14 -0
  25. data/app/graphql/tasker/graph_ql_types/base_object.rb +10 -0
  26. data/app/graphql/tasker/graph_ql_types/base_scalar.rb +9 -0
  27. data/app/graphql/tasker/graph_ql_types/base_union.rb +11 -0
  28. data/app/graphql/tasker/graph_ql_types/dependent_system_object_map_type.rb +18 -0
  29. data/app/graphql/tasker/graph_ql_types/dependent_system_type.rb +13 -0
  30. data/app/graphql/tasker/graph_ql_types/mutation_type.rb +16 -0
  31. data/app/graphql/tasker/graph_ql_types/named_step_type.rb +16 -0
  32. data/app/graphql/tasker/graph_ql_types/named_task_type.rb +14 -0
  33. data/app/graphql/tasker/graph_ql_types/named_tasks_named_step_type.rb +19 -0
  34. data/app/graphql/tasker/graph_ql_types/node_type.rb +12 -0
  35. data/app/graphql/tasker/graph_ql_types/query_type.rb +20 -0
  36. data/app/graphql/tasker/graph_ql_types/task_annotation_type.rb +17 -0
  37. data/app/graphql/tasker/graph_ql_types/task_interface.rb +17 -0
  38. data/app/graphql/tasker/graph_ql_types/task_type.rb +26 -0
  39. data/app/graphql/tasker/graph_ql_types/workflow_step_type.rb +154 -0
  40. data/app/graphql/tasker/graph_ql_types.rb +42 -0
  41. data/app/graphql/tasker/mutations/base_mutation.rb +13 -0
  42. data/app/graphql/tasker/mutations/cancel_step.rb +29 -0
  43. data/app/graphql/tasker/mutations/cancel_task.rb +29 -0
  44. data/app/graphql/tasker/mutations/create_task.rb +52 -0
  45. data/app/graphql/tasker/mutations/update_step.rb +36 -0
  46. data/app/graphql/tasker/mutations/update_task.rb +41 -0
  47. data/app/graphql/tasker/queries/all_annotation_types.rb +17 -0
  48. data/app/graphql/tasker/queries/all_tasks.rb +23 -0
  49. data/app/graphql/tasker/queries/base_query.rb +9 -0
  50. data/app/graphql/tasker/queries/helpers.rb +16 -0
  51. data/app/graphql/tasker/queries/one_step.rb +24 -0
  52. data/app/graphql/tasker/queries/one_task.rb +18 -0
  53. data/app/graphql/tasker/queries/tasks_by_annotation.rb +31 -0
  54. data/app/graphql/tasker/queries/tasks_by_status.rb +30 -0
  55. data/app/graphql/tasker/tasker_rails_schema.rb +52 -0
  56. data/app/jobs/tasker/application_job.rb +8 -0
  57. data/app/jobs/tasker/metrics_export_job.rb +252 -0
  58. data/app/jobs/tasker/task_runner_job.rb +224 -0
  59. data/app/models/tasker/annotation_type.rb +26 -0
  60. data/app/models/tasker/application_record.rb +70 -0
  61. data/app/models/tasker/dependent_system.rb +26 -0
  62. data/app/models/tasker/dependent_system_object_map.rb +64 -0
  63. data/app/models/tasker/diagram/edge.rb +106 -0
  64. data/app/models/tasker/diagram/flowchart.rb +137 -0
  65. data/app/models/tasker/diagram/node.rb +99 -0
  66. data/app/models/tasker/named_step.rb +41 -0
  67. data/app/models/tasker/named_task.rb +121 -0
  68. data/app/models/tasker/named_tasks_named_step.rb +82 -0
  69. data/app/models/tasker/step_dag_relationship.rb +65 -0
  70. data/app/models/tasker/step_readiness_status.rb +59 -0
  71. data/app/models/tasker/task.rb +424 -0
  72. data/app/models/tasker/task_annotation.rb +36 -0
  73. data/app/models/tasker/task_diagram.rb +332 -0
  74. data/app/models/tasker/task_execution_context.rb +29 -0
  75. data/app/models/tasker/task_namespace.rb +41 -0
  76. data/app/models/tasker/task_transition.rb +235 -0
  77. data/app/models/tasker/workflow_step.rb +461 -0
  78. data/app/models/tasker/workflow_step_edge.rb +94 -0
  79. data/app/models/tasker/workflow_step_transition.rb +434 -0
  80. data/app/serializers/tasker/annotation_type_serializer.rb +8 -0
  81. data/app/serializers/tasker/handler_serializer.rb +109 -0
  82. data/app/serializers/tasker/task_annotation_serializer.rb +32 -0
  83. data/app/serializers/tasker/task_serializer.rb +168 -0
  84. data/app/serializers/tasker/workflow_step_serializer.rb +27 -0
  85. data/app/services/tasker/analytics_service.rb +409 -0
  86. data/app/views/tasker/task/_diagram.html.erb +32 -0
  87. data/config/initializers/dry_struct.rb +11 -0
  88. data/config/initializers/statesman.rb +6 -0
  89. data/config/initializers/tasker_orchestration.rb +17 -0
  90. data/config/initializers/time_formats.rb +4 -0
  91. data/config/routes.rb +34 -0
  92. data/config/tasker/subscriptions/example_integrations.yml +67 -0
  93. data/config/tasker/system_events.yml +305 -0
  94. data/db/functions/calculate_dependency_levels_v01.sql +45 -0
  95. data/db/functions/get_analytics_metrics_v01.sql +137 -0
  96. data/db/functions/get_slowest_steps_v01.sql +82 -0
  97. data/db/functions/get_slowest_tasks_v01.sql +96 -0
  98. data/db/functions/get_step_readiness_status_batch_v01.sql +140 -0
  99. data/db/functions/get_step_readiness_status_v01.sql +139 -0
  100. data/db/functions/get_system_health_counts_v01.sql +108 -0
  101. data/db/functions/get_task_execution_context_v01.sql +108 -0
  102. data/db/functions/get_task_execution_contexts_batch_v01.sql +104 -0
  103. data/db/init/schema.sql +2277 -0
  104. data/db/migrate/20250701165431_initial_tasker_schema.rb +116 -0
  105. data/db/views/tasker_step_dag_relationships_v01.sql +69 -0
  106. data/docs/APPLICATION_GENERATOR.md +384 -0
  107. data/docs/AUTH.md +1780 -0
  108. data/docs/CIRCUIT_BREAKER.md +224 -0
  109. data/docs/DEVELOPER_GUIDE.md +2665 -0
  110. data/docs/EVENT_SYSTEM.md +637 -0
  111. data/docs/EXECUTION_CONFIGURATION.md +341 -0
  112. data/docs/FLOW_CHART.md +149 -0
  113. data/docs/HEALTH.md +542 -0
  114. data/docs/METRICS.md +731 -0
  115. data/docs/OPTIMIZATION_PLAN.md +1479 -0
  116. data/docs/OVERVIEW.md +552 -0
  117. data/docs/QUICK_START.md +270 -0
  118. data/docs/REGISTRY_SYSTEMS.md +373 -0
  119. data/docs/REST_API.md +632 -0
  120. data/docs/ROADMAP.md +221 -0
  121. data/docs/SQL_FUNCTIONS.md +1408 -0
  122. data/docs/TASK_DIAGRAM.md +252 -0
  123. data/docs/TASK_EXECUTION_CONTROL_FLOW.md +237 -0
  124. data/docs/TELEMETRY.md +795 -0
  125. data/docs/TROUBLESHOOTING.md +756 -0
  126. data/docs/TaskHandlerGenerator.html +255 -0
  127. data/docs/Tasker/Analysis/RuntimeGraphAnalyzer.html +907 -0
  128. data/docs/Tasker/Analysis/TemplateGraphAnalyzer.html +1236 -0
  129. data/docs/Tasker/Analysis.html +117 -0
  130. data/docs/Tasker/AnalyticsController.html +450 -0
  131. data/docs/Tasker/AnalyticsService/BottleneckAnalytics.html +816 -0
  132. data/docs/Tasker/AnalyticsService/PerformanceAnalytics.html +586 -0
  133. data/docs/Tasker/AnalyticsService.html +2221 -0
  134. data/docs/Tasker/AnnotationType.html +137 -0
  135. data/docs/Tasker/AnnotationTypeSerializer.html +124 -0
  136. data/docs/Tasker/ApplicationController.html +147 -0
  137. data/docs/Tasker/ApplicationJob.html +128 -0
  138. data/docs/Tasker/ApplicationRecord.html +378 -0
  139. data/docs/Tasker/Authentication/AuthenticationError.html +124 -0
  140. data/docs/Tasker/Authentication/ConfigurationError.html +124 -0
  141. data/docs/Tasker/Authentication/Coordinator.html +242 -0
  142. data/docs/Tasker/Authentication/Interface.html +560 -0
  143. data/docs/Tasker/Authentication/InterfaceError.html +124 -0
  144. data/docs/Tasker/Authentication/NoneAuthenticator.html +338 -0
  145. data/docs/Tasker/Authentication.html +119 -0
  146. data/docs/Tasker/Authorization/AuthorizationError.html +139 -0
  147. data/docs/Tasker/Authorization/BaseCoordinator.html +927 -0
  148. data/docs/Tasker/Authorization/ConfigurationError.html +153 -0
  149. data/docs/Tasker/Authorization/ResourceConstants/ACTIONS.html +428 -0
  150. data/docs/Tasker/Authorization/ResourceConstants/RESOURCES.html +365 -0
  151. data/docs/Tasker/Authorization/ResourceConstants.html +146 -0
  152. data/docs/Tasker/Authorization/ResourceRegistry.html +882 -0
  153. data/docs/Tasker/Authorization/UnauthorizedError.html +153 -0
  154. data/docs/Tasker/Authorization.html +582 -0
  155. data/docs/Tasker/CacheCapabilities.html +167 -0
  156. data/docs/Tasker/CacheStrategy.html +1297 -0
  157. data/docs/Tasker/Concerns/Authenticatable.html +116 -0
  158. data/docs/Tasker/Concerns/Authorizable/AdminStatusChecker.html +256 -0
  159. data/docs/Tasker/Concerns/Authorizable.html +816 -0
  160. data/docs/Tasker/Concerns/ControllerAuthorizable.html +157 -0
  161. data/docs/Tasker/Concerns/EventPublisher.html +4023 -0
  162. data/docs/Tasker/Concerns/IdempotentStateTransitions.html +806 -0
  163. data/docs/Tasker/Concerns/LifecycleEventHelpers.html +129 -0
  164. data/docs/Tasker/Concerns/OrchestrationPublisher.html +129 -0
  165. data/docs/Tasker/Concerns/StateMachineBase/ClassMethods.html +1075 -0
  166. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase/ClassMethods.html +191 -0
  167. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase.html +126 -0
  168. data/docs/Tasker/Concerns/StateMachineBase.html +153 -0
  169. data/docs/Tasker/Concerns/StructuredLogging.html +1413 -0
  170. data/docs/Tasker/Concerns.html +117 -0
  171. data/docs/Tasker/Configuration/AuthConfiguration.html +1023 -0
  172. data/docs/Tasker/Configuration/ConfigurationProxy.html +581 -0
  173. data/docs/Tasker/Configuration/DatabaseConfiguration.html +475 -0
  174. data/docs/Tasker/Configuration/EngineConfiguration.html +1265 -0
  175. data/docs/Tasker/Configuration/HealthConfiguration.html +791 -0
  176. data/docs/Tasker/Configuration/TelemetryConfiguration.html +1308 -0
  177. data/docs/Tasker/Configuration/TelemetryConfigurationProxy.html +388 -0
  178. data/docs/Tasker/Configuration.html +1669 -0
  179. data/docs/Tasker/ConfigurationError.html +143 -0
  180. data/docs/Tasker/ConfiguredTask.html +514 -0
  181. data/docs/Tasker/Constants/EventDefinitions.html +590 -0
  182. data/docs/Tasker/Constants/LifecycleEvents.html +137 -0
  183. data/docs/Tasker/Constants/ObservabilityEvents/Step.html +152 -0
  184. data/docs/Tasker/Constants/ObservabilityEvents/Task.html +142 -0
  185. data/docs/Tasker/Constants/ObservabilityEvents.html +126 -0
  186. data/docs/Tasker/Constants/RegistryEvents.html +285 -0
  187. data/docs/Tasker/Constants/StepEvents.html +177 -0
  188. data/docs/Tasker/Constants/TaskEvents.html +167 -0
  189. data/docs/Tasker/Constants/TaskExecution/ExecutionStatus.html +207 -0
  190. data/docs/Tasker/Constants/TaskExecution/HealthStatus.html +191 -0
  191. data/docs/Tasker/Constants/TaskExecution/RecommendedAction.html +207 -0
  192. data/docs/Tasker/Constants/TaskExecution.html +126 -0
  193. data/docs/Tasker/Constants/TaskFinalization/ErrorMessages.html +132 -0
  194. data/docs/Tasker/Constants/TaskFinalization/PendingReasons.html +207 -0
  195. data/docs/Tasker/Constants/TaskFinalization/ReenqueueReasons.html +239 -0
  196. data/docs/Tasker/Constants/TaskFinalization.html +126 -0
  197. data/docs/Tasker/Constants/TaskStatuses.html +223 -0
  198. data/docs/Tasker/Constants/TestEvents.html +163 -0
  199. data/docs/Tasker/Constants/WorkflowEvents.html +222 -0
  200. data/docs/Tasker/Constants/WorkflowStepStatuses.html +223 -0
  201. data/docs/Tasker/Constants.html +561 -0
  202. data/docs/Tasker/DependentSystem.html +137 -0
  203. data/docs/Tasker/DependentSystemObjectMap.html +250 -0
  204. data/docs/Tasker/DetectorRegistry.html +598 -0
  205. data/docs/Tasker/Diagram/Edge.html +1191 -0
  206. data/docs/Tasker/Diagram/Flowchart.html +1539 -0
  207. data/docs/Tasker/Diagram/Node.html +1165 -0
  208. data/docs/Tasker/Diagram.html +117 -0
  209. data/docs/Tasker/Engine.html +215 -0
  210. data/docs/Tasker/Error.html +139 -0
  211. data/docs/Tasker/Events/Bus.html +1226 -0
  212. data/docs/Tasker/Events/Catalog/CatalogPrinter.html +258 -0
  213. data/docs/Tasker/Events/Catalog/CustomEventRegistrar.html +276 -0
  214. data/docs/Tasker/Events/Catalog/ExamplePayloadGenerator.html +294 -0
  215. data/docs/Tasker/Events/Catalog.html +1291 -0
  216. data/docs/Tasker/Events/CustomRegistry.html +943 -0
  217. data/docs/Tasker/Events/DefinitionLoader.html +575 -0
  218. data/docs/Tasker/Events/EventPayloadBuilder/ErrorInfoExtractor.html +286 -0
  219. data/docs/Tasker/Events/EventPayloadBuilder/StepPayloadBuilder.html +312 -0
  220. data/docs/Tasker/Events/EventPayloadBuilder.html +664 -0
  221. data/docs/Tasker/Events/Publisher.html +365 -0
  222. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer/ErrorTypeClassifier.html +1128 -0
  223. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer.html +270 -0
  224. data/docs/Tasker/Events/Subscribers/BaseSubscriber/MetricTagsExtractor.html +266 -0
  225. data/docs/Tasker/Events/Subscribers/BaseSubscriber.html +2556 -0
  226. data/docs/Tasker/Events/Subscribers/MetricsSubscriber.html +723 -0
  227. data/docs/Tasker/Events/Subscribers/TelemetrySubscriber.html +2251 -0
  228. data/docs/Tasker/Events/Subscribers.html +117 -0
  229. data/docs/Tasker/Events/SubscriptionLoader.html +493 -0
  230. data/docs/Tasker/Events.html +294 -0
  231. data/docs/Tasker/EventsGenerator.html +459 -0
  232. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics/AnalyticsMetrics.html +135 -0
  233. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics.html +412 -0
  234. data/docs/Tasker/Functions/FunctionBasedDependencyLevels.html +598 -0
  235. data/docs/Tasker/Functions/FunctionBasedSlowestSteps/SlowestStep.html +135 -0
  236. data/docs/Tasker/Functions/FunctionBasedSlowestSteps.html +453 -0
  237. data/docs/Tasker/Functions/FunctionBasedSlowestTasks/SlowestTask.html +135 -0
  238. data/docs/Tasker/Functions/FunctionBasedSlowestTasks.html +453 -0
  239. data/docs/Tasker/Functions/FunctionBasedStepReadinessStatus.html +1457 -0
  240. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts/HealthMetrics.html +135 -0
  241. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts.html +370 -0
  242. data/docs/Tasker/Functions/FunctionBasedTaskExecutionContext.html +1250 -0
  243. data/docs/Tasker/Functions/FunctionWrapper.html +479 -0
  244. data/docs/Tasker/Functions.html +117 -0
  245. data/docs/Tasker/Generators/AuthenticatorGenerator/UsageInstructionsFormatter.html +244 -0
  246. data/docs/Tasker/Generators/AuthenticatorGenerator.html +373 -0
  247. data/docs/Tasker/Generators/AuthorizationCoordinatorGenerator.html +430 -0
  248. data/docs/Tasker/Generators/SubscriberGenerator.html +377 -0
  249. data/docs/Tasker/Generators/TaskHandlerGenerator.html +263 -0
  250. data/docs/Tasker/Generators.html +117 -0
  251. data/docs/Tasker/GraphQLTypes/AnnotationType.html +132 -0
  252. data/docs/Tasker/GraphQLTypes/BaseArgument.html +124 -0
  253. data/docs/Tasker/GraphQLTypes/BaseConnection.html +124 -0
  254. data/docs/Tasker/GraphQLTypes/BaseEdge.html +130 -0
  255. data/docs/Tasker/GraphQLTypes/BaseEnum.html +124 -0
  256. data/docs/Tasker/GraphQLTypes/BaseField.html +124 -0
  257. data/docs/Tasker/GraphQLTypes/BaseInputObject.html +124 -0
  258. data/docs/Tasker/GraphQLTypes/BaseInterface.html +116 -0
  259. data/docs/Tasker/GraphQLTypes/BaseObject.html +128 -0
  260. data/docs/Tasker/GraphQLTypes/BaseScalar.html +124 -0
  261. data/docs/Tasker/GraphQLTypes/BaseUnion.html +124 -0
  262. data/docs/Tasker/GraphQLTypes/DependentSystemObjectMapType.html +132 -0
  263. data/docs/Tasker/GraphQLTypes/DependentSystemType.html +132 -0
  264. data/docs/Tasker/GraphQLTypes/MutationType.html +132 -0
  265. data/docs/Tasker/GraphQLTypes/NamedStepType.html +132 -0
  266. data/docs/Tasker/GraphQLTypes/NamedTaskType.html +132 -0
  267. data/docs/Tasker/GraphQLTypes/NamedTasksNamedStepType.html +132 -0
  268. data/docs/Tasker/GraphQLTypes/NodeType.html +118 -0
  269. data/docs/Tasker/GraphQLTypes/QueryType.html +139 -0
  270. data/docs/Tasker/GraphQLTypes/TaskAnnotationType.html +132 -0
  271. data/docs/Tasker/GraphQLTypes/TaskInterface.html +111 -0
  272. data/docs/Tasker/GraphQLTypes/TaskType.html +201 -0
  273. data/docs/Tasker/GraphQLTypes/WorkflowStepType.html +694 -0
  274. data/docs/Tasker/GraphQLTypes.html +130 -0
  275. data/docs/Tasker/GraphqlController.html +251 -0
  276. data/docs/Tasker/HandlerFactory.html +1518 -0
  277. data/docs/Tasker/HandlerSerializer.html +682 -0
  278. data/docs/Tasker/HandlersController.html +574 -0
  279. data/docs/Tasker/HashIdentityStrategy.html +278 -0
  280. data/docs/Tasker/Health/ReadinessChecker.html +712 -0
  281. data/docs/Tasker/Health/StatusChecker.html +653 -0
  282. data/docs/Tasker/Health.html +117 -0
  283. data/docs/Tasker/HealthController.html +523 -0
  284. data/docs/Tasker/IdentityStrategy.html +276 -0
  285. data/docs/Tasker/InvalidTaskHandlerConfig.html +135 -0
  286. data/docs/Tasker/LifecycleEvents/Events/Step.html +162 -0
  287. data/docs/Tasker/LifecycleEvents/Events/Task.html +162 -0
  288. data/docs/Tasker/LifecycleEvents/Events.html +204 -0
  289. data/docs/Tasker/LifecycleEvents/Publisher.html +132 -0
  290. data/docs/Tasker/LifecycleEvents.html +799 -0
  291. data/docs/Tasker/Logging/CorrelationIdGenerator.html +688 -0
  292. data/docs/Tasker/Logging.html +115 -0
  293. data/docs/Tasker/MetricsController.html +293 -0
  294. data/docs/Tasker/MetricsExportJob.html +414 -0
  295. data/docs/Tasker/Mutations/BaseMutation.html +128 -0
  296. data/docs/Tasker/Mutations/CancelStep.html +219 -0
  297. data/docs/Tasker/Mutations/CancelTask.html +221 -0
  298. data/docs/Tasker/Mutations/CreateTask.html +243 -0
  299. data/docs/Tasker/Mutations/UpdateStep.html +243 -0
  300. data/docs/Tasker/Mutations/UpdateTask.html +243 -0
  301. data/docs/Tasker/Mutations.html +117 -0
  302. data/docs/Tasker/NamedStep.html +216 -0
  303. data/docs/Tasker/NamedTask.html +910 -0
  304. data/docs/Tasker/NamedTasksNamedStep.html +435 -0
  305. data/docs/Tasker/Orchestration/BackoffCalculator.html +404 -0
  306. data/docs/Tasker/Orchestration/ConnectionBuilder/ConfigValidator.html +258 -0
  307. data/docs/Tasker/Orchestration/ConnectionBuilder.html +435 -0
  308. data/docs/Tasker/Orchestration/ConnectionPoolIntelligence.html +513 -0
  309. data/docs/Tasker/Orchestration/Coordinator.html +641 -0
  310. data/docs/Tasker/Orchestration/FutureStateAnalyzer.html +1045 -0
  311. data/docs/Tasker/Orchestration/Orchestrator.html +679 -0
  312. data/docs/Tasker/Orchestration/PluginIntegration.html +1127 -0
  313. data/docs/Tasker/Orchestration/ResponseProcessor.html +504 -0
  314. data/docs/Tasker/Orchestration/RetryHeaderParser.html +304 -0
  315. data/docs/Tasker/Orchestration/StepExecutor.html +995 -0
  316. data/docs/Tasker/Orchestration/StepSequenceFactory.html +644 -0
  317. data/docs/Tasker/Orchestration/TaskFinalizer/BlockageChecker.html +264 -0
  318. data/docs/Tasker/Orchestration/TaskFinalizer/ContextManager.html +254 -0
  319. data/docs/Tasker/Orchestration/TaskFinalizer/DelayCalculator.html +556 -0
  320. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationDecisionMaker.html +348 -0
  321. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationProcessor.html +286 -0
  322. data/docs/Tasker/Orchestration/TaskFinalizer/ReasonDeterminer.html +432 -0
  323. data/docs/Tasker/Orchestration/TaskFinalizer/ReenqueueManager.html +296 -0
  324. data/docs/Tasker/Orchestration/TaskFinalizer/UnclearStateHandler.html +314 -0
  325. data/docs/Tasker/Orchestration/TaskFinalizer.html +1212 -0
  326. data/docs/Tasker/Orchestration/TaskInitializer.html +766 -0
  327. data/docs/Tasker/Orchestration/TaskReenqueuer.html +506 -0
  328. data/docs/Tasker/Orchestration/ViableStepDiscovery.html +442 -0
  329. data/docs/Tasker/Orchestration/WorkflowCoordinator.html +510 -0
  330. data/docs/Tasker/Orchestration.html +130 -0
  331. data/docs/Tasker/PageSort/PageSortParamsBuilder.html +296 -0
  332. data/docs/Tasker/PageSort.html +247 -0
  333. data/docs/Tasker/PermanentError.html +518 -0
  334. data/docs/Tasker/ProceduralError.html +147 -0
  335. data/docs/Tasker/Queries/AllAnnotationTypes.html +217 -0
  336. data/docs/Tasker/Queries/AllTasks.html +221 -0
  337. data/docs/Tasker/Queries/BaseQuery.html +128 -0
  338. data/docs/Tasker/Queries/Helpers.html +187 -0
  339. data/docs/Tasker/Queries/OneStep.html +225 -0
  340. data/docs/Tasker/Queries/OneTask.html +217 -0
  341. data/docs/Tasker/Queries/TasksByAnnotation.html +231 -0
  342. data/docs/Tasker/Queries/TasksByStatus.html +233 -0
  343. data/docs/Tasker/Queries.html +119 -0
  344. data/docs/Tasker/Railtie.html +124 -0
  345. data/docs/Tasker/Registry/BaseRegistry.html +1690 -0
  346. data/docs/Tasker/Registry/EventPublisher.html +667 -0
  347. data/docs/Tasker/Registry/InterfaceValidator.html +569 -0
  348. data/docs/Tasker/Registry/RegistrationError.html +132 -0
  349. data/docs/Tasker/Registry/RegistryError.html +139 -0
  350. data/docs/Tasker/Registry/StatisticsCollector.html +841 -0
  351. data/docs/Tasker/Registry/SubscriberRegistry.html +1504 -0
  352. data/docs/Tasker/Registry/ValidationError.html +132 -0
  353. data/docs/Tasker/Registry.html +119 -0
  354. data/docs/Tasker/RetryableError.html +515 -0
  355. data/docs/Tasker/StateMachine/Compatibility.html +282 -0
  356. data/docs/Tasker/StateMachine/InvalidStateTransition.html +135 -0
  357. data/docs/Tasker/StateMachine/StepStateMachine/StandardizedPayloadBuilder.html +260 -0
  358. data/docs/Tasker/StateMachine/StepStateMachine.html +2215 -0
  359. data/docs/Tasker/StateMachine/TaskStateMachine.html +734 -0
  360. data/docs/Tasker/StateMachine.html +602 -0
  361. data/docs/Tasker/StepDagRelationship.html +657 -0
  362. data/docs/Tasker/StepHandler/Api/Config.html +1091 -0
  363. data/docs/Tasker/StepHandler/Api.html +884 -0
  364. data/docs/Tasker/StepHandler/AutomaticEventPublishing.html +321 -0
  365. data/docs/Tasker/StepHandler/Base.html +970 -0
  366. data/docs/Tasker/StepHandler.html +119 -0
  367. data/docs/Tasker/StepReadinessStatus.html +836 -0
  368. data/docs/Tasker/Task.html +2575 -0
  369. data/docs/Tasker/TaskAnnotation.html +137 -0
  370. data/docs/Tasker/TaskAnnotationSerializer.html +124 -0
  371. data/docs/Tasker/TaskBuilder/StepNameValidator.html +264 -0
  372. data/docs/Tasker/TaskBuilder/StepTemplateDefiner.html +264 -0
  373. data/docs/Tasker/TaskBuilder.html +764 -0
  374. data/docs/Tasker/TaskDiagram/StepToStepEdgeBuilder.html +260 -0
  375. data/docs/Tasker/TaskDiagram/TaskToRootStepEdgeBuilder.html +290 -0
  376. data/docs/Tasker/TaskDiagram.html +548 -0
  377. data/docs/Tasker/TaskDiagramsController.html +240 -0
  378. data/docs/Tasker/TaskExecutionContext.html +469 -0
  379. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/ClassBasedEventRegistrar.html +238 -0
  380. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/YamlEventRegistrar.html +254 -0
  381. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner.html +988 -0
  382. data/docs/Tasker/TaskHandler/ClassMethods.html +357 -0
  383. data/docs/Tasker/TaskHandler/InstanceMethods.html +1396 -0
  384. data/docs/Tasker/TaskHandler/StepGroup.html +1748 -0
  385. data/docs/Tasker/TaskHandler.html +271 -0
  386. data/docs/Tasker/TaskNamespace.html +312 -0
  387. data/docs/Tasker/TaskRunnerJob.html +406 -0
  388. data/docs/Tasker/TaskSerializer.html +474 -0
  389. data/docs/Tasker/TaskTransition.html +1517 -0
  390. data/docs/Tasker/TaskWorkflowSummary.html +988 -0
  391. data/docs/Tasker/TaskerRailsSchema/InvalidObjectTypeError.html +132 -0
  392. data/docs/Tasker/TaskerRailsSchema/TypeResolutionError.html +139 -0
  393. data/docs/Tasker/TaskerRailsSchema/UnknownInterfaceError.html +132 -0
  394. data/docs/Tasker/TaskerRailsSchema.html +384 -0
  395. data/docs/Tasker/TasksController.html +595 -0
  396. data/docs/Tasker/Telemetry/EventMapping.html +1307 -0
  397. data/docs/Tasker/Telemetry/EventRouter.html +2178 -0
  398. data/docs/Tasker/Telemetry/Events/ExportEvents.html +246 -0
  399. data/docs/Tasker/Telemetry/Events.html +115 -0
  400. data/docs/Tasker/Telemetry/ExportCoordinator/DistributedLockTimeoutError.html +135 -0
  401. data/docs/Tasker/Telemetry/ExportCoordinator.html +2137 -0
  402. data/docs/Tasker/Telemetry/IntelligentCacheManager.html +1083 -0
  403. data/docs/Tasker/Telemetry/LogBackend.html +1088 -0
  404. data/docs/Tasker/Telemetry/MetricTypes/Counter.html +1054 -0
  405. data/docs/Tasker/Telemetry/MetricTypes/Gauge.html +1270 -0
  406. data/docs/Tasker/Telemetry/MetricTypes/Histogram.html +1492 -0
  407. data/docs/Tasker/Telemetry/MetricTypes.html +153 -0
  408. data/docs/Tasker/Telemetry/MetricsBackend.html +2510 -0
  409. data/docs/Tasker/Telemetry/MetricsExportService.html +578 -0
  410. data/docs/Tasker/Telemetry/PluginRegistry.html +1774 -0
  411. data/docs/Tasker/Telemetry/Plugins/BaseExporter.html +1835 -0
  412. data/docs/Tasker/Telemetry/Plugins/CsvExporter.html +768 -0
  413. data/docs/Tasker/Telemetry/Plugins/JsonExporter.html +747 -0
  414. data/docs/Tasker/Telemetry/Plugins.html +117 -0
  415. data/docs/Tasker/Telemetry/PrometheusExporter.html +481 -0
  416. data/docs/Tasker/Telemetry/TraceBackend.html +891 -0
  417. data/docs/Tasker/Telemetry.html +130 -0
  418. data/docs/Tasker/Types/AuthConfig.html +886 -0
  419. data/docs/Tasker/Types/BackoffConfig.html +1063 -0
  420. data/docs/Tasker/Types/BaseConfig.html +227 -0
  421. data/docs/Tasker/Types/CacheConfig.html +1731 -0
  422. data/docs/Tasker/Types/DatabaseConfig.html +388 -0
  423. data/docs/Tasker/Types/DependencyGraph.html +526 -0
  424. data/docs/Tasker/Types/DependencyGraphConfig.html +753 -0
  425. data/docs/Tasker/Types/EngineConfig.html +1181 -0
  426. data/docs/Tasker/Types/ExecutionConfig.html +1963 -0
  427. data/docs/Tasker/Types/GraphEdge.html +517 -0
  428. data/docs/Tasker/Types/GraphMetadata.html +781 -0
  429. data/docs/Tasker/Types/GraphNode.html +694 -0
  430. data/docs/Tasker/Types/HealthConfig.html +784 -0
  431. data/docs/Tasker/Types/StepSequence.html +353 -0
  432. data/docs/Tasker/Types/StepTemplate.html +1193 -0
  433. data/docs/Tasker/Types/TaskRequest.html +1179 -0
  434. data/docs/Tasker/Types/TelemetryConfig.html +2746 -0
  435. data/docs/Tasker/Types.html +154 -0
  436. data/docs/Tasker/WorkflowStep/StepFinder.html +282 -0
  437. data/docs/Tasker/WorkflowStep.html +2724 -0
  438. data/docs/Tasker/WorkflowStepEdge.html +304 -0
  439. data/docs/Tasker/WorkflowStepSerializer.html +305 -0
  440. data/docs/Tasker/WorkflowStepTransition/TransitionDescriptionFormatter.html +282 -0
  441. data/docs/Tasker/WorkflowStepTransition.html +2201 -0
  442. data/docs/Tasker/WorkflowStepsController.html +462 -0
  443. data/docs/Tasker.html +452 -0
  444. data/docs/VISION.md +584 -0
  445. data/docs/WHY.md +21 -0
  446. data/docs/_index.html +2375 -0
  447. data/docs/class_list.html +54 -0
  448. data/docs/css/common.css +1 -0
  449. data/docs/css/full_list.css +58 -0
  450. data/docs/css/style.css +503 -0
  451. data/docs/events/migration_plan_outcomes.md +80 -0
  452. data/docs/file.README.html +541 -0
  453. data/docs/file_list.html +59 -0
  454. data/docs/frames.html +22 -0
  455. data/docs/index.html +541 -0
  456. data/docs/js/app.js +344 -0
  457. data/docs/js/full_list.js +242 -0
  458. data/docs/js/jquery.js +4 -0
  459. data/docs/method_list.html +9182 -0
  460. data/docs/top-level-namespace.html +110 -0
  461. data/lib/generators/tasker/authenticator_generator.rb +301 -0
  462. data/lib/generators/tasker/authorization_coordinator_generator.rb +139 -0
  463. data/lib/generators/tasker/events_generator.rb +91 -0
  464. data/lib/generators/tasker/subscriber_generator.rb +107 -0
  465. data/lib/generators/tasker/task_handler_generator.rb +138 -0
  466. data/lib/generators/tasker/templates/api_token_authenticator.rb.erb +113 -0
  467. data/lib/generators/tasker/templates/api_token_authenticator_spec.rb.erb +144 -0
  468. data/lib/generators/tasker/templates/authorization_coordinator.rb.erb +95 -0
  469. data/lib/generators/tasker/templates/authorization_coordinator_spec.rb.erb +142 -0
  470. data/lib/generators/tasker/templates/custom_authenticator.rb.erb +108 -0
  471. data/lib/generators/tasker/templates/custom_authenticator_spec.rb.erb +162 -0
  472. data/lib/generators/tasker/templates/custom_events.yml.erb +62 -0
  473. data/lib/generators/tasker/templates/custom_subscriber.rb.erb +72 -0
  474. data/lib/generators/tasker/templates/devise_authenticator.rb.erb +101 -0
  475. data/lib/generators/tasker/templates/devise_authenticator_spec.rb.erb +126 -0
  476. data/lib/generators/tasker/templates/initialize.rb.erb +202 -0
  477. data/lib/generators/tasker/templates/jwt_authenticator.rb.erb +144 -0
  478. data/lib/generators/tasker/templates/jwt_authenticator_spec.rb.erb +298 -0
  479. data/lib/generators/tasker/templates/metrics_subscriber.rb.erb +258 -0
  480. data/lib/generators/tasker/templates/metrics_subscriber_spec.rb.erb +308 -0
  481. data/lib/generators/tasker/templates/omniauth_authenticator.rb.erb +135 -0
  482. data/lib/generators/tasker/templates/omniauth_authenticator_spec.rb.erb +196 -0
  483. data/lib/generators/tasker/templates/opentelemetry_initializer.rb +52 -0
  484. data/lib/generators/tasker/templates/subscriber.rb.erb +64 -0
  485. data/lib/generators/tasker/templates/subscriber_spec.rb.erb +80 -0
  486. data/lib/generators/tasker/templates/task_config.yaml.erb +117 -0
  487. data/lib/generators/tasker/templates/task_handler.rb.erb +59 -0
  488. data/lib/generators/tasker/templates/task_handler_spec.rb.erb +159 -0
  489. data/lib/tasker/analysis/runtime_graph_analyzer.rb +1168 -0
  490. data/lib/tasker/analysis/template_graph_analyzer.rb +328 -0
  491. data/lib/tasker/authentication/coordinator.rb +78 -0
  492. data/lib/tasker/authentication/errors.rb +9 -0
  493. data/lib/tasker/authentication/interface.rb +36 -0
  494. data/lib/tasker/authentication/none_authenticator.rb +26 -0
  495. data/lib/tasker/authorization/base_coordinator.rb +112 -0
  496. data/lib/tasker/authorization/errors.rb +26 -0
  497. data/lib/tasker/authorization/resource_constants.rb +74 -0
  498. data/lib/tasker/authorization/resource_registry.rb +143 -0
  499. data/lib/tasker/authorization.rb +75 -0
  500. data/lib/tasker/cache_capabilities.rb +131 -0
  501. data/lib/tasker/cache_strategy.rb +469 -0
  502. data/lib/tasker/concerns/authenticatable.rb +41 -0
  503. data/lib/tasker/concerns/authorizable.rb +204 -0
  504. data/lib/tasker/concerns/controller_authorizable.rb +124 -0
  505. data/lib/tasker/concerns/event_publisher.rb +716 -0
  506. data/lib/tasker/concerns/idempotent_state_transitions.rb +128 -0
  507. data/lib/tasker/concerns/state_machine_base.rb +218 -0
  508. data/lib/tasker/concerns/structured_logging.rb +387 -0
  509. data/lib/tasker/configuration.rb +325 -0
  510. data/lib/tasker/constants/event_definitions.rb +147 -0
  511. data/lib/tasker/constants/registry_events.rb +54 -0
  512. data/lib/tasker/constants.rb +417 -0
  513. data/lib/tasker/engine.rb +90 -0
  514. data/lib/tasker/errors.rb +90 -0
  515. data/lib/tasker/events/catalog.rb +432 -0
  516. data/lib/tasker/events/custom_registry.rb +175 -0
  517. data/lib/tasker/events/definition_loader.rb +199 -0
  518. data/lib/tasker/events/event_payload_builder.rb +461 -0
  519. data/lib/tasker/events/publisher.rb +149 -0
  520. data/lib/tasker/events/subscribers/base_subscriber.rb +601 -0
  521. data/lib/tasker/events/subscribers/metrics_subscriber.rb +120 -0
  522. data/lib/tasker/events/subscribers/telemetry_subscriber.rb +462 -0
  523. data/lib/tasker/events/subscription_loader.rb +161 -0
  524. data/lib/tasker/events.rb +37 -0
  525. data/lib/tasker/functions/function_based_analytics_metrics.rb +103 -0
  526. data/lib/tasker/functions/function_based_dependency_levels.rb +54 -0
  527. data/lib/tasker/functions/function_based_slowest_steps.rb +84 -0
  528. data/lib/tasker/functions/function_based_slowest_tasks.rb +84 -0
  529. data/lib/tasker/functions/function_based_step_readiness_status.rb +183 -0
  530. data/lib/tasker/functions/function_based_system_health_counts.rb +94 -0
  531. data/lib/tasker/functions/function_based_task_execution_context.rb +148 -0
  532. data/lib/tasker/functions/function_wrapper.rb +42 -0
  533. data/lib/tasker/functions.rb +12 -0
  534. data/lib/tasker/handler_factory.rb +322 -0
  535. data/lib/tasker/health/readiness_checker.rb +186 -0
  536. data/lib/tasker/health/status_checker.rb +203 -0
  537. data/lib/tasker/identity_strategy.rb +38 -0
  538. data/lib/tasker/logging/correlation_id_generator.rb +120 -0
  539. data/lib/tasker/orchestration/backoff_calculator.rb +184 -0
  540. data/lib/tasker/orchestration/connection_builder.rb +122 -0
  541. data/lib/tasker/orchestration/connection_pool_intelligence.rb +177 -0
  542. data/lib/tasker/orchestration/coordinator.rb +119 -0
  543. data/lib/tasker/orchestration/future_state_analyzer.rb +137 -0
  544. data/lib/tasker/orchestration/plugin_integration.rb +124 -0
  545. data/lib/tasker/orchestration/response_processor.rb +168 -0
  546. data/lib/tasker/orchestration/retry_header_parser.rb +78 -0
  547. data/lib/tasker/orchestration/step_executor.rb +941 -0
  548. data/lib/tasker/orchestration/step_sequence_factory.rb +67 -0
  549. data/lib/tasker/orchestration/task_finalizer.rb +564 -0
  550. data/lib/tasker/orchestration/task_initializer.rb +140 -0
  551. data/lib/tasker/orchestration/task_reenqueuer.rb +71 -0
  552. data/lib/tasker/orchestration/viable_step_discovery.rb +65 -0
  553. data/lib/tasker/orchestration/workflow_coordinator.rb +294 -0
  554. data/lib/tasker/orchestration.rb +45 -0
  555. data/lib/tasker/railtie.rb +9 -0
  556. data/lib/tasker/registry/base_registry.rb +177 -0
  557. data/lib/tasker/registry/event_publisher.rb +91 -0
  558. data/lib/tasker/registry/interface_validator.rb +140 -0
  559. data/lib/tasker/registry/statistics_collector.rb +381 -0
  560. data/lib/tasker/registry/subscriber_registry.rb +285 -0
  561. data/lib/tasker/registry.rb +22 -0
  562. data/lib/tasker/state_machine/step_state_machine.rb +508 -0
  563. data/lib/tasker/state_machine/task_state_machine.rb +192 -0
  564. data/lib/tasker/state_machine.rb +83 -0
  565. data/lib/tasker/step_handler/api.rb +410 -0
  566. data/lib/tasker/step_handler/base.rb +206 -0
  567. data/lib/tasker/task_builder.rb +432 -0
  568. data/lib/tasker/task_handler/class_methods.rb +324 -0
  569. data/lib/tasker/task_handler/instance_methods.rb +293 -0
  570. data/lib/tasker/task_handler/step_group.rb +182 -0
  571. data/lib/tasker/task_handler.rb +43 -0
  572. data/lib/tasker/telemetry/event_mapping.rb +126 -0
  573. data/lib/tasker/telemetry/event_router.rb +318 -0
  574. data/lib/tasker/telemetry/events/export_events.rb +38 -0
  575. data/lib/tasker/telemetry/export_coordinator.rb +497 -0
  576. data/lib/tasker/telemetry/intelligent_cache_manager.rb +508 -0
  577. data/lib/tasker/telemetry/log_backend.rb +224 -0
  578. data/lib/tasker/telemetry/metric_types.rb +368 -0
  579. data/lib/tasker/telemetry/metrics_backend.rb +1227 -0
  580. data/lib/tasker/telemetry/metrics_export_service.rb +392 -0
  581. data/lib/tasker/telemetry/plugin_registry.rb +333 -0
  582. data/lib/tasker/telemetry/plugins/base_exporter.rb +246 -0
  583. data/lib/tasker/telemetry/plugins/csv_exporter.rb +198 -0
  584. data/lib/tasker/telemetry/plugins/json_exporter.rb +141 -0
  585. data/lib/tasker/telemetry/prometheus_exporter.rb +249 -0
  586. data/lib/tasker/telemetry/trace_backend.rb +186 -0
  587. data/lib/tasker/telemetry.rb +59 -0
  588. data/lib/tasker/types/auth_config.rb +81 -0
  589. data/lib/tasker/types/backoff_config.rb +142 -0
  590. data/lib/tasker/types/cache_config.rb +257 -0
  591. data/lib/tasker/types/database_config.rb +39 -0
  592. data/lib/tasker/types/dependency_graph.rb +225 -0
  593. data/lib/tasker/types/dependency_graph_config.rb +149 -0
  594. data/lib/tasker/types/engine_config.rb +131 -0
  595. data/lib/tasker/types/execution_config.rb +289 -0
  596. data/lib/tasker/types/health_config.rb +84 -0
  597. data/lib/tasker/types/step_sequence.rb +24 -0
  598. data/lib/tasker/types/step_template.rb +63 -0
  599. data/lib/tasker/types/task_request.rb +60 -0
  600. data/lib/tasker/types/telemetry_config.rb +273 -0
  601. data/lib/tasker/types.rb +64 -0
  602. data/lib/tasker/version.rb +7 -0
  603. data/lib/tasker.rb +82 -0
  604. data/lib/tasks/tasker_tasks.rake +302 -0
  605. metadata +958 -0
@@ -0,0 +1,270 @@
1
+ # Quick Start Guide: Your First Tasker Workflow
2
+
3
+ ## Goal: Working Workflow in 5 Minutes
4
+
5
+ This guide will get you from zero to a working Tasker application with complete workflows in **5 minutes**. We'll use our automated demo application builder to create a full-featured Rails app with real-world workflow examples, then explore how to customize and extend them.
6
+
7
+ **🚀 New in Tasker 2.5.0**: This guide leverages our enterprise-grade demo application builder with:
8
+ - **Automated Setup**: One-command installation with complete Rails application
9
+ - **Real-World Examples**: E-commerce, inventory, and customer management workflows
10
+ - **Performance Optimization**: Dynamic concurrency with configurable execution settings
11
+ - **Full Observability**: OpenTelemetry tracing and Prometheus metrics integration
12
+ - **Production Ready**: Complete with Redis, Sidekiq, and comprehensive documentation
13
+
14
+ *Why this approach?* Instead of manual setup, we'll use proven patterns from our demo builder that create production-ready applications instantly.
15
+
16
+ ## Prerequisites (1 minute)
17
+
18
+ Ensure you have:
19
+ - **Ruby 3.2+** with bundler
20
+ - **PostgreSQL** running locally
21
+ - **Basic terminal access**
22
+ - **Optional**: Redis for caching (will be configured automatically)
23
+
24
+ ## Installation & Setup (2 minutes)
25
+
26
+ ### Option 1: Automated Demo Application (Recommended)
27
+
28
+ Create a complete Tasker application with real-world workflows instantly:
29
+
30
+ ```bash
31
+ # Interactive setup with full observability stack
32
+ curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash
33
+
34
+ # Or specify your preferences (traditional Rails setup)
35
+ curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash -s -- \
36
+ --app-name my-tasker-demo \
37
+ --tasks ecommerce,inventory,customer \
38
+ --observability \
39
+ --non-interactive
40
+
41
+ # NEW: Docker-based development environment (v2.6.0)
42
+ curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash -s -- \
43
+ --app-name my-tasker-demo \
44
+ --docker \
45
+ --with-observability
46
+ ```
47
+
48
+ This creates a complete Rails application with:
49
+ - ✅ **Tasker gem** installed and configured
50
+ - ✅ **All 21 migrations** executed with database views/functions
51
+ - ✅ **3 complete workflows** (e-commerce, inventory, customer management)
52
+ - ✅ **Redis & Sidekiq** configured for background processing
53
+ - ✅ **OpenTelemetry** tracing and **Prometheus** metrics
54
+ - ✅ **Performance configuration** with execution tuning examples
55
+
56
+ **Skip to "Exploring Your Workflows"** below to start using your new application!
57
+
58
+ ### Option 2: Manual Installation (Existing Rails App)
59
+
60
+ If you have an existing Rails application:
61
+
62
+ ```bash
63
+ # Add to Gemfile
64
+ echo 'gem "tasker", git: "https://github.com/tasker-systems/tasker.git", tag: "v2.5.0"' >> Gemfile
65
+
66
+ # Install and setup
67
+ bundle install
68
+ bundle exec rails tasker:install:migrations
69
+ bundle exec rails tasker:install:database_objects # Critical step!
70
+ bundle exec rails db:migrate
71
+ bundle exec rails tasker:setup
72
+
73
+ # Mount the engine
74
+ echo 'mount Tasker::Engine, at: "/tasker"' >> config/routes.rb
75
+ ```
76
+
77
+ ## Exploring Your Workflows (2 minutes)
78
+
79
+ If you used the automated demo application builder, you now have a complete Rails application with three working workflows. Let's explore them!
80
+
81
+ ### Start Your Application
82
+
83
+ #### Traditional Rails Setup
84
+ ```bash
85
+ cd your-app-name # Use the name you chose during installation
86
+
87
+ # Start the services
88
+ bundle exec redis-server & # Background Redis
89
+ bundle exec sidekiq & # Background Sidekiq
90
+ bundle exec rails server # Rails application
91
+ ```
92
+
93
+ #### Docker Setup (if you used --docker)
94
+ ```bash
95
+ cd your-app-name # Use the name you chose during installation
96
+
97
+ # Start all services with Docker
98
+ ./bin/docker-dev up-full # Includes observability stack
99
+ # OR
100
+ ./bin/docker-dev up # Core services only
101
+
102
+ # View application logs
103
+ ./bin/docker-dev logs
104
+ ```
105
+
106
+ ### Explore the Demo Workflows
107
+
108
+ Your application includes three complete, production-ready workflows:
109
+
110
+ #### 1. **E-commerce Order Processing**
111
+ - **File**: `app/tasks/ecommerce/order_processing_handler.rb`
112
+ - **Steps**: Validate order → Process payment → Update inventory → Send confirmation
113
+ - **Features**: Retry logic, error handling, real API integration with DummyJSON
114
+
115
+ #### 2. **Inventory Management**
116
+ - **File**: `app/tasks/inventory/stock_management_handler.rb`
117
+ - **Steps**: Check stock levels → Update quantities → Generate reports → Send alerts
118
+ - **Features**: Conditional logic, parallel processing, data aggregation
119
+
120
+ #### 3. **Customer Management**
121
+ - **File**: `app/tasks/customer/profile_management_handler.rb`
122
+ - **Steps**: Validate customer → Update profile → Sync external systems → Send notifications
123
+ - **Features**: External API calls, data transformation, notification patterns
124
+
125
+ ### Test the Workflows
126
+
127
+ Access your application's interfaces:
128
+
129
+ ```bash
130
+ # Visit these URLs in your browser:
131
+ open http://localhost:3000/tasker/graphql # GraphQL API interface
132
+ open http://localhost:3000/tasker/api-docs # REST API documentation
133
+ open http://localhost:3000/tasker/metrics # Prometheus metrics endpoint
134
+ ```
135
+
136
+ #### Create and Execute a Task via GraphQL
137
+
138
+ 1. **Open GraphQL Interface**: Navigate to `http://localhost:3000/tasker/graphql`
139
+
140
+ 2. **Create an E-commerce Order Task**:
141
+ ```graphql
142
+ mutation {
143
+ createTask(input: {
144
+ taskName: "ecommerce_order_processing"
145
+ context: {
146
+ order_id: 123
147
+ customer_id: 456
148
+ items: [
149
+ { product_id: 1, quantity: 2, price: 29.99 }
150
+ { product_id: 2, quantity: 1, price: 49.99 }
151
+ ]
152
+ payment_method: "credit_card"
153
+ }
154
+ }) {
155
+ task {
156
+ taskId
157
+ currentState
158
+ workflowSteps {
159
+ name
160
+ currentState
161
+ }
162
+ }
163
+ }
164
+ }
165
+ ```
166
+
167
+ 3. **Monitor Task Progress**:
168
+ ```graphql
169
+ query {
170
+ task(taskId: "your-task-id-here") {
171
+ taskId
172
+ currentState
173
+ workflowSteps {
174
+ name
175
+ currentState
176
+ results
177
+ attempts
178
+ }
179
+ }
180
+ }
181
+ ```
182
+
183
+ ## Performance Configuration (1 minute)
184
+
185
+ Your demo application includes comprehensive execution configuration examples. Explore the performance tuning options:
186
+
187
+ ### View Current Configuration
188
+
189
+ ```ruby
190
+ # In Rails console
191
+ rails console
192
+
193
+ # Check current execution settings
194
+ config = Tasker.configuration.execution
195
+ puts "Min concurrent steps: #{config.min_concurrent_steps}"
196
+ puts "Max concurrent steps: #{config.max_concurrent_steps_limit}"
197
+ puts "Concurrency cache duration: #{config.concurrency_cache_duration} seconds"
198
+ ```
199
+
200
+ ### Environment-Specific Tuning
201
+
202
+ Your application includes configuration examples in:
203
+ - **`config/initializers/tasker.rb`**: Main configuration with execution settings
204
+ - **`config/execution_tuning_examples.rb`**: 7 environment-specific examples:
205
+ - Development: Conservative settings (2-6 concurrent steps)
206
+ - Production: High-performance (5-25 concurrent steps)
207
+ - High-Performance: Maximum throughput (10-50 concurrent steps)
208
+ - API-Heavy: Optimized for external APIs (3-8 concurrent steps)
209
+ - Testing: Minimal concurrency for reliability (1-3 concurrent steps)
210
+
211
+ ### Monitor Performance
212
+
213
+ ```bash
214
+ # View metrics in your browser
215
+ open http://localhost:3000/tasker/metrics
216
+
217
+ # Check system health
218
+ curl http://localhost:3000/tasker/health/status | jq
219
+ ```
220
+
221
+ ## Creating Custom Workflows
222
+
223
+ Want to create your own workflow? Use our proven patterns:
224
+
225
+ ### 1. Generate New Workflow Structure
226
+
227
+ ```bash
228
+ # Generate a new task handler
229
+ rails generate tasker:task_handler WelcomeHandler --module_namespace WelcomeUser
230
+
231
+ # This creates:
232
+ # - app/tasks/welcome_user/welcome_handler.rb (task handler class)
233
+ # - config/tasker/tasks/welcome_user/welcome_handler.yaml (workflow configuration)
234
+ # - spec/tasks/welcome_user/welcome_handler_spec.rb (test file)
235
+ ```
236
+
237
+ ### 2. Configure Your Workflow
238
+
239
+ Edit `config/tasker/tasks/welcome_user/welcome_handler.yaml`:
240
+
241
+ ```yaml
242
+ ---
243
+ name: welcome_user
244
+ module_namespace: WelcomeUser
245
+ task_handler_class: WelcomeHandler
246
+
247
+ schema:
248
+ type: object
249
+ required:
250
+ - user_id
251
+ properties:
252
+ user_id:
253
+ type: integer
254
+
255
+ step_templates:
256
+ - name: validate_user
257
+ description: Ensure user exists and is valid for welcome email
258
+ handler_class: WelcomeUser::StepHandler::ValidateUserHandler
259
+
260
+ - name: generate_content
261
+ description: Generate personalized welcome email content
262
+ depends_on_step: validate_user
263
+ handler_class: WelcomeUser::StepHandler::GenerateContentHandler
264
+
265
+ - name: send_email
266
+ description: Send the welcome email to the user
267
+ depends_on_step: generate_content
268
+ handler_class: WelcomeUser::StepHandler::SendEmailHandler
269
+ default_retryable: true
270
+ default_retry_limit: 3
@@ -0,0 +1,373 @@
1
+ # Registry System Architecture
2
+
3
+ ## Overview
4
+
5
+ Tasker features enterprise-grade registry systems that provide thread-safe operations, comprehensive validation, structured logging, and event integration. All registry systems have been modernized to use `Concurrent::Hash` storage and unified patterns.
6
+
7
+ ## Registry Systems
8
+
9
+ ### HandlerFactory Registry
10
+
11
+ The core registry for task handler management with namespace and version support.
12
+
13
+ **Features**:
14
+ - **Thread-Safe Operations**: `Concurrent::Hash` storage eliminates race conditions
15
+ - **3-Level Registry**: `namespace_name → handler_name → version → handler_class`
16
+ - **Interface Validation**: Fail-fast validation with detailed error messages
17
+ - **Conflict Resolution**: `replace: true` parameter for graceful updates
18
+ - **Structured Logging**: Every operation logged with correlation IDs
19
+
20
+ **Usage**:
21
+ ```ruby
22
+ # Thread-safe registration
23
+ Tasker::HandlerFactory.instance.register(
24
+ 'payment_processor',
25
+ PaymentHandler,
26
+ namespace_name: 'payments',
27
+ version: '2.1.0',
28
+ replace: true # Handles conflicts gracefully
29
+ )
30
+
31
+ # Thread-safe retrieval
32
+ handler = Tasker::HandlerFactory.instance.get(
33
+ 'payment_processor',
34
+ namespace_name: 'payments',
35
+ version: '2.1.0'
36
+ )
37
+
38
+ # List handlers in namespace
39
+ handlers = Tasker::HandlerFactory.instance.list_handlers(namespace: 'payments')
40
+
41
+ # Registry statistics
42
+ stats = Tasker::HandlerFactory.instance.stats
43
+ # => {
44
+ # total_handlers: 45,
45
+ # namespaces: ["payments", "inventory", "notifications"],
46
+ # versions: ["1.0.0", "1.1.0", "2.0.0"],
47
+ # thread_safe: true,
48
+ # last_registration: "2024-01-15T10:30:45Z"
49
+ # }
50
+ ```
51
+
52
+ ### PluginRegistry System
53
+
54
+ Format-based plugin discovery with auto-discovery capabilities for telemetry exporters.
55
+
56
+ **Features**:
57
+ - **Format-Based Discovery**: Register plugins by export format (`:json`, `:csv`, `:prometheus`)
58
+ - **Auto-Discovery**: Automatic plugin detection and registration
59
+ - **Thread-Safe Operations**: Mutex-synchronized operations
60
+ - **Interface Validation**: Method arity checking for plugin interfaces
61
+ - **Event Integration**: Plugin registration triggers event system
62
+
63
+ **Usage**:
64
+ ```ruby
65
+ # Register custom exporter
66
+ Tasker::Telemetry::PluginRegistry.register(
67
+ 'custom_json_exporter',
68
+ CustomJsonExporter,
69
+ format: :json,
70
+ replace: true
71
+ )
72
+
73
+ # Find plugins by format
74
+ json_exporters = Tasker::Telemetry::PluginRegistry.find_by(format: :json)
75
+
76
+ # Auto-discovery
77
+ Tasker::Telemetry::PluginRegistry.auto_discover_plugins
78
+
79
+ # Registry statistics
80
+ stats = Tasker::Telemetry::PluginRegistry.stats
81
+ # => {
82
+ # total_plugins: 12,
83
+ # formats: [:json, :csv, :prometheus],
84
+ # auto_discovery_enabled: true,
85
+ # thread_safe: true
86
+ # }
87
+ ```
88
+
89
+ ### SubscriberRegistry System
90
+
91
+ Centralized event subscriber management with comprehensive validation.
92
+
93
+ **Features**:
94
+ - **Centralized Management**: Single registry for all event subscribers
95
+ - **Event Validation**: Validates subscriber methods match event names
96
+ - **Thread-Safe Operations**: Concurrent access protection
97
+ - **Health Monitoring**: Built-in health checks and statistics
98
+ - **Auto-Registration**: Automatic registration during class loading
99
+
100
+ **Usage**:
101
+ ```ruby
102
+ # Register event subscriber
103
+ Tasker::Registry::SubscriberRegistry.register(
104
+ 'notification_subscriber',
105
+ NotificationSubscriber,
106
+ events: ['task.completed', 'task.failed']
107
+ )
108
+
109
+ # List subscribers for event
110
+ subscribers = Tasker::Registry::SubscriberRegistry.find_by_event('task.completed')
111
+
112
+ # Registry health check
113
+ health = Tasker::Registry::SubscriberRegistry.health_check
114
+ # => { status: "healthy", subscriber_count: 15, events_covered: 45 }
115
+ ```
116
+
117
+ ## Structured Logging
118
+
119
+ Every registry operation includes comprehensive structured logging with correlation IDs:
120
+
121
+ ```json
122
+ {
123
+ "timestamp": "2024-01-15T10:30:45Z",
124
+ "correlation_id": "tsk_abc123_def456",
125
+ "component": "handler_factory",
126
+ "message": "Registry item registered",
127
+ "environment": "production",
128
+ "tasker_version": "2.4.1",
129
+ "process_id": 12345,
130
+ "thread_id": "abc123",
131
+ "entity_type": "task_handler",
132
+ "entity_id": "payments/payment_processor/2.1.0",
133
+ "entity_class": "PaymentHandler",
134
+ "registry_name": "handler_factory",
135
+ "options": {
136
+ "namespace_name": "payments",
137
+ "version": "2.1.0",
138
+ "replace": true
139
+ },
140
+ "event_type": "registered"
141
+ }
142
+ ```
143
+
144
+ ## Interface Validation
145
+
146
+ All registries include fail-fast validation with detailed error messages:
147
+
148
+ ```ruby
149
+ # Example validation error
150
+ begin
151
+ Tasker::HandlerFactory.instance.register('invalid_handler', InvalidClass)
152
+ rescue Tasker::Registry::ValidationError => e
153
+ puts e.message
154
+ # => "Handler validation failed: InvalidClass does not implement required method 'process'.
155
+ # Required methods: [process, initialize_task!].
156
+ # Available methods: [initialize, new].
157
+ # Suggestion: Inherit from Tasker::TaskHandler::Base"
158
+ end
159
+ ```
160
+
161
+ ## Event Integration
162
+
163
+ Registry operations are fully integrated with Tasker's 56-event system:
164
+
165
+ **Registry Events**:
166
+ - `registry.handler_registered` - Handler registration events
167
+ - `registry.plugin_registered` - Plugin registration events
168
+ - `registry.subscriber_registered` - Subscriber registration events
169
+ - `registry.validation_failed` - Validation failure events
170
+ - `registry.conflict_resolved` - Conflict resolution events
171
+
172
+ **Event Payloads**:
173
+ ```ruby
174
+ # Handler registration event
175
+ {
176
+ registry_type: 'handler_factory',
177
+ entity_id: 'payments/payment_processor/2.1.0',
178
+ entity_class: 'PaymentHandler',
179
+ namespace_name: 'payments',
180
+ version: '2.1.0',
181
+ options: { replace: true },
182
+ correlation_id: 'tsk_abc123'
183
+ }
184
+ ```
185
+
186
+ ## Thread Safety
187
+
188
+ All registry systems use thread-safe storage and operations:
189
+
190
+ **Storage Types**:
191
+ - **HandlerFactory**: `Concurrent::Hash` with nested concurrent structures
192
+ - **PluginRegistry**: `Concurrent::Hash` with mutex synchronization
193
+ - **SubscriberRegistry**: `Concurrent::Hash` with atomic operations
194
+
195
+ **Thread Safety Guarantees**:
196
+ - **Atomic Operations**: Registration and retrieval are atomic
197
+ - **Race Condition Prevention**: No partial state during concurrent access
198
+ - **Memory Consistency**: All threads see consistent registry state
199
+ - **Deadlock Prevention**: Proper lock ordering and timeout handling
200
+
201
+ ## Health Monitoring
202
+
203
+ Built-in health monitoring and statistics for all registries:
204
+
205
+ ```ruby
206
+ # Individual registry health
207
+ handler_health = Tasker::HandlerFactory.instance.health_check
208
+ plugin_health = Tasker::Telemetry::PluginRegistry.health_check
209
+ subscriber_health = Tasker::Registry::SubscriberRegistry.health_check
210
+
211
+ # Comprehensive registry system health
212
+ registry_health = Tasker::Registry.system_health
213
+ # => {
214
+ # status: "healthy",
215
+ # registries: {
216
+ # handler_factory: { status: "healthy", count: 45 },
217
+ # plugin_registry: { status: "healthy", count: 12 },
218
+ # subscriber_registry: { status: "healthy", count: 15 }
219
+ # },
220
+ # thread_safe: true,
221
+ # total_entities: 72
222
+ # }
223
+ ```
224
+
225
+ ## Performance Characteristics
226
+
227
+ **Registry Operation Performance**:
228
+ - **Registration**: O(1) average case with thread-safe operations
229
+ - **Retrieval**: O(1) lookup with concurrent access
230
+ - **Listing**: O(n) where n is entities in scope
231
+ - **Statistics**: O(1) with cached computation
232
+
233
+ **Memory Usage**:
234
+ - **Efficient Storage**: Minimal memory overhead per registered entity
235
+ - **Concurrent Structures**: Memory-safe concurrent access
236
+ - **Garbage Collection**: Proper cleanup and memory management
237
+
238
+ ## Best Practices
239
+
240
+ ### Registration Patterns
241
+
242
+ ```ruby
243
+ # ✅ Good: Use replace parameter for updates
244
+ Tasker::HandlerFactory.instance.register(
245
+ 'payment_processor',
246
+ PaymentHandler,
247
+ namespace_name: 'payments',
248
+ version: '2.1.0',
249
+ replace: true
250
+ )
251
+
252
+ # ❌ Avoid: Registration without conflict handling
253
+ Tasker::HandlerFactory.instance.register(
254
+ 'payment_processor',
255
+ PaymentHandler,
256
+ namespace_name: 'payments',
257
+ version: '2.1.0'
258
+ # Will raise error if already exists
259
+ )
260
+ ```
261
+
262
+ ### Error Handling
263
+
264
+ ```ruby
265
+ # ✅ Good: Handle validation errors gracefully
266
+ begin
267
+ Tasker::HandlerFactory.instance.register(name, handler_class, options)
268
+ rescue Tasker::Registry::ValidationError => e
269
+ logger.error "Handler registration failed: #{e.message}"
270
+ # Handle error appropriately
271
+ rescue Tasker::Registry::ConflictError => e
272
+ logger.warn "Handler conflict: #{e.message}"
273
+ # Decide whether to use replace: true
274
+ end
275
+ ```
276
+
277
+ ### Performance Optimization
278
+
279
+ ```ruby
280
+ # ✅ Good: Batch operations when possible
281
+ handlers = Tasker::HandlerFactory.instance.list_handlers(namespace: 'payments')
282
+ handlers.each { |name, versions| process_handler(name, versions) }
283
+
284
+ # ❌ Avoid: Individual lookups in loops
285
+ payment_handlers.each do |name|
286
+ handler = Tasker::HandlerFactory.instance.get(name, namespace_name: 'payments')
287
+ process_handler(handler)
288
+ end
289
+ ```
290
+
291
+ ## Troubleshooting
292
+
293
+ ### Common Issues
294
+
295
+ **Thread Safety Issues**:
296
+ ```ruby
297
+ # Symptom: Inconsistent registry state
298
+ # Solution: Ensure all access goes through registry APIs
299
+ # ❌ Don't access internal storage directly
300
+ # ✅ Use registry methods for all operations
301
+ ```
302
+
303
+ **Validation Failures**:
304
+ ```ruby
305
+ # Symptom: Registration fails with validation error
306
+ # Solution: Ensure classes implement required interfaces
307
+ class MyHandler < Tasker::TaskHandler::Base
308
+ # Implements required methods automatically
309
+ end
310
+ ```
311
+
312
+ **Memory Leaks**:
313
+ ```ruby
314
+ # Symptom: Growing memory usage
315
+ # Solution: Use proper cleanup in test environments
316
+ after(:each) do
317
+ Tasker::HandlerFactory.instance.clear_test_handlers!
318
+ end
319
+ ```
320
+
321
+ ### Debugging Registry State
322
+
323
+ ```ruby
324
+ # Check registry contents
325
+ puts Tasker::HandlerFactory.instance.stats.to_json
326
+
327
+ # Verify thread safety
328
+ puts Tasker::HandlerFactory.instance.health_check[:thread_safe]
329
+
330
+ # Monitor registration events
331
+ Tasker::Events.subscribe('registry.handler_registered') do |event|
332
+ puts "Handler registered: #{event[:entity_id]}"
333
+ end
334
+ ```
335
+
336
+ ## Migration Guide
337
+
338
+ ### Upgrading from Legacy Registry
339
+
340
+ If upgrading from older Tasker versions:
341
+
342
+ 1. **Update Registration Code**:
343
+ ```ruby
344
+ # Old (pre-2.3.0)
345
+ Tasker::HandlerFactory.register('handler', HandlerClass)
346
+
347
+ # New (2.3.0+)
348
+ Tasker::HandlerFactory.instance.register(
349
+ 'handler',
350
+ HandlerClass,
351
+ namespace_name: 'default',
352
+ version: '1.0.0'
353
+ )
354
+ ```
355
+
356
+ 2. **Handle Thread Safety**:
357
+ ```ruby
358
+ # Old: Manual synchronization required
359
+ # New: Thread safety built-in
360
+ ```
361
+
362
+ 3. **Update Error Handling**:
363
+ ```ruby
364
+ # Old: Generic exceptions
365
+ # New: Specific validation and conflict errors
366
+ ```
367
+
368
+ ## Related Documentation
369
+
370
+ - [Developer Guide](DEVELOPER_GUIDE.md) - HandlerFactory usage patterns
371
+ - [Event System](EVENT_SYSTEM.md) - Registry event integration
372
+ - [Telemetry](TELEMETRY.md) - Plugin registry usage
373
+ - [Health Monitoring](HEALTH.md) - Registry health endpoints