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,1774 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Class: Tasker::Telemetry::PluginRegistry
8
+
9
+ &mdash; Documentation by YARD 0.9.37
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../../css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="../../css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "Tasker::Telemetry::PluginRegistry";
19
+ relpath = '../../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../../_index.html">Index (P)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../../Tasker.html" title="Tasker (module)">Tasker</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Telemetry.html" title="Tasker::Telemetry (module)">Telemetry</a></span></span>
41
+ &raquo;
42
+ <span class="title">PluginRegistry</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Class: Tasker::Telemetry::PluginRegistry
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+ <dl>
70
+ <dt>Inherits:</dt>
71
+ <dd>
72
+ <span class="inheritName"><span class='object_link'><a href="../Registry/BaseRegistry.html" title="Tasker::Registry::BaseRegistry (class)">Registry::BaseRegistry</a></span></span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next"><span class='object_link'><a href="../Registry/BaseRegistry.html" title="Tasker::Registry::BaseRegistry (class)">Registry::BaseRegistry</a></span></li>
78
+
79
+ <li class="next">Tasker::Telemetry::PluginRegistry</li>
80
+
81
+ </ul>
82
+ <a href="#" class="inheritanceTree">show all</a>
83
+
84
+ </dd>
85
+ </dl>
86
+
87
+
88
+
89
+
90
+
91
+
92
+ <dl>
93
+ <dt>Includes:</dt>
94
+ <dd>Singleton</dd>
95
+ </dl>
96
+
97
+
98
+
99
+
100
+
101
+
102
+ <dl>
103
+ <dt>Defined in:</dt>
104
+ <dd>lib/tasker/telemetry/plugin_registry.rb</dd>
105
+ </dl>
106
+
107
+ </div>
108
+
109
+ <h2>Overview</h2><div class="docstring">
110
+ <div class="discussion">
111
+
112
+ <p>Registry for managing export plugins</p>
113
+
114
+ <p>Provides centralized management of export plugins with discovery, registration, and format-based lookup capabilities. Now modernized with BaseRegistry patterns for consistency across all registry systems.</p>
115
+
116
+
117
+ </div>
118
+ </div>
119
+ <div class="tags">
120
+
121
+ <div class="examples">
122
+ <h4 class="tag_title">Examples:</h4>
123
+
124
+
125
+ <h5 class="example_title"><div class='inline'>
126
+ <p>Register a plugin</p>
127
+ </div></h5>
128
+
129
+ <pre class="example code"><code><span class='id identifier rubyid_registry'>registry</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Telemetry.html" title="Tasker::Telemetry (module)">Telemetry</a></span></span><span class='op'>::</span><span class='const'>PluginRegistry</span><span class='period'>.</span><span class='id identifier rubyid_instance'>instance</span>
130
+ <span class='id identifier rubyid_registry'>registry</span><span class='period'>.</span><span class='id identifier rubyid_register'>register</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>my_exporter</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'>MyExporter</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='rparen'>)</span></code></pre>
131
+
132
+
133
+ <h5 class="example_title"><div class='inline'>
134
+ <p>Find plugins by format</p>
135
+ </div></h5>
136
+
137
+ <pre class="example code"><code><span class='id identifier rubyid_json_plugins'>json_plugins</span> <span class='op'>=</span> <span class='id identifier rubyid_registry'>registry</span><span class='period'>.</span><span class='id identifier rubyid_find_by_format'>find_by_format</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>json</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
138
+ <span class='id identifier rubyid_csv_plugins'>csv_plugins</span> <span class='op'>=</span> <span class='id identifier rubyid_registry'>registry</span><span class='period'>.</span><span class='id identifier rubyid_find_by_format'>find_by_format</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>csv</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span></code></pre>
139
+
140
+
141
+ <h5 class="example_title"><div class='inline'>
142
+ <p>Auto-discover plugins</p>
143
+ </div></h5>
144
+
145
+ <pre class="example code"><code><span class='id identifier rubyid_registry'>registry</span><span class='period'>.</span><span class='id identifier rubyid_auto_discover_plugins'>auto_discover_plugins</span></code></pre>
146
+
147
+ </div>
148
+
149
+
150
+ </div>
151
+
152
+
153
+ <h2>Constant Summary</h2>
154
+
155
+ <h3 class="inherited">Constants included
156
+ from <span class='object_link'><a href="../Concerns/StructuredLogging.html" title="Tasker::Concerns::StructuredLogging (module)">Concerns::StructuredLogging</a></span></h3>
157
+ <p class="inherited"><span class='object_link'><a href="../Concerns/StructuredLogging.html#CORRELATION_ID_KEY-constant" title="Tasker::Concerns::StructuredLogging::CORRELATION_ID_KEY (constant)">Concerns::StructuredLogging::CORRELATION_ID_KEY</a></span></p>
158
+
159
+
160
+
161
+
162
+
163
+
164
+ <h2>
165
+ Instance Method Summary
166
+ <small><a href="#" class="summary_toggle">collapse</a></small>
167
+ </h2>
168
+
169
+ <ul class="summary">
170
+
171
+ <li class="public ">
172
+ <span class="summary_signature">
173
+
174
+ <a href="#all_items-instance_method" title="#all_items (instance method)">#<strong>all_items</strong> &#x21d2; Hash </a>
175
+
176
+
177
+
178
+ </span>
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+ <span class="summary_desc"><div class='inline'>
189
+ <p>Get all registered plugins (required by BaseRegistry).</p>
190
+ </div></span>
191
+
192
+ </li>
193
+
194
+
195
+ <li class="public ">
196
+ <span class="summary_signature">
197
+
198
+ <a href="#all_plugins-instance_method" title="#all_plugins (instance method)">#<strong>all_plugins</strong> &#x21d2; Hash </a>
199
+
200
+
201
+
202
+ </span>
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+ <span class="summary_desc"><div class='inline'>
213
+ <p>Get all registered plugins.</p>
214
+ </div></span>
215
+
216
+ </li>
217
+
218
+
219
+ <li class="public ">
220
+ <span class="summary_signature">
221
+
222
+ <a href="#auto_discover_plugins-instance_method" title="#auto_discover_plugins (instance method)">#<strong>auto_discover_plugins</strong>(directory = nil) &#x21d2; Integer </a>
223
+
224
+
225
+
226
+ </span>
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+ <span class="summary_desc"><div class='inline'>
237
+ <p>Auto-discover plugins in the plugins directory.</p>
238
+ </div></span>
239
+
240
+ </li>
241
+
242
+
243
+ <li class="public ">
244
+ <span class="summary_signature">
245
+
246
+ <a href="#clear!-instance_method" title="#clear! (instance method)">#<strong>clear!</strong> &#x21d2; Boolean </a>
247
+
248
+
249
+
250
+ </span>
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+ <span class="summary_desc"><div class='inline'>
261
+ <p>Clear all registered plugins (required by BaseRegistry).</p>
262
+ </div></span>
263
+
264
+ </li>
265
+
266
+
267
+ <li class="public ">
268
+ <span class="summary_signature">
269
+
270
+ <a href="#clear_all!-instance_method" title="#clear_all! (instance method)">#<strong>clear_all!</strong> &#x21d2; Boolean </a>
271
+
272
+
273
+
274
+ </span>
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+ <span class="summary_desc"><div class='inline'>
285
+ <p>Legacy method for backward compatibility.</p>
286
+ </div></span>
287
+
288
+ </li>
289
+
290
+
291
+ <li class="public ">
292
+ <span class="summary_signature">
293
+
294
+ <a href="#find_by-instance_method" title="#find_by (instance method)">#<strong>find_by</strong>(format:) &#x21d2; Array&lt;Object&gt; </a>
295
+
296
+
297
+
298
+ </span>
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+ <span class="summary_desc"><div class='inline'>
309
+ <p>Find plugins by criteria (supports keyword arguments for test compatibility).</p>
310
+ </div></span>
311
+
312
+ </li>
313
+
314
+
315
+ <li class="public ">
316
+ <span class="summary_signature">
317
+
318
+ <a href="#find_by_format-instance_method" title="#find_by_format (instance method)">#<strong>find_by_format</strong>(format) &#x21d2; Array&lt;Object&gt; </a>
319
+
320
+
321
+
322
+ </span>
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+ <span class="summary_desc"><div class='inline'>
333
+ <p>Find plugins that support a specific format.</p>
334
+ </div></span>
335
+
336
+ </li>
337
+
338
+
339
+ <li class="public ">
340
+ <span class="summary_signature">
341
+
342
+ <a href="#get_plugin-instance_method" title="#get_plugin (instance method)">#<strong>get_plugin</strong>(name) &#x21d2; Object<sup>?</sup> </a>
343
+
344
+
345
+
346
+ </span>
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+ <span class="summary_desc"><div class='inline'>
357
+ <p>Get plugin by name.</p>
358
+ </div></span>
359
+
360
+ </li>
361
+
362
+
363
+ <li class="public ">
364
+ <span class="summary_signature">
365
+
366
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong> &#x21d2; PluginRegistry </a>
367
+
368
+
369
+
370
+ </span>
371
+
372
+
373
+ <span class="note title constructor">constructor</span>
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+ <span class="summary_desc"><div class='inline'>
383
+ <p>A new instance of PluginRegistry.</p>
384
+ </div></span>
385
+
386
+ </li>
387
+
388
+
389
+ <li class="public ">
390
+ <span class="summary_signature">
391
+
392
+ <a href="#register-instance_method" title="#register (instance method)">#<strong>register</strong>(name, plugin, replace: false, **options) &#x21d2; Boolean </a>
393
+
394
+
395
+
396
+ </span>
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+ <span class="summary_desc"><div class='inline'>
407
+ <p>Register a plugin.</p>
408
+ </div></span>
409
+
410
+ </li>
411
+
412
+
413
+ <li class="public ">
414
+ <span class="summary_signature">
415
+
416
+ <a href="#stats-instance_method" title="#stats (instance method)">#<strong>stats</strong> &#x21d2; Hash </a>
417
+
418
+
419
+
420
+ </span>
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+ <span class="summary_desc"><div class='inline'>
431
+ <p>Get comprehensive registry statistics.</p>
432
+ </div></span>
433
+
434
+ </li>
435
+
436
+
437
+ <li class="public ">
438
+ <span class="summary_signature">
439
+
440
+ <a href="#supported_formats-instance_method" title="#supported_formats (instance method)">#<strong>supported_formats</strong> &#x21d2; Array&lt;String&gt; </a>
441
+
442
+
443
+
444
+ </span>
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+ <span class="summary_desc"><div class='inline'>
455
+ <p>Get supported formats across all plugins.</p>
456
+ </div></span>
457
+
458
+ </li>
459
+
460
+
461
+ <li class="public ">
462
+ <span class="summary_signature">
463
+
464
+ <a href="#supports_format%3F-instance_method" title="#supports_format? (instance method)">#<strong>supports_format?</strong>(format) &#x21d2; Boolean </a>
465
+
466
+
467
+
468
+ </span>
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+ <span class="summary_desc"><div class='inline'>
479
+ <p>Check if a format is supported by any plugin.</p>
480
+ </div></span>
481
+
482
+ </li>
483
+
484
+
485
+ <li class="public ">
486
+ <span class="summary_signature">
487
+
488
+ <a href="#unregister-instance_method" title="#unregister (instance method)">#<strong>unregister</strong>(name) &#x21d2; Boolean </a>
489
+
490
+
491
+
492
+ </span>
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+ <span class="summary_desc"><div class='inline'>
503
+ <p>Unregister a plugin.</p>
504
+ </div></span>
505
+
506
+ </li>
507
+
508
+
509
+ </ul>
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+ <h3 class="inherited">Methods inherited from <span class='object_link'><a href="../Registry/BaseRegistry.html" title="Tasker::Registry::BaseRegistry (class)">Registry::BaseRegistry</a></span></h3>
523
+ <p class="inherited"><span class='object_link'><a href="../Registry/BaseRegistry.html#base_stats-instance_method" title="Tasker::Registry::BaseRegistry#base_stats (method)">#base_stats</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#health_check-instance_method" title="Tasker::Registry::BaseRegistry#health_check (method)">#health_check</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#healthy%3F-instance_method" title="Tasker::Registry::BaseRegistry#healthy? (method)">#healthy?</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#log_registration-instance_method" title="Tasker::Registry::BaseRegistry#log_registration (method)">#log_registration</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#log_registry_error-instance_method" title="Tasker::Registry::BaseRegistry#log_registry_error (method)">#log_registry_error</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#log_registry_operation-instance_method" title="Tasker::Registry::BaseRegistry#log_registry_operation (method)">#log_registry_operation</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#log_unregistration-instance_method" title="Tasker::Registry::BaseRegistry#log_unregistration (method)">#log_unregistration</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#log_validation_failure-instance_method" title="Tasker::Registry::BaseRegistry#log_validation_failure (method)">#log_validation_failure</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#thread_safe_operation-instance_method" title="Tasker::Registry::BaseRegistry#thread_safe_operation (method)">#thread_safe_operation</a></span>, <span class='object_link'><a href="../Registry/BaseRegistry.html#validate_registration_params!-instance_method" title="Tasker::Registry::BaseRegistry#validate_registration_params! (method)">#validate_registration_params!</a></span></p>
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+ <h3 class="inherited">Methods included from <span class='object_link'><a href="../Concerns/StructuredLogging.html" title="Tasker::Concerns::StructuredLogging (module)">Concerns::StructuredLogging</a></span></h3>
534
+ <p class="inherited"><span class='object_link'><a href="../Concerns/StructuredLogging.html#correlation_id-instance_method" title="Tasker::Concerns::StructuredLogging#correlation_id (method)">#correlation_id</a></span>, <span class='object_link'><a href="../Concerns/StructuredLogging.html#correlation_id=-instance_method" title="Tasker::Concerns::StructuredLogging#correlation_id= (method)">#correlation_id=</a></span>, <span class='object_link'><a href="../Concerns/StructuredLogging.html#log_exception-instance_method" title="Tasker::Concerns::StructuredLogging#log_exception (method)">#log_exception</a></span>, <span class='object_link'><a href="../Concerns/StructuredLogging.html#log_orchestration_event-instance_method" title="Tasker::Concerns::StructuredLogging#log_orchestration_event (method)">#log_orchestration_event</a></span>, <span class='object_link'><a href="../Concerns/StructuredLogging.html#log_performance_event-instance_method" title="Tasker::Concerns::StructuredLogging#log_performance_event (method)">#log_performance_event</a></span>, <span class='object_link'><a href="../Concerns/StructuredLogging.html#log_step_event-instance_method" title="Tasker::Concerns::StructuredLogging#log_step_event (method)">#log_step_event</a></span>, <span class='object_link'><a href="../Concerns/StructuredLogging.html#log_structured-instance_method" title="Tasker::Concerns::StructuredLogging#log_structured (method)">#log_structured</a></span>, <span class='object_link'><a href="../Concerns/StructuredLogging.html#log_task_event-instance_method" title="Tasker::Concerns::StructuredLogging#log_task_event (method)">#log_task_event</a></span>, <span class='object_link'><a href="../Concerns/StructuredLogging.html#with_correlation_id-instance_method" title="Tasker::Concerns::StructuredLogging#with_correlation_id (method)">#with_correlation_id</a></span></p>
535
+
536
+ <div id="constructor_details" class="method_details_list">
537
+ <h2>Constructor Details</h2>
538
+
539
+ <div class="method_details first">
540
+ <h3 class="signature first" id="initialize-instance_method">
541
+
542
+ #<strong>initialize</strong> &#x21d2; <tt><span class='object_link'><a href="" title="Tasker::Telemetry::PluginRegistry (class)">PluginRegistry</a></span></tt>
543
+
544
+
545
+
546
+
547
+
548
+ </h3><div class="docstring">
549
+ <div class="discussion">
550
+
551
+ <p>Returns a new instance of PluginRegistry.</p>
552
+
553
+
554
+ </div>
555
+ </div>
556
+ <div class="tags">
557
+
558
+
559
+ </div><table class="source_code">
560
+ <tr>
561
+ <td>
562
+ <pre class="lines">
563
+
564
+
565
+ 28
566
+ 29
567
+ 30
568
+ 31
569
+ 32
570
+ 33</pre>
571
+ </td>
572
+ <td>
573
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 28</span>
574
+
575
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span>
576
+ <span class='kw'>super</span>
577
+ <span class='ivar'>@plugins</span> <span class='op'>=</span> <span class='const'>Concurrent</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
578
+ <span class='ivar'>@formats</span> <span class='op'>=</span> <span class='const'>Concurrent</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
579
+ <span class='id identifier rubyid_log_registry_operation'>log_registry_operation</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>initialized</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>total_plugins:</span> <span class='int'>0</span><span class='comma'>,</span> <span class='label'>total_formats:</span> <span class='int'>0</span><span class='rparen'>)</span>
580
+ <span class='kw'>end</span></pre>
581
+ </td>
582
+ </tr>
583
+ </table>
584
+ </div>
585
+
586
+ </div>
587
+
588
+
589
+ <div id="instance_method_details" class="method_details_list">
590
+ <h2>Instance Method Details</h2>
591
+
592
+
593
+ <div class="method_details first">
594
+ <h3 class="signature first" id="all_items-instance_method">
595
+
596
+ #<strong>all_items</strong> &#x21d2; <tt>Hash</tt>
597
+
598
+
599
+
600
+
601
+
602
+ </h3><div class="docstring">
603
+ <div class="discussion">
604
+
605
+ <p>Get all registered plugins (required by BaseRegistry)</p>
606
+
607
+
608
+ </div>
609
+ </div>
610
+ <div class="tags">
611
+
612
+ <p class="tag_title">Returns:</p>
613
+ <ul class="return">
614
+
615
+ <li>
616
+
617
+
618
+ <span class='type'>(<tt>Hash</tt>)</span>
619
+
620
+
621
+
622
+ &mdash;
623
+ <div class='inline'>
624
+ <p>All registered plugins</p>
625
+ </div>
626
+
627
+ </li>
628
+
629
+ </ul>
630
+
631
+ </div><table class="source_code">
632
+ <tr>
633
+ <td>
634
+ <pre class="lines">
635
+
636
+
637
+ 122
638
+ 123
639
+ 124</pre>
640
+ </td>
641
+ <td>
642
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 122</span>
643
+
644
+ <span class='kw'>def</span> <span class='id identifier rubyid_all_items'>all_items</span>
645
+ <span class='id identifier rubyid_all_plugins'>all_plugins</span>
646
+ <span class='kw'>end</span></pre>
647
+ </td>
648
+ </tr>
649
+ </table>
650
+ </div>
651
+
652
+ <div class="method_details ">
653
+ <h3 class="signature " id="all_plugins-instance_method">
654
+
655
+ #<strong>all_plugins</strong> &#x21d2; <tt>Hash</tt>
656
+
657
+
658
+
659
+
660
+
661
+ </h3><div class="docstring">
662
+ <div class="discussion">
663
+
664
+ <p>Get all registered plugins</p>
665
+
666
+
667
+ </div>
668
+ </div>
669
+ <div class="tags">
670
+
671
+ <p class="tag_title">Returns:</p>
672
+ <ul class="return">
673
+
674
+ <li>
675
+
676
+
677
+ <span class='type'>(<tt>Hash</tt>)</span>
678
+
679
+
680
+
681
+ &mdash;
682
+ <div class='inline'>
683
+ <p>Hash of plugin name =&gt; plugin info</p>
684
+ </div>
685
+
686
+ </li>
687
+
688
+ </ul>
689
+
690
+ </div><table class="source_code">
691
+ <tr>
692
+ <td>
693
+ <pre class="lines">
694
+
695
+
696
+ 115
697
+ 116
698
+ 117</pre>
699
+ </td>
700
+ <td>
701
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 115</span>
702
+
703
+ <span class='kw'>def</span> <span class='id identifier rubyid_all_plugins'>all_plugins</span>
704
+ <span class='ivar'>@plugins</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
705
+ <span class='kw'>end</span></pre>
706
+ </td>
707
+ </tr>
708
+ </table>
709
+ </div>
710
+
711
+ <div class="method_details ">
712
+ <h3 class="signature " id="auto_discover_plugins-instance_method">
713
+
714
+ #<strong>auto_discover_plugins</strong>(directory = nil) &#x21d2; <tt>Integer</tt>
715
+
716
+
717
+
718
+
719
+
720
+ </h3><div class="docstring">
721
+ <div class="discussion">
722
+
723
+ <p>Auto-discover plugins in the plugins directory</p>
724
+
725
+
726
+ </div>
727
+ </div>
728
+ <div class="tags">
729
+ <p class="tag_title">Parameters:</p>
730
+ <ul class="param">
731
+
732
+ <li>
733
+
734
+ <span class='name'>directory</span>
735
+
736
+
737
+ <span class='type'>(<tt>String</tt>)</span>
738
+
739
+
740
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
741
+
742
+
743
+ &mdash;
744
+ <div class='inline'>
745
+ <p>Directory to search for plugins</p>
746
+ </div>
747
+
748
+ </li>
749
+
750
+ </ul>
751
+
752
+ <p class="tag_title">Returns:</p>
753
+ <ul class="return">
754
+
755
+ <li>
756
+
757
+
758
+ <span class='type'>(<tt>Integer</tt>)</span>
759
+
760
+
761
+
762
+ &mdash;
763
+ <div class='inline'>
764
+ <p>Number of plugins discovered</p>
765
+ </div>
766
+
767
+ </li>
768
+
769
+ </ul>
770
+
771
+ </div><table class="source_code">
772
+ <tr>
773
+ <td>
774
+ <pre class="lines">
775
+
776
+
777
+ 173
778
+ 174
779
+ 175
780
+ 176
781
+ 177
782
+ 178
783
+ 179
784
+ 180
785
+ 181
786
+ 182
787
+ 183
788
+ 184
789
+ 185
790
+ 186
791
+ 187
792
+ 188
793
+ 189
794
+ 190
795
+ 191
796
+ 192
797
+ 193
798
+ 194
799
+ 195
800
+ 196
801
+ 197
802
+ 198
803
+ 199
804
+ 200
805
+ 201
806
+ 202
807
+ 203
808
+ 204
809
+ 205</pre>
810
+ </td>
811
+ <td>
812
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 173</span>
813
+
814
+ <span class='kw'>def</span> <span class='id identifier rubyid_auto_discover_plugins'>auto_discover_plugins</span><span class='lparen'>(</span><span class='id identifier rubyid_directory'>directory</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
815
+ <span class='id identifier rubyid_directory'>directory</span> <span class='op'>||=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>plugins</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
816
+
817
+ <span class='kw'>return</span> <span class='int'>0</span> <span class='kw'>unless</span> <span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span><span class='lparen'>(</span><span class='id identifier rubyid_directory'>directory</span><span class='rparen'>)</span>
818
+
819
+ <span class='id identifier rubyid_discovered_count'>discovered_count</span> <span class='op'>=</span> <span class='int'>0</span>
820
+
821
+ <span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_glob'>glob</span><span class='lparen'>(</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='id identifier rubyid_directory'>directory</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>*_exporter.rb</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_file'>file</span><span class='op'>|</span>
822
+ <span class='id identifier rubyid_require'>require</span> <span class='id identifier rubyid_file'>file</span>
823
+
824
+ <span class='comment'># Extract class name from filename
825
+ </span> <span class='id identifier rubyid_class_name'>class_name</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_basename'>basename</span><span class='lparen'>(</span><span class='id identifier rubyid_file'>file</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.rb</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_camelize'>camelize</span>
826
+ <span class='id identifier rubyid_full_class_name'>full_class_name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Tasker::Telemetry::Plugins::</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_class_name'>class_name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
827
+
828
+ <span class='comment'># Try to instantiate the plugin
829
+ </span> <span class='id identifier rubyid_plugin_class'>plugin_class</span> <span class='op'>=</span> <span class='id identifier rubyid_full_class_name'>full_class_name</span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span>
830
+ <span class='id identifier rubyid_plugin_instance'>plugin_instance</span> <span class='op'>=</span> <span class='id identifier rubyid_plugin_class'>plugin_class</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
831
+
832
+ <span class='id identifier rubyid_register'>register</span><span class='lparen'>(</span><span class='id identifier rubyid_class_name'>class_name</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='comma'>,</span> <span class='id identifier rubyid_plugin_instance'>plugin_instance</span><span class='comma'>,</span> <span class='label'>auto_discovered:</span> <span class='kw'>true</span><span class='rparen'>)</span>
833
+ <span class='id identifier rubyid_discovered_count'>discovered_count</span> <span class='op'>+=</span> <span class='int'>1</span>
834
+
835
+ <span class='id identifier rubyid_log_registry_operation'>log_registry_operation</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>auto_discovered_plugin</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
836
+ <span class='label'>plugin_name:</span> <span class='id identifier rubyid_class_name'>class_name</span><span class='comma'>,</span>
837
+ <span class='label'>plugin_class:</span> <span class='id identifier rubyid_full_class_name'>full_class_name</span><span class='comma'>,</span>
838
+ <span class='label'>file_path:</span> <span class='id identifier rubyid_file'>file</span><span class='rparen'>)</span>
839
+ <span class='kw'>rescue</span> <span class='const'>StandardError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
840
+ <span class='id identifier rubyid_log_registry_error'>log_registry_error</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>auto_discovery_failed</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='comma'>,</span>
841
+ <span class='label'>file_path:</span> <span class='id identifier rubyid_file'>file</span><span class='comma'>,</span>
842
+ <span class='label'>class_name:</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_basename'>basename</span><span class='lparen'>(</span><span class='id identifier rubyid_file'>file</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.rb</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_camelize'>camelize</span><span class='rparen'>)</span>
843
+ <span class='kw'>end</span>
844
+
845
+ <span class='id identifier rubyid_discovered_count'>discovered_count</span>
846
+ <span class='kw'>end</span></pre>
847
+ </td>
848
+ </tr>
849
+ </table>
850
+ </div>
851
+
852
+ <div class="method_details ">
853
+ <h3 class="signature " id="clear!-instance_method">
854
+
855
+ #<strong>clear!</strong> &#x21d2; <tt>Boolean</tt>
856
+
857
+
858
+
859
+
860
+
861
+ </h3><div class="docstring">
862
+ <div class="discussion">
863
+
864
+ <p>Clear all registered plugins (required by BaseRegistry)</p>
865
+
866
+
867
+ </div>
868
+ </div>
869
+ <div class="tags">
870
+
871
+ <p class="tag_title">Returns:</p>
872
+ <ul class="return">
873
+
874
+ <li>
875
+
876
+
877
+ <span class='type'>(<tt>Boolean</tt>)</span>
878
+
879
+
880
+
881
+ &mdash;
882
+ <div class='inline'>
883
+ <p>True if cleared successfully</p>
884
+ </div>
885
+
886
+ </li>
887
+
888
+ </ul>
889
+
890
+ </div><table class="source_code">
891
+ <tr>
892
+ <td>
893
+ <pre class="lines">
894
+
895
+
896
+ 225
897
+ 226
898
+ 227
899
+ 228
900
+ 229
901
+ 230
902
+ 231
903
+ 232</pre>
904
+ </td>
905
+ <td>
906
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 225</span>
907
+
908
+ <span class='kw'>def</span> <span class='id identifier rubyid_clear!'>clear!</span>
909
+ <span class='id identifier rubyid_thread_safe_operation'>thread_safe_operation</span> <span class='kw'>do</span>
910
+ <span class='ivar'>@plugins</span><span class='period'>.</span><span class='id identifier rubyid_clear'>clear</span>
911
+ <span class='ivar'>@formats</span><span class='period'>.</span><span class='id identifier rubyid_clear'>clear</span>
912
+ <span class='id identifier rubyid_log_registry_operation'>log_registry_operation</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cleared_all</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
913
+ <span class='kw'>true</span>
914
+ <span class='kw'>end</span>
915
+ <span class='kw'>end</span></pre>
916
+ </td>
917
+ </tr>
918
+ </table>
919
+ </div>
920
+
921
+ <div class="method_details ">
922
+ <h3 class="signature " id="clear_all!-instance_method">
923
+
924
+ #<strong>clear_all!</strong> &#x21d2; <tt>Boolean</tt>
925
+
926
+
927
+
928
+
929
+
930
+ </h3><div class="docstring">
931
+ <div class="discussion">
932
+
933
+ <p>Legacy method for backward compatibility</p>
934
+
935
+
936
+ </div>
937
+ </div>
938
+ <div class="tags">
939
+
940
+ <p class="tag_title">Returns:</p>
941
+ <ul class="return">
942
+
943
+ <li>
944
+
945
+
946
+ <span class='type'>(<tt>Boolean</tt>)</span>
947
+
948
+
949
+
950
+ &mdash;
951
+ <div class='inline'>
952
+ <p>True if cleared successfully</p>
953
+ </div>
954
+
955
+ </li>
956
+
957
+ </ul>
958
+
959
+ </div><table class="source_code">
960
+ <tr>
961
+ <td>
962
+ <pre class="lines">
963
+
964
+
965
+ 237
966
+ 238
967
+ 239</pre>
968
+ </td>
969
+ <td>
970
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 237</span>
971
+
972
+ <span class='kw'>def</span> <span class='id identifier rubyid_clear_all!'>clear_all!</span>
973
+ <span class='id identifier rubyid_clear!'>clear!</span>
974
+ <span class='kw'>end</span></pre>
975
+ </td>
976
+ </tr>
977
+ </table>
978
+ </div>
979
+
980
+ <div class="method_details ">
981
+ <h3 class="signature " id="find_by-instance_method">
982
+
983
+ #<strong>find_by</strong>(format:) &#x21d2; <tt>Array&lt;Object&gt;</tt>
984
+
985
+
986
+
987
+
988
+
989
+ </h3><div class="docstring">
990
+ <div class="discussion">
991
+
992
+ <p>Find plugins by criteria (supports keyword arguments for test compatibility)</p>
993
+
994
+
995
+ </div>
996
+ </div>
997
+ <div class="tags">
998
+ <p class="tag_title">Parameters:</p>
999
+ <ul class="param">
1000
+
1001
+ <li>
1002
+
1003
+ <span class='name'>format</span>
1004
+
1005
+
1006
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
1007
+
1008
+
1009
+
1010
+ &mdash;
1011
+ <div class='inline'>
1012
+ <p>Format to search for</p>
1013
+ </div>
1014
+
1015
+ </li>
1016
+
1017
+ </ul>
1018
+
1019
+ <p class="tag_title">Returns:</p>
1020
+ <ul class="return">
1021
+
1022
+ <li>
1023
+
1024
+
1025
+ <span class='type'>(<tt>Array&lt;Object&gt;</tt>)</span>
1026
+
1027
+
1028
+
1029
+ &mdash;
1030
+ <div class='inline'>
1031
+ <p>Array of plugin instances</p>
1032
+ </div>
1033
+
1034
+ </li>
1035
+
1036
+ </ul>
1037
+
1038
+ </div><table class="source_code">
1039
+ <tr>
1040
+ <td>
1041
+ <pre class="lines">
1042
+
1043
+
1044
+ 150
1045
+ 151
1046
+ 152</pre>
1047
+ </td>
1048
+ <td>
1049
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 150</span>
1050
+
1051
+ <span class='kw'>def</span> <span class='id identifier rubyid_find_by'>find_by</span><span class='lparen'>(</span><span class='label'>format:</span><span class='rparen'>)</span>
1052
+ <span class='id identifier rubyid_find_by_format'>find_by_format</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span>
1053
+ <span class='kw'>end</span></pre>
1054
+ </td>
1055
+ </tr>
1056
+ </table>
1057
+ </div>
1058
+
1059
+ <div class="method_details ">
1060
+ <h3 class="signature " id="find_by_format-instance_method">
1061
+
1062
+ #<strong>find_by_format</strong>(format) &#x21d2; <tt>Array&lt;Object&gt;</tt>
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+ </h3><div class="docstring">
1069
+ <div class="discussion">
1070
+
1071
+ <p>Find plugins that support a specific format</p>
1072
+
1073
+
1074
+ </div>
1075
+ </div>
1076
+ <div class="tags">
1077
+ <p class="tag_title">Parameters:</p>
1078
+ <ul class="param">
1079
+
1080
+ <li>
1081
+
1082
+ <span class='name'>format</span>
1083
+
1084
+
1085
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
1086
+
1087
+
1088
+
1089
+ &mdash;
1090
+ <div class='inline'>
1091
+ <p>Format to search for</p>
1092
+ </div>
1093
+
1094
+ </li>
1095
+
1096
+ </ul>
1097
+
1098
+ <p class="tag_title">Returns:</p>
1099
+ <ul class="return">
1100
+
1101
+ <li>
1102
+
1103
+
1104
+ <span class='type'>(<tt>Array&lt;Object&gt;</tt>)</span>
1105
+
1106
+
1107
+
1108
+ &mdash;
1109
+ <div class='inline'>
1110
+ <p>Array of plugin instances</p>
1111
+ </div>
1112
+
1113
+ </li>
1114
+
1115
+ </ul>
1116
+
1117
+ </div><table class="source_code">
1118
+ <tr>
1119
+ <td>
1120
+ <pre class="lines">
1121
+
1122
+
1123
+ 139
1124
+ 140
1125
+ 141
1126
+ 142
1127
+ 143
1128
+ 144</pre>
1129
+ </td>
1130
+ <td>
1131
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 139</span>
1132
+
1133
+ <span class='kw'>def</span> <span class='id identifier rubyid_find_by_format'>find_by_format</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span>
1134
+ <span class='id identifier rubyid_format'>format</span> <span class='op'>=</span> <span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span>
1135
+ <span class='id identifier rubyid_plugin_names'>plugin_names</span> <span class='op'>=</span> <span class='ivar'>@formats</span><span class='lbracket'>[</span><span class='id identifier rubyid_format'>format</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span>
1136
+
1137
+ <span class='id identifier rubyid_plugin_names'>plugin_names</span><span class='period'>.</span><span class='id identifier rubyid_filter_map'>filter_map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='op'>|</span> <span class='id identifier rubyid_get_plugin'>get_plugin</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
1138
+ <span class='kw'>end</span></pre>
1139
+ </td>
1140
+ </tr>
1141
+ </table>
1142
+ </div>
1143
+
1144
+ <div class="method_details ">
1145
+ <h3 class="signature " id="get_plugin-instance_method">
1146
+
1147
+ #<strong>get_plugin</strong>(name) &#x21d2; <tt>Object</tt><sup>?</sup>
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+ </h3><div class="docstring">
1154
+ <div class="discussion">
1155
+
1156
+ <p>Get plugin by name</p>
1157
+
1158
+
1159
+ </div>
1160
+ </div>
1161
+ <div class="tags">
1162
+ <p class="tag_title">Parameters:</p>
1163
+ <ul class="param">
1164
+
1165
+ <li>
1166
+
1167
+ <span class='name'>name</span>
1168
+
1169
+
1170
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
1171
+
1172
+
1173
+
1174
+ &mdash;
1175
+ <div class='inline'>
1176
+ <p>Plugin identifier</p>
1177
+ </div>
1178
+
1179
+ </li>
1180
+
1181
+ </ul>
1182
+
1183
+ <p class="tag_title">Returns:</p>
1184
+ <ul class="return">
1185
+
1186
+ <li>
1187
+
1188
+
1189
+ <span class='type'>(<tt>Object</tt>, <tt>nil</tt>)</span>
1190
+
1191
+
1192
+
1193
+ &mdash;
1194
+ <div class='inline'>
1195
+ <p>Plugin instance or nil if not found</p>
1196
+ </div>
1197
+
1198
+ </li>
1199
+
1200
+ </ul>
1201
+
1202
+ </div><table class="source_code">
1203
+ <tr>
1204
+ <td>
1205
+ <pre class="lines">
1206
+
1207
+
1208
+ 130
1209
+ 131
1210
+ 132
1211
+ 133</pre>
1212
+ </td>
1213
+ <td>
1214
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 130</span>
1215
+
1216
+ <span class='kw'>def</span> <span class='id identifier rubyid_get_plugin'>get_plugin</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1217
+ <span class='id identifier rubyid_plugin_config'>plugin_config</span> <span class='op'>=</span> <span class='ivar'>@plugins</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rbracket'>]</span>
1218
+ <span class='id identifier rubyid_plugin_config'>plugin_config</span><span class='op'>&amp;.</span><span class='id identifier rubyid_dig'>dig</span><span class='lparen'>(</span><span class='symbol'>:instance</span><span class='rparen'>)</span>
1219
+ <span class='kw'>end</span></pre>
1220
+ </td>
1221
+ </tr>
1222
+ </table>
1223
+ </div>
1224
+
1225
+ <div class="method_details ">
1226
+ <h3 class="signature " id="register-instance_method">
1227
+
1228
+ #<strong>register</strong>(name, plugin, replace: false, **options) &#x21d2; <tt>Boolean</tt>
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+ </h3><div class="docstring">
1235
+ <div class="discussion">
1236
+
1237
+ <p>Register a plugin</p>
1238
+
1239
+
1240
+ </div>
1241
+ </div>
1242
+ <div class="tags">
1243
+ <p class="tag_title">Parameters:</p>
1244
+ <ul class="param">
1245
+
1246
+ <li>
1247
+
1248
+ <span class='name'>name</span>
1249
+
1250
+
1251
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
1252
+
1253
+
1254
+
1255
+ &mdash;
1256
+ <div class='inline'>
1257
+ <p>Plugin identifier</p>
1258
+ </div>
1259
+
1260
+ </li>
1261
+
1262
+ <li>
1263
+
1264
+ <span class='name'>plugin</span>
1265
+
1266
+
1267
+ <span class='type'>(<tt>Object</tt>)</span>
1268
+
1269
+
1270
+
1271
+ &mdash;
1272
+ <div class='inline'>
1273
+ <p>Plugin instance</p>
1274
+ </div>
1275
+
1276
+ </li>
1277
+
1278
+ <li>
1279
+
1280
+ <span class='name'>replace</span>
1281
+
1282
+
1283
+ <span class='type'>(<tt>Boolean</tt>)</span>
1284
+
1285
+
1286
+ <em class="default">(defaults to: <tt>false</tt>)</em>
1287
+
1288
+
1289
+ &mdash;
1290
+ <div class='inline'>
1291
+ <p>Whether to replace existing plugin</p>
1292
+ </div>
1293
+
1294
+ </li>
1295
+
1296
+ <li>
1297
+
1298
+ <span class='name'>options</span>
1299
+
1300
+
1301
+ <span class='type'>(<tt>Hash</tt>)</span>
1302
+
1303
+
1304
+
1305
+ &mdash;
1306
+ <div class='inline'>
1307
+ <p>Plugin options</p>
1308
+ </div>
1309
+
1310
+ </li>
1311
+
1312
+ </ul>
1313
+
1314
+ <p class="tag_title">Returns:</p>
1315
+ <ul class="return">
1316
+
1317
+ <li>
1318
+
1319
+
1320
+ <span class='type'>(<tt>Boolean</tt>)</span>
1321
+
1322
+
1323
+
1324
+ &mdash;
1325
+ <div class='inline'>
1326
+ <p>True if registration successful</p>
1327
+ </div>
1328
+
1329
+ </li>
1330
+
1331
+ </ul>
1332
+
1333
+ </div><table class="source_code">
1334
+ <tr>
1335
+ <td>
1336
+ <pre class="lines">
1337
+
1338
+
1339
+ 42
1340
+ 43
1341
+ 44
1342
+ 45
1343
+ 46
1344
+ 47
1345
+ 48
1346
+ 49
1347
+ 50
1348
+ 51
1349
+ 52
1350
+ 53
1351
+ 54
1352
+ 55
1353
+ 56
1354
+ 57
1355
+ 58
1356
+ 59
1357
+ 60
1358
+ 61
1359
+ 62
1360
+ 63
1361
+ 64
1362
+ 65
1363
+ 66
1364
+ 67
1365
+ 68
1366
+ 69
1367
+ 70
1368
+ 71
1369
+ 72
1370
+ 73
1371
+ 74
1372
+ 75
1373
+ 76
1374
+ 77
1375
+ 78
1376
+ 79
1377
+ 80
1378
+ 81
1379
+ 82
1380
+ 83
1381
+ 84
1382
+ 85
1383
+ 86
1384
+ 87
1385
+ 88</pre>
1386
+ </td>
1387
+ <td>
1388
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 42</span>
1389
+
1390
+ <span class='kw'>def</span> <span class='id identifier rubyid_register'>register</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_plugin'>plugin</span><span class='comma'>,</span> <span class='label'>replace:</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1391
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
1392
+
1393
+ <span class='id identifier rubyid_thread_safe_operation'>thread_safe_operation</span> <span class='kw'>do</span>
1394
+ <span class='comment'># Validate plugin interface
1395
+ </span> <span class='kw'>begin</span>
1396
+ <span class='const'><span class='object_link'><a href="../Registry.html" title="Tasker::Registry (module)">Registry</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Registry/InterfaceValidator.html" title="Tasker::Registry::InterfaceValidator (class)">InterfaceValidator</a></span></span><span class='period'>.</span><span class='id identifier rubyid_validate_plugin!'><span class='object_link'><a href="../Registry/InterfaceValidator.html#validate_plugin!-class_method" title="Tasker::Registry::InterfaceValidator.validate_plugin! (method)">validate_plugin!</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_plugin'>plugin</span><span class='rparen'>)</span>
1397
+ <span class='kw'>rescue</span> <span class='const'>ArgumentError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
1398
+ <span class='id identifier rubyid_log_validation_failure'>log_validation_failure</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>telemetry_plugin</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
1399
+ <span class='id identifier rubyid_raise'>raise</span>
1400
+ <span class='kw'>end</span>
1401
+
1402
+ <span class='comment'># Check for existing plugin
1403
+ </span> <span class='kw'>if</span> <span class='ivar'>@plugins</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_replace'>replace</span>
1404
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Plugin &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39; already registered. Use replace: true to override.</span><span class='tstring_end'>&quot;</span></span>
1405
+ <span class='kw'>end</span>
1406
+
1407
+ <span class='comment'># Remove existing plugin if replacing
1408
+ </span> <span class='kw'>if</span> <span class='ivar'>@plugins</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1409
+ <span class='id identifier rubyid_existing_config'>existing_config</span> <span class='op'>=</span> <span class='ivar'>@plugins</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
1410
+ <span class='id identifier rubyid_unregister_format_mappings'>unregister_format_mappings</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_existing_config'>existing_config</span><span class='lbracket'>[</span><span class='symbol'>:supported_formats</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1411
+ <span class='id identifier rubyid_log_unregistration'>log_unregistration</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>telemetry_plugin</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_existing_config'>existing_config</span><span class='lbracket'>[</span><span class='symbol'>:instance</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='rparen'>)</span>
1412
+ <span class='kw'>end</span>
1413
+
1414
+ <span class='comment'># Get supported formats
1415
+ </span> <span class='id identifier rubyid_supported_formats'>supported_formats</span> <span class='op'>=</span> <span class='id identifier rubyid_get_supported_formats'>get_supported_formats</span><span class='lparen'>(</span><span class='id identifier rubyid_plugin'>plugin</span><span class='rparen'>)</span>
1416
+
1417
+ <span class='comment'># Register plugin
1418
+ </span> <span class='id identifier rubyid_plugin_config'>plugin_config</span> <span class='op'>=</span> <span class='lbrace'>{</span>
1419
+ <span class='label'>instance:</span> <span class='id identifier rubyid_plugin'>plugin</span><span class='comma'>,</span>
1420
+ <span class='label'>name:</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span>
1421
+ <span class='label'>options:</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='label'>replace:</span> <span class='id identifier rubyid_replace'>replace</span><span class='rparen'>)</span><span class='comma'>,</span>
1422
+ <span class='label'>registered_at:</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='comma'>,</span>
1423
+ <span class='label'>supported_formats:</span> <span class='id identifier rubyid_supported_formats'>supported_formats</span>
1424
+ <span class='rbrace'>}</span>
1425
+
1426
+ <span class='ivar'>@plugins</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_plugin_config'>plugin_config</span>
1427
+
1428
+ <span class='comment'># Index by supported formats
1429
+ </span> <span class='id identifier rubyid_register_format_mappings'>register_format_mappings</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_supported_formats'>supported_formats</span><span class='rparen'>)</span>
1430
+
1431
+ <span class='id identifier rubyid_log_registration'>log_registration</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>telemetry_plugin</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_plugin'>plugin</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='comma'>,</span>
1432
+ <span class='lbrace'>{</span> <span class='label'>supported_formats:</span> <span class='id identifier rubyid_supported_formats'>supported_formats</span><span class='comma'>,</span> <span class='label'>format_count:</span> <span class='id identifier rubyid_supported_formats'>supported_formats</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_options'>options</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1433
+
1434
+ <span class='kw'>true</span>
1435
+ <span class='kw'>end</span>
1436
+ <span class='kw'>end</span></pre>
1437
+ </td>
1438
+ </tr>
1439
+ </table>
1440
+ </div>
1441
+
1442
+ <div class="method_details ">
1443
+ <h3 class="signature " id="stats-instance_method">
1444
+
1445
+ #<strong>stats</strong> &#x21d2; <tt>Hash</tt>
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+ </h3><div class="docstring">
1452
+ <div class="discussion">
1453
+
1454
+ <p>Get comprehensive registry statistics</p>
1455
+
1456
+
1457
+ </div>
1458
+ </div>
1459
+ <div class="tags">
1460
+
1461
+ <p class="tag_title">Returns:</p>
1462
+ <ul class="return">
1463
+
1464
+ <li>
1465
+
1466
+
1467
+ <span class='type'>(<tt>Hash</tt>)</span>
1468
+
1469
+
1470
+
1471
+ &mdash;
1472
+ <div class='inline'>
1473
+ <p>Detailed statistics about the registry</p>
1474
+ </div>
1475
+
1476
+ </li>
1477
+
1478
+ </ul>
1479
+
1480
+ </div><table class="source_code">
1481
+ <tr>
1482
+ <td>
1483
+ <pre class="lines">
1484
+
1485
+
1486
+ 210
1487
+ 211
1488
+ 212
1489
+ 213
1490
+ 214
1491
+ 215
1492
+ 216
1493
+ 217
1494
+ 218
1495
+ 219
1496
+ 220</pre>
1497
+ </td>
1498
+ <td>
1499
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 210</span>
1500
+
1501
+ <span class='kw'>def</span> <span class='id identifier rubyid_stats'>stats</span>
1502
+ <span class='id identifier rubyid_base_stats'>base_stats</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span>
1503
+ <span class='label'>total_plugins:</span> <span class='ivar'>@plugins</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='comma'>,</span>
1504
+ <span class='label'>total_formats:</span> <span class='ivar'>@formats</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='comma'>,</span>
1505
+ <span class='label'>supported_formats:</span> <span class='ivar'>@formats</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span><span class='comma'>,</span>
1506
+ <span class='label'>plugins_by_format:</span> <span class='ivar'>@formats</span><span class='period'>.</span><span class='id identifier rubyid_transform_values'>transform_values</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:size</span><span class='rparen'>)</span><span class='comma'>,</span>
1507
+ <span class='label'>average_formats_per_plugin:</span> <span class='id identifier rubyid_calculate_average_formats_per_plugin'>calculate_average_formats_per_plugin</span><span class='comma'>,</span>
1508
+ <span class='label'>most_popular_formats:</span> <span class='id identifier rubyid_find_most_popular_formats'>find_most_popular_formats</span><span class='comma'>,</span>
1509
+ <span class='label'>plugin_distribution:</span> <span class='id identifier rubyid_calculate_plugin_distribution'>calculate_plugin_distribution</span>
1510
+ <span class='rparen'>)</span>
1511
+ <span class='kw'>end</span></pre>
1512
+ </td>
1513
+ </tr>
1514
+ </table>
1515
+ </div>
1516
+
1517
+ <div class="method_details ">
1518
+ <h3 class="signature " id="supported_formats-instance_method">
1519
+
1520
+ #<strong>supported_formats</strong> &#x21d2; <tt>Array&lt;String&gt;</tt>
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+ </h3><div class="docstring">
1527
+ <div class="discussion">
1528
+
1529
+ <p>Get supported formats across all plugins</p>
1530
+
1531
+
1532
+ </div>
1533
+ </div>
1534
+ <div class="tags">
1535
+
1536
+ <p class="tag_title">Returns:</p>
1537
+ <ul class="return">
1538
+
1539
+ <li>
1540
+
1541
+
1542
+ <span class='type'>(<tt>Array&lt;String&gt;</tt>)</span>
1543
+
1544
+
1545
+
1546
+ &mdash;
1547
+ <div class='inline'>
1548
+ <p>Array of supported format names</p>
1549
+ </div>
1550
+
1551
+ </li>
1552
+
1553
+ </ul>
1554
+
1555
+ </div><table class="source_code">
1556
+ <tr>
1557
+ <td>
1558
+ <pre class="lines">
1559
+
1560
+
1561
+ 157
1562
+ 158
1563
+ 159</pre>
1564
+ </td>
1565
+ <td>
1566
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 157</span>
1567
+
1568
+ <span class='kw'>def</span> <span class='id identifier rubyid_supported_formats'>supported_formats</span>
1569
+ <span class='ivar'>@formats</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span>
1570
+ <span class='kw'>end</span></pre>
1571
+ </td>
1572
+ </tr>
1573
+ </table>
1574
+ </div>
1575
+
1576
+ <div class="method_details ">
1577
+ <h3 class="signature " id="supports_format?-instance_method">
1578
+
1579
+ #<strong>supports_format?</strong>(format) &#x21d2; <tt>Boolean</tt>
1580
+
1581
+
1582
+
1583
+
1584
+
1585
+ </h3><div class="docstring">
1586
+ <div class="discussion">
1587
+
1588
+ <p>Check if a format is supported by any plugin</p>
1589
+
1590
+
1591
+ </div>
1592
+ </div>
1593
+ <div class="tags">
1594
+ <p class="tag_title">Parameters:</p>
1595
+ <ul class="param">
1596
+
1597
+ <li>
1598
+
1599
+ <span class='name'>format</span>
1600
+
1601
+
1602
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
1603
+
1604
+
1605
+
1606
+ &mdash;
1607
+ <div class='inline'>
1608
+ <p>Format to check</p>
1609
+ </div>
1610
+
1611
+ </li>
1612
+
1613
+ </ul>
1614
+
1615
+ <p class="tag_title">Returns:</p>
1616
+ <ul class="return">
1617
+
1618
+ <li>
1619
+
1620
+
1621
+ <span class='type'>(<tt>Boolean</tt>)</span>
1622
+
1623
+
1624
+
1625
+ &mdash;
1626
+ <div class='inline'>
1627
+ <p>True if format is supported</p>
1628
+ </div>
1629
+
1630
+ </li>
1631
+
1632
+ </ul>
1633
+
1634
+ </div><table class="source_code">
1635
+ <tr>
1636
+ <td>
1637
+ <pre class="lines">
1638
+
1639
+
1640
+ 165
1641
+ 166
1642
+ 167</pre>
1643
+ </td>
1644
+ <td>
1645
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 165</span>
1646
+
1647
+ <span class='kw'>def</span> <span class='id identifier rubyid_supports_format?'>supports_format?</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span>
1648
+ <span class='ivar'>@formats</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='rparen'>)</span>
1649
+ <span class='kw'>end</span></pre>
1650
+ </td>
1651
+ </tr>
1652
+ </table>
1653
+ </div>
1654
+
1655
+ <div class="method_details ">
1656
+ <h3 class="signature " id="unregister-instance_method">
1657
+
1658
+ #<strong>unregister</strong>(name) &#x21d2; <tt>Boolean</tt>
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+ </h3><div class="docstring">
1665
+ <div class="discussion">
1666
+
1667
+ <p>Unregister a plugin</p>
1668
+
1669
+
1670
+ </div>
1671
+ </div>
1672
+ <div class="tags">
1673
+ <p class="tag_title">Parameters:</p>
1674
+ <ul class="param">
1675
+
1676
+ <li>
1677
+
1678
+ <span class='name'>name</span>
1679
+
1680
+
1681
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
1682
+
1683
+
1684
+
1685
+ &mdash;
1686
+ <div class='inline'>
1687
+ <p>Plugin identifier</p>
1688
+ </div>
1689
+
1690
+ </li>
1691
+
1692
+ </ul>
1693
+
1694
+ <p class="tag_title">Returns:</p>
1695
+ <ul class="return">
1696
+
1697
+ <li>
1698
+
1699
+
1700
+ <span class='type'>(<tt>Boolean</tt>)</span>
1701
+
1702
+
1703
+
1704
+ &mdash;
1705
+ <div class='inline'>
1706
+ <p>True if unregistered successfully</p>
1707
+ </div>
1708
+
1709
+ </li>
1710
+
1711
+ </ul>
1712
+
1713
+ </div><table class="source_code">
1714
+ <tr>
1715
+ <td>
1716
+ <pre class="lines">
1717
+
1718
+
1719
+ 94
1720
+ 95
1721
+ 96
1722
+ 97
1723
+ 98
1724
+ 99
1725
+ 100
1726
+ 101
1727
+ 102
1728
+ 103
1729
+ 104
1730
+ 105
1731
+ 106
1732
+ 107
1733
+ 108
1734
+ 109
1735
+ 110</pre>
1736
+ </td>
1737
+ <td>
1738
+ <pre class="code"><span class="info file"># File 'lib/tasker/telemetry/plugin_registry.rb', line 94</span>
1739
+
1740
+ <span class='kw'>def</span> <span class='id identifier rubyid_unregister'>unregister</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1741
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
1742
+
1743
+ <span class='id identifier rubyid_thread_safe_operation'>thread_safe_operation</span> <span class='kw'>do</span>
1744
+ <span class='id identifier rubyid_plugin_config'>plugin_config</span> <span class='op'>=</span> <span class='ivar'>@plugins</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1745
+
1746
+ <span class='kw'>if</span> <span class='id identifier rubyid_plugin_config'>plugin_config</span>
1747
+ <span class='comment'># Remove from format index
1748
+ </span> <span class='id identifier rubyid_unregister_format_mappings'>unregister_format_mappings</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_plugin_config'>plugin_config</span><span class='lbracket'>[</span><span class='symbol'>:supported_formats</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1749
+
1750
+ <span class='id identifier rubyid_log_unregistration'>log_unregistration</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>telemetry_plugin</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_plugin_config'>plugin_config</span><span class='lbracket'>[</span><span class='symbol'>:instance</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='rparen'>)</span>
1751
+ <span class='kw'>true</span>
1752
+ <span class='kw'>else</span>
1753
+ <span class='kw'>false</span>
1754
+ <span class='kw'>end</span>
1755
+ <span class='kw'>end</span>
1756
+ <span class='kw'>end</span></pre>
1757
+ </td>
1758
+ </tr>
1759
+ </table>
1760
+ </div>
1761
+
1762
+ </div>
1763
+
1764
+ </div>
1765
+
1766
+ <div id="footer">
1767
+ Generated on Tue Jul 1 16:47:38 2025 by
1768
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1769
+ 0.9.37 (ruby-3.2.4).
1770
+ </div>
1771
+
1772
+ </div>
1773
+ </body>
1774
+ </html>