tasker-engine 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +443 -0
- data/Rakefile +10 -0
- data/app/controllers/tasker/analytics_controller.rb +179 -0
- data/app/controllers/tasker/application_controller.rb +45 -0
- data/app/controllers/tasker/graphql_controller.rb +193 -0
- data/app/controllers/tasker/handlers_controller.rb +217 -0
- data/app/controllers/tasker/health_controller.rb +229 -0
- data/app/controllers/tasker/metrics_controller.rb +111 -0
- data/app/controllers/tasker/page_sort.rb +97 -0
- data/app/controllers/tasker/task_diagrams_controller.rb +30 -0
- data/app/controllers/tasker/tasks_controller.rb +123 -0
- data/app/controllers/tasker/workflow_steps_controller.rb +69 -0
- data/app/graphql/examples/all_tasks.graphql +22 -0
- data/app/graphql/examples/pending_tasks.graphql +23 -0
- data/app/graphql/tasker/graph_ql_types/annotation_type.rb +14 -0
- data/app/graphql/tasker/graph_ql_types/base_argument.rb +9 -0
- data/app/graphql/tasker/graph_ql_types/base_connection.rb +11 -0
- data/app/graphql/tasker/graph_ql_types/base_edge.rb +10 -0
- data/app/graphql/tasker/graph_ql_types/base_enum.rb +9 -0
- data/app/graphql/tasker/graph_ql_types/base_field.rb +10 -0
- data/app/graphql/tasker/graph_ql_types/base_input_object.rb +10 -0
- data/app/graphql/tasker/graph_ql_types/base_interface.rb +14 -0
- data/app/graphql/tasker/graph_ql_types/base_object.rb +10 -0
- data/app/graphql/tasker/graph_ql_types/base_scalar.rb +9 -0
- data/app/graphql/tasker/graph_ql_types/base_union.rb +11 -0
- data/app/graphql/tasker/graph_ql_types/dependent_system_object_map_type.rb +18 -0
- data/app/graphql/tasker/graph_ql_types/dependent_system_type.rb +13 -0
- data/app/graphql/tasker/graph_ql_types/mutation_type.rb +16 -0
- data/app/graphql/tasker/graph_ql_types/named_step_type.rb +16 -0
- data/app/graphql/tasker/graph_ql_types/named_task_type.rb +14 -0
- data/app/graphql/tasker/graph_ql_types/named_tasks_named_step_type.rb +19 -0
- data/app/graphql/tasker/graph_ql_types/node_type.rb +12 -0
- data/app/graphql/tasker/graph_ql_types/query_type.rb +20 -0
- data/app/graphql/tasker/graph_ql_types/task_annotation_type.rb +17 -0
- data/app/graphql/tasker/graph_ql_types/task_interface.rb +17 -0
- data/app/graphql/tasker/graph_ql_types/task_type.rb +26 -0
- data/app/graphql/tasker/graph_ql_types/workflow_step_type.rb +154 -0
- data/app/graphql/tasker/graph_ql_types.rb +42 -0
- data/app/graphql/tasker/mutations/base_mutation.rb +13 -0
- data/app/graphql/tasker/mutations/cancel_step.rb +29 -0
- data/app/graphql/tasker/mutations/cancel_task.rb +29 -0
- data/app/graphql/tasker/mutations/create_task.rb +52 -0
- data/app/graphql/tasker/mutations/update_step.rb +36 -0
- data/app/graphql/tasker/mutations/update_task.rb +41 -0
- data/app/graphql/tasker/queries/all_annotation_types.rb +17 -0
- data/app/graphql/tasker/queries/all_tasks.rb +23 -0
- data/app/graphql/tasker/queries/base_query.rb +9 -0
- data/app/graphql/tasker/queries/helpers.rb +16 -0
- data/app/graphql/tasker/queries/one_step.rb +24 -0
- data/app/graphql/tasker/queries/one_task.rb +18 -0
- data/app/graphql/tasker/queries/tasks_by_annotation.rb +31 -0
- data/app/graphql/tasker/queries/tasks_by_status.rb +30 -0
- data/app/graphql/tasker/tasker_rails_schema.rb +52 -0
- data/app/jobs/tasker/application_job.rb +8 -0
- data/app/jobs/tasker/metrics_export_job.rb +252 -0
- data/app/jobs/tasker/task_runner_job.rb +224 -0
- data/app/models/tasker/annotation_type.rb +26 -0
- data/app/models/tasker/application_record.rb +70 -0
- data/app/models/tasker/dependent_system.rb +26 -0
- data/app/models/tasker/dependent_system_object_map.rb +64 -0
- data/app/models/tasker/diagram/edge.rb +106 -0
- data/app/models/tasker/diagram/flowchart.rb +137 -0
- data/app/models/tasker/diagram/node.rb +99 -0
- data/app/models/tasker/named_step.rb +41 -0
- data/app/models/tasker/named_task.rb +121 -0
- data/app/models/tasker/named_tasks_named_step.rb +82 -0
- data/app/models/tasker/step_dag_relationship.rb +65 -0
- data/app/models/tasker/step_readiness_status.rb +59 -0
- data/app/models/tasker/task.rb +424 -0
- data/app/models/tasker/task_annotation.rb +36 -0
- data/app/models/tasker/task_diagram.rb +332 -0
- data/app/models/tasker/task_execution_context.rb +29 -0
- data/app/models/tasker/task_namespace.rb +41 -0
- data/app/models/tasker/task_transition.rb +235 -0
- data/app/models/tasker/workflow_step.rb +461 -0
- data/app/models/tasker/workflow_step_edge.rb +94 -0
- data/app/models/tasker/workflow_step_transition.rb +434 -0
- data/app/serializers/tasker/annotation_type_serializer.rb +8 -0
- data/app/serializers/tasker/handler_serializer.rb +109 -0
- data/app/serializers/tasker/task_annotation_serializer.rb +32 -0
- data/app/serializers/tasker/task_serializer.rb +168 -0
- data/app/serializers/tasker/workflow_step_serializer.rb +27 -0
- data/app/services/tasker/analytics_service.rb +409 -0
- data/app/views/tasker/task/_diagram.html.erb +32 -0
- data/config/initializers/dry_struct.rb +11 -0
- data/config/initializers/statesman.rb +6 -0
- data/config/initializers/tasker_orchestration.rb +17 -0
- data/config/initializers/time_formats.rb +4 -0
- data/config/routes.rb +34 -0
- data/config/tasker/subscriptions/example_integrations.yml +67 -0
- data/config/tasker/system_events.yml +305 -0
- data/db/functions/calculate_dependency_levels_v01.sql +45 -0
- data/db/functions/get_analytics_metrics_v01.sql +137 -0
- data/db/functions/get_slowest_steps_v01.sql +82 -0
- data/db/functions/get_slowest_tasks_v01.sql +96 -0
- data/db/functions/get_step_readiness_status_batch_v01.sql +140 -0
- data/db/functions/get_step_readiness_status_v01.sql +139 -0
- data/db/functions/get_system_health_counts_v01.sql +108 -0
- data/db/functions/get_task_execution_context_v01.sql +108 -0
- data/db/functions/get_task_execution_contexts_batch_v01.sql +104 -0
- data/db/init/schema.sql +2277 -0
- data/db/migrate/20250701165431_initial_tasker_schema.rb +116 -0
- data/db/views/tasker_step_dag_relationships_v01.sql +69 -0
- data/docs/APPLICATION_GENERATOR.md +384 -0
- data/docs/AUTH.md +1780 -0
- data/docs/CIRCUIT_BREAKER.md +224 -0
- data/docs/DEVELOPER_GUIDE.md +2665 -0
- data/docs/EVENT_SYSTEM.md +637 -0
- data/docs/EXECUTION_CONFIGURATION.md +341 -0
- data/docs/FLOW_CHART.md +149 -0
- data/docs/HEALTH.md +542 -0
- data/docs/METRICS.md +731 -0
- data/docs/OPTIMIZATION_PLAN.md +1479 -0
- data/docs/OVERVIEW.md +552 -0
- data/docs/QUICK_START.md +270 -0
- data/docs/REGISTRY_SYSTEMS.md +373 -0
- data/docs/REST_API.md +632 -0
- data/docs/ROADMAP.md +221 -0
- data/docs/SQL_FUNCTIONS.md +1408 -0
- data/docs/TASK_DIAGRAM.md +252 -0
- data/docs/TASK_EXECUTION_CONTROL_FLOW.md +237 -0
- data/docs/TELEMETRY.md +795 -0
- data/docs/TROUBLESHOOTING.md +756 -0
- data/docs/TaskHandlerGenerator.html +255 -0
- data/docs/Tasker/Analysis/RuntimeGraphAnalyzer.html +907 -0
- data/docs/Tasker/Analysis/TemplateGraphAnalyzer.html +1236 -0
- data/docs/Tasker/Analysis.html +117 -0
- data/docs/Tasker/AnalyticsController.html +450 -0
- data/docs/Tasker/AnalyticsService/BottleneckAnalytics.html +816 -0
- data/docs/Tasker/AnalyticsService/PerformanceAnalytics.html +586 -0
- data/docs/Tasker/AnalyticsService.html +2221 -0
- data/docs/Tasker/AnnotationType.html +137 -0
- data/docs/Tasker/AnnotationTypeSerializer.html +124 -0
- data/docs/Tasker/ApplicationController.html +147 -0
- data/docs/Tasker/ApplicationJob.html +128 -0
- data/docs/Tasker/ApplicationRecord.html +378 -0
- data/docs/Tasker/Authentication/AuthenticationError.html +124 -0
- data/docs/Tasker/Authentication/ConfigurationError.html +124 -0
- data/docs/Tasker/Authentication/Coordinator.html +242 -0
- data/docs/Tasker/Authentication/Interface.html +560 -0
- data/docs/Tasker/Authentication/InterfaceError.html +124 -0
- data/docs/Tasker/Authentication/NoneAuthenticator.html +338 -0
- data/docs/Tasker/Authentication.html +119 -0
- data/docs/Tasker/Authorization/AuthorizationError.html +139 -0
- data/docs/Tasker/Authorization/BaseCoordinator.html +927 -0
- data/docs/Tasker/Authorization/ConfigurationError.html +153 -0
- data/docs/Tasker/Authorization/ResourceConstants/ACTIONS.html +428 -0
- data/docs/Tasker/Authorization/ResourceConstants/RESOURCES.html +365 -0
- data/docs/Tasker/Authorization/ResourceConstants.html +146 -0
- data/docs/Tasker/Authorization/ResourceRegistry.html +882 -0
- data/docs/Tasker/Authorization/UnauthorizedError.html +153 -0
- data/docs/Tasker/Authorization.html +582 -0
- data/docs/Tasker/CacheCapabilities.html +167 -0
- data/docs/Tasker/CacheStrategy.html +1297 -0
- data/docs/Tasker/Concerns/Authenticatable.html +116 -0
- data/docs/Tasker/Concerns/Authorizable/AdminStatusChecker.html +256 -0
- data/docs/Tasker/Concerns/Authorizable.html +816 -0
- data/docs/Tasker/Concerns/ControllerAuthorizable.html +157 -0
- data/docs/Tasker/Concerns/EventPublisher.html +4023 -0
- data/docs/Tasker/Concerns/IdempotentStateTransitions.html +806 -0
- data/docs/Tasker/Concerns/LifecycleEventHelpers.html +129 -0
- data/docs/Tasker/Concerns/OrchestrationPublisher.html +129 -0
- data/docs/Tasker/Concerns/StateMachineBase/ClassMethods.html +1075 -0
- data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase/ClassMethods.html +191 -0
- data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase.html +126 -0
- data/docs/Tasker/Concerns/StateMachineBase.html +153 -0
- data/docs/Tasker/Concerns/StructuredLogging.html +1413 -0
- data/docs/Tasker/Concerns.html +117 -0
- data/docs/Tasker/Configuration/AuthConfiguration.html +1023 -0
- data/docs/Tasker/Configuration/ConfigurationProxy.html +581 -0
- data/docs/Tasker/Configuration/DatabaseConfiguration.html +475 -0
- data/docs/Tasker/Configuration/EngineConfiguration.html +1265 -0
- data/docs/Tasker/Configuration/HealthConfiguration.html +791 -0
- data/docs/Tasker/Configuration/TelemetryConfiguration.html +1308 -0
- data/docs/Tasker/Configuration/TelemetryConfigurationProxy.html +388 -0
- data/docs/Tasker/Configuration.html +1669 -0
- data/docs/Tasker/ConfigurationError.html +143 -0
- data/docs/Tasker/ConfiguredTask.html +514 -0
- data/docs/Tasker/Constants/EventDefinitions.html +590 -0
- data/docs/Tasker/Constants/LifecycleEvents.html +137 -0
- data/docs/Tasker/Constants/ObservabilityEvents/Step.html +152 -0
- data/docs/Tasker/Constants/ObservabilityEvents/Task.html +142 -0
- data/docs/Tasker/Constants/ObservabilityEvents.html +126 -0
- data/docs/Tasker/Constants/RegistryEvents.html +285 -0
- data/docs/Tasker/Constants/StepEvents.html +177 -0
- data/docs/Tasker/Constants/TaskEvents.html +167 -0
- data/docs/Tasker/Constants/TaskExecution/ExecutionStatus.html +207 -0
- data/docs/Tasker/Constants/TaskExecution/HealthStatus.html +191 -0
- data/docs/Tasker/Constants/TaskExecution/RecommendedAction.html +207 -0
- data/docs/Tasker/Constants/TaskExecution.html +126 -0
- data/docs/Tasker/Constants/TaskFinalization/ErrorMessages.html +132 -0
- data/docs/Tasker/Constants/TaskFinalization/PendingReasons.html +207 -0
- data/docs/Tasker/Constants/TaskFinalization/ReenqueueReasons.html +239 -0
- data/docs/Tasker/Constants/TaskFinalization.html +126 -0
- data/docs/Tasker/Constants/TaskStatuses.html +223 -0
- data/docs/Tasker/Constants/TestEvents.html +163 -0
- data/docs/Tasker/Constants/WorkflowEvents.html +222 -0
- data/docs/Tasker/Constants/WorkflowStepStatuses.html +223 -0
- data/docs/Tasker/Constants.html +561 -0
- data/docs/Tasker/DependentSystem.html +137 -0
- data/docs/Tasker/DependentSystemObjectMap.html +250 -0
- data/docs/Tasker/DetectorRegistry.html +598 -0
- data/docs/Tasker/Diagram/Edge.html +1191 -0
- data/docs/Tasker/Diagram/Flowchart.html +1539 -0
- data/docs/Tasker/Diagram/Node.html +1165 -0
- data/docs/Tasker/Diagram.html +117 -0
- data/docs/Tasker/Engine.html +215 -0
- data/docs/Tasker/Error.html +139 -0
- data/docs/Tasker/Events/Bus.html +1226 -0
- data/docs/Tasker/Events/Catalog/CatalogPrinter.html +258 -0
- data/docs/Tasker/Events/Catalog/CustomEventRegistrar.html +276 -0
- data/docs/Tasker/Events/Catalog/ExamplePayloadGenerator.html +294 -0
- data/docs/Tasker/Events/Catalog.html +1291 -0
- data/docs/Tasker/Events/CustomRegistry.html +943 -0
- data/docs/Tasker/Events/DefinitionLoader.html +575 -0
- data/docs/Tasker/Events/EventPayloadBuilder/ErrorInfoExtractor.html +286 -0
- data/docs/Tasker/Events/EventPayloadBuilder/StepPayloadBuilder.html +312 -0
- data/docs/Tasker/Events/EventPayloadBuilder.html +664 -0
- data/docs/Tasker/Events/Publisher.html +365 -0
- data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer/ErrorTypeClassifier.html +1128 -0
- data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer.html +270 -0
- data/docs/Tasker/Events/Subscribers/BaseSubscriber/MetricTagsExtractor.html +266 -0
- data/docs/Tasker/Events/Subscribers/BaseSubscriber.html +2556 -0
- data/docs/Tasker/Events/Subscribers/MetricsSubscriber.html +723 -0
- data/docs/Tasker/Events/Subscribers/TelemetrySubscriber.html +2251 -0
- data/docs/Tasker/Events/Subscribers.html +117 -0
- data/docs/Tasker/Events/SubscriptionLoader.html +493 -0
- data/docs/Tasker/Events.html +294 -0
- data/docs/Tasker/EventsGenerator.html +459 -0
- data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics/AnalyticsMetrics.html +135 -0
- data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics.html +412 -0
- data/docs/Tasker/Functions/FunctionBasedDependencyLevels.html +598 -0
- data/docs/Tasker/Functions/FunctionBasedSlowestSteps/SlowestStep.html +135 -0
- data/docs/Tasker/Functions/FunctionBasedSlowestSteps.html +453 -0
- data/docs/Tasker/Functions/FunctionBasedSlowestTasks/SlowestTask.html +135 -0
- data/docs/Tasker/Functions/FunctionBasedSlowestTasks.html +453 -0
- data/docs/Tasker/Functions/FunctionBasedStepReadinessStatus.html +1457 -0
- data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts/HealthMetrics.html +135 -0
- data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts.html +370 -0
- data/docs/Tasker/Functions/FunctionBasedTaskExecutionContext.html +1250 -0
- data/docs/Tasker/Functions/FunctionWrapper.html +479 -0
- data/docs/Tasker/Functions.html +117 -0
- data/docs/Tasker/Generators/AuthenticatorGenerator/UsageInstructionsFormatter.html +244 -0
- data/docs/Tasker/Generators/AuthenticatorGenerator.html +373 -0
- data/docs/Tasker/Generators/AuthorizationCoordinatorGenerator.html +430 -0
- data/docs/Tasker/Generators/SubscriberGenerator.html +377 -0
- data/docs/Tasker/Generators/TaskHandlerGenerator.html +263 -0
- data/docs/Tasker/Generators.html +117 -0
- data/docs/Tasker/GraphQLTypes/AnnotationType.html +132 -0
- data/docs/Tasker/GraphQLTypes/BaseArgument.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseConnection.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseEdge.html +130 -0
- data/docs/Tasker/GraphQLTypes/BaseEnum.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseField.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseInputObject.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseInterface.html +116 -0
- data/docs/Tasker/GraphQLTypes/BaseObject.html +128 -0
- data/docs/Tasker/GraphQLTypes/BaseScalar.html +124 -0
- data/docs/Tasker/GraphQLTypes/BaseUnion.html +124 -0
- data/docs/Tasker/GraphQLTypes/DependentSystemObjectMapType.html +132 -0
- data/docs/Tasker/GraphQLTypes/DependentSystemType.html +132 -0
- data/docs/Tasker/GraphQLTypes/MutationType.html +132 -0
- data/docs/Tasker/GraphQLTypes/NamedStepType.html +132 -0
- data/docs/Tasker/GraphQLTypes/NamedTaskType.html +132 -0
- data/docs/Tasker/GraphQLTypes/NamedTasksNamedStepType.html +132 -0
- data/docs/Tasker/GraphQLTypes/NodeType.html +118 -0
- data/docs/Tasker/GraphQLTypes/QueryType.html +139 -0
- data/docs/Tasker/GraphQLTypes/TaskAnnotationType.html +132 -0
- data/docs/Tasker/GraphQLTypes/TaskInterface.html +111 -0
- data/docs/Tasker/GraphQLTypes/TaskType.html +201 -0
- data/docs/Tasker/GraphQLTypes/WorkflowStepType.html +694 -0
- data/docs/Tasker/GraphQLTypes.html +130 -0
- data/docs/Tasker/GraphqlController.html +251 -0
- data/docs/Tasker/HandlerFactory.html +1518 -0
- data/docs/Tasker/HandlerSerializer.html +682 -0
- data/docs/Tasker/HandlersController.html +574 -0
- data/docs/Tasker/HashIdentityStrategy.html +278 -0
- data/docs/Tasker/Health/ReadinessChecker.html +712 -0
- data/docs/Tasker/Health/StatusChecker.html +653 -0
- data/docs/Tasker/Health.html +117 -0
- data/docs/Tasker/HealthController.html +523 -0
- data/docs/Tasker/IdentityStrategy.html +276 -0
- data/docs/Tasker/InvalidTaskHandlerConfig.html +135 -0
- data/docs/Tasker/LifecycleEvents/Events/Step.html +162 -0
- data/docs/Tasker/LifecycleEvents/Events/Task.html +162 -0
- data/docs/Tasker/LifecycleEvents/Events.html +204 -0
- data/docs/Tasker/LifecycleEvents/Publisher.html +132 -0
- data/docs/Tasker/LifecycleEvents.html +799 -0
- data/docs/Tasker/Logging/CorrelationIdGenerator.html +688 -0
- data/docs/Tasker/Logging.html +115 -0
- data/docs/Tasker/MetricsController.html +293 -0
- data/docs/Tasker/MetricsExportJob.html +414 -0
- data/docs/Tasker/Mutations/BaseMutation.html +128 -0
- data/docs/Tasker/Mutations/CancelStep.html +219 -0
- data/docs/Tasker/Mutations/CancelTask.html +221 -0
- data/docs/Tasker/Mutations/CreateTask.html +243 -0
- data/docs/Tasker/Mutations/UpdateStep.html +243 -0
- data/docs/Tasker/Mutations/UpdateTask.html +243 -0
- data/docs/Tasker/Mutations.html +117 -0
- data/docs/Tasker/NamedStep.html +216 -0
- data/docs/Tasker/NamedTask.html +910 -0
- data/docs/Tasker/NamedTasksNamedStep.html +435 -0
- data/docs/Tasker/Orchestration/BackoffCalculator.html +404 -0
- data/docs/Tasker/Orchestration/ConnectionBuilder/ConfigValidator.html +258 -0
- data/docs/Tasker/Orchestration/ConnectionBuilder.html +435 -0
- data/docs/Tasker/Orchestration/ConnectionPoolIntelligence.html +513 -0
- data/docs/Tasker/Orchestration/Coordinator.html +641 -0
- data/docs/Tasker/Orchestration/FutureStateAnalyzer.html +1045 -0
- data/docs/Tasker/Orchestration/Orchestrator.html +679 -0
- data/docs/Tasker/Orchestration/PluginIntegration.html +1127 -0
- data/docs/Tasker/Orchestration/ResponseProcessor.html +504 -0
- data/docs/Tasker/Orchestration/RetryHeaderParser.html +304 -0
- data/docs/Tasker/Orchestration/StepExecutor.html +995 -0
- data/docs/Tasker/Orchestration/StepSequenceFactory.html +644 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/BlockageChecker.html +264 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/ContextManager.html +254 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/DelayCalculator.html +556 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationDecisionMaker.html +348 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationProcessor.html +286 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/ReasonDeterminer.html +432 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/ReenqueueManager.html +296 -0
- data/docs/Tasker/Orchestration/TaskFinalizer/UnclearStateHandler.html +314 -0
- data/docs/Tasker/Orchestration/TaskFinalizer.html +1212 -0
- data/docs/Tasker/Orchestration/TaskInitializer.html +766 -0
- data/docs/Tasker/Orchestration/TaskReenqueuer.html +506 -0
- data/docs/Tasker/Orchestration/ViableStepDiscovery.html +442 -0
- data/docs/Tasker/Orchestration/WorkflowCoordinator.html +510 -0
- data/docs/Tasker/Orchestration.html +130 -0
- data/docs/Tasker/PageSort/PageSortParamsBuilder.html +296 -0
- data/docs/Tasker/PageSort.html +247 -0
- data/docs/Tasker/PermanentError.html +518 -0
- data/docs/Tasker/ProceduralError.html +147 -0
- data/docs/Tasker/Queries/AllAnnotationTypes.html +217 -0
- data/docs/Tasker/Queries/AllTasks.html +221 -0
- data/docs/Tasker/Queries/BaseQuery.html +128 -0
- data/docs/Tasker/Queries/Helpers.html +187 -0
- data/docs/Tasker/Queries/OneStep.html +225 -0
- data/docs/Tasker/Queries/OneTask.html +217 -0
- data/docs/Tasker/Queries/TasksByAnnotation.html +231 -0
- data/docs/Tasker/Queries/TasksByStatus.html +233 -0
- data/docs/Tasker/Queries.html +119 -0
- data/docs/Tasker/Railtie.html +124 -0
- data/docs/Tasker/Registry/BaseRegistry.html +1690 -0
- data/docs/Tasker/Registry/EventPublisher.html +667 -0
- data/docs/Tasker/Registry/InterfaceValidator.html +569 -0
- data/docs/Tasker/Registry/RegistrationError.html +132 -0
- data/docs/Tasker/Registry/RegistryError.html +139 -0
- data/docs/Tasker/Registry/StatisticsCollector.html +841 -0
- data/docs/Tasker/Registry/SubscriberRegistry.html +1504 -0
- data/docs/Tasker/Registry/ValidationError.html +132 -0
- data/docs/Tasker/Registry.html +119 -0
- data/docs/Tasker/RetryableError.html +515 -0
- data/docs/Tasker/StateMachine/Compatibility.html +282 -0
- data/docs/Tasker/StateMachine/InvalidStateTransition.html +135 -0
- data/docs/Tasker/StateMachine/StepStateMachine/StandardizedPayloadBuilder.html +260 -0
- data/docs/Tasker/StateMachine/StepStateMachine.html +2215 -0
- data/docs/Tasker/StateMachine/TaskStateMachine.html +734 -0
- data/docs/Tasker/StateMachine.html +602 -0
- data/docs/Tasker/StepDagRelationship.html +657 -0
- data/docs/Tasker/StepHandler/Api/Config.html +1091 -0
- data/docs/Tasker/StepHandler/Api.html +884 -0
- data/docs/Tasker/StepHandler/AutomaticEventPublishing.html +321 -0
- data/docs/Tasker/StepHandler/Base.html +970 -0
- data/docs/Tasker/StepHandler.html +119 -0
- data/docs/Tasker/StepReadinessStatus.html +836 -0
- data/docs/Tasker/Task.html +2575 -0
- data/docs/Tasker/TaskAnnotation.html +137 -0
- data/docs/Tasker/TaskAnnotationSerializer.html +124 -0
- data/docs/Tasker/TaskBuilder/StepNameValidator.html +264 -0
- data/docs/Tasker/TaskBuilder/StepTemplateDefiner.html +264 -0
- data/docs/Tasker/TaskBuilder.html +764 -0
- data/docs/Tasker/TaskDiagram/StepToStepEdgeBuilder.html +260 -0
- data/docs/Tasker/TaskDiagram/TaskToRootStepEdgeBuilder.html +290 -0
- data/docs/Tasker/TaskDiagram.html +548 -0
- data/docs/Tasker/TaskDiagramsController.html +240 -0
- data/docs/Tasker/TaskExecutionContext.html +469 -0
- data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/ClassBasedEventRegistrar.html +238 -0
- data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/YamlEventRegistrar.html +254 -0
- data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner.html +988 -0
- data/docs/Tasker/TaskHandler/ClassMethods.html +357 -0
- data/docs/Tasker/TaskHandler/InstanceMethods.html +1396 -0
- data/docs/Tasker/TaskHandler/StepGroup.html +1748 -0
- data/docs/Tasker/TaskHandler.html +271 -0
- data/docs/Tasker/TaskNamespace.html +312 -0
- data/docs/Tasker/TaskRunnerJob.html +406 -0
- data/docs/Tasker/TaskSerializer.html +474 -0
- data/docs/Tasker/TaskTransition.html +1517 -0
- data/docs/Tasker/TaskWorkflowSummary.html +988 -0
- data/docs/Tasker/TaskerRailsSchema/InvalidObjectTypeError.html +132 -0
- data/docs/Tasker/TaskerRailsSchema/TypeResolutionError.html +139 -0
- data/docs/Tasker/TaskerRailsSchema/UnknownInterfaceError.html +132 -0
- data/docs/Tasker/TaskerRailsSchema.html +384 -0
- data/docs/Tasker/TasksController.html +595 -0
- data/docs/Tasker/Telemetry/EventMapping.html +1307 -0
- data/docs/Tasker/Telemetry/EventRouter.html +2178 -0
- data/docs/Tasker/Telemetry/Events/ExportEvents.html +246 -0
- data/docs/Tasker/Telemetry/Events.html +115 -0
- data/docs/Tasker/Telemetry/ExportCoordinator/DistributedLockTimeoutError.html +135 -0
- data/docs/Tasker/Telemetry/ExportCoordinator.html +2137 -0
- data/docs/Tasker/Telemetry/IntelligentCacheManager.html +1083 -0
- data/docs/Tasker/Telemetry/LogBackend.html +1088 -0
- data/docs/Tasker/Telemetry/MetricTypes/Counter.html +1054 -0
- data/docs/Tasker/Telemetry/MetricTypes/Gauge.html +1270 -0
- data/docs/Tasker/Telemetry/MetricTypes/Histogram.html +1492 -0
- data/docs/Tasker/Telemetry/MetricTypes.html +153 -0
- data/docs/Tasker/Telemetry/MetricsBackend.html +2510 -0
- data/docs/Tasker/Telemetry/MetricsExportService.html +578 -0
- data/docs/Tasker/Telemetry/PluginRegistry.html +1774 -0
- data/docs/Tasker/Telemetry/Plugins/BaseExporter.html +1835 -0
- data/docs/Tasker/Telemetry/Plugins/CsvExporter.html +768 -0
- data/docs/Tasker/Telemetry/Plugins/JsonExporter.html +747 -0
- data/docs/Tasker/Telemetry/Plugins.html +117 -0
- data/docs/Tasker/Telemetry/PrometheusExporter.html +481 -0
- data/docs/Tasker/Telemetry/TraceBackend.html +891 -0
- data/docs/Tasker/Telemetry.html +130 -0
- data/docs/Tasker/Types/AuthConfig.html +886 -0
- data/docs/Tasker/Types/BackoffConfig.html +1063 -0
- data/docs/Tasker/Types/BaseConfig.html +227 -0
- data/docs/Tasker/Types/CacheConfig.html +1731 -0
- data/docs/Tasker/Types/DatabaseConfig.html +388 -0
- data/docs/Tasker/Types/DependencyGraph.html +526 -0
- data/docs/Tasker/Types/DependencyGraphConfig.html +753 -0
- data/docs/Tasker/Types/EngineConfig.html +1181 -0
- data/docs/Tasker/Types/ExecutionConfig.html +1963 -0
- data/docs/Tasker/Types/GraphEdge.html +517 -0
- data/docs/Tasker/Types/GraphMetadata.html +781 -0
- data/docs/Tasker/Types/GraphNode.html +694 -0
- data/docs/Tasker/Types/HealthConfig.html +784 -0
- data/docs/Tasker/Types/StepSequence.html +353 -0
- data/docs/Tasker/Types/StepTemplate.html +1193 -0
- data/docs/Tasker/Types/TaskRequest.html +1179 -0
- data/docs/Tasker/Types/TelemetryConfig.html +2746 -0
- data/docs/Tasker/Types.html +154 -0
- data/docs/Tasker/WorkflowStep/StepFinder.html +282 -0
- data/docs/Tasker/WorkflowStep.html +2724 -0
- data/docs/Tasker/WorkflowStepEdge.html +304 -0
- data/docs/Tasker/WorkflowStepSerializer.html +305 -0
- data/docs/Tasker/WorkflowStepTransition/TransitionDescriptionFormatter.html +282 -0
- data/docs/Tasker/WorkflowStepTransition.html +2201 -0
- data/docs/Tasker/WorkflowStepsController.html +462 -0
- data/docs/Tasker.html +452 -0
- data/docs/VISION.md +584 -0
- data/docs/WHY.md +21 -0
- data/docs/_index.html +2375 -0
- data/docs/class_list.html +54 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +503 -0
- data/docs/events/migration_plan_outcomes.md +80 -0
- data/docs/file.README.html +541 -0
- data/docs/file_list.html +59 -0
- data/docs/frames.html +22 -0
- data/docs/index.html +541 -0
- data/docs/js/app.js +344 -0
- data/docs/js/full_list.js +242 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +9182 -0
- data/docs/top-level-namespace.html +110 -0
- data/lib/generators/tasker/authenticator_generator.rb +301 -0
- data/lib/generators/tasker/authorization_coordinator_generator.rb +139 -0
- data/lib/generators/tasker/events_generator.rb +91 -0
- data/lib/generators/tasker/subscriber_generator.rb +107 -0
- data/lib/generators/tasker/task_handler_generator.rb +138 -0
- data/lib/generators/tasker/templates/api_token_authenticator.rb.erb +113 -0
- data/lib/generators/tasker/templates/api_token_authenticator_spec.rb.erb +144 -0
- data/lib/generators/tasker/templates/authorization_coordinator.rb.erb +95 -0
- data/lib/generators/tasker/templates/authorization_coordinator_spec.rb.erb +142 -0
- data/lib/generators/tasker/templates/custom_authenticator.rb.erb +108 -0
- data/lib/generators/tasker/templates/custom_authenticator_spec.rb.erb +162 -0
- data/lib/generators/tasker/templates/custom_events.yml.erb +62 -0
- data/lib/generators/tasker/templates/custom_subscriber.rb.erb +72 -0
- data/lib/generators/tasker/templates/devise_authenticator.rb.erb +101 -0
- data/lib/generators/tasker/templates/devise_authenticator_spec.rb.erb +126 -0
- data/lib/generators/tasker/templates/initialize.rb.erb +202 -0
- data/lib/generators/tasker/templates/jwt_authenticator.rb.erb +144 -0
- data/lib/generators/tasker/templates/jwt_authenticator_spec.rb.erb +298 -0
- data/lib/generators/tasker/templates/metrics_subscriber.rb.erb +258 -0
- data/lib/generators/tasker/templates/metrics_subscriber_spec.rb.erb +308 -0
- data/lib/generators/tasker/templates/omniauth_authenticator.rb.erb +135 -0
- data/lib/generators/tasker/templates/omniauth_authenticator_spec.rb.erb +196 -0
- data/lib/generators/tasker/templates/opentelemetry_initializer.rb +52 -0
- data/lib/generators/tasker/templates/subscriber.rb.erb +64 -0
- data/lib/generators/tasker/templates/subscriber_spec.rb.erb +80 -0
- data/lib/generators/tasker/templates/task_config.yaml.erb +117 -0
- data/lib/generators/tasker/templates/task_handler.rb.erb +59 -0
- data/lib/generators/tasker/templates/task_handler_spec.rb.erb +159 -0
- data/lib/tasker/analysis/runtime_graph_analyzer.rb +1168 -0
- data/lib/tasker/analysis/template_graph_analyzer.rb +328 -0
- data/lib/tasker/authentication/coordinator.rb +78 -0
- data/lib/tasker/authentication/errors.rb +9 -0
- data/lib/tasker/authentication/interface.rb +36 -0
- data/lib/tasker/authentication/none_authenticator.rb +26 -0
- data/lib/tasker/authorization/base_coordinator.rb +112 -0
- data/lib/tasker/authorization/errors.rb +26 -0
- data/lib/tasker/authorization/resource_constants.rb +74 -0
- data/lib/tasker/authorization/resource_registry.rb +143 -0
- data/lib/tasker/authorization.rb +75 -0
- data/lib/tasker/cache_capabilities.rb +131 -0
- data/lib/tasker/cache_strategy.rb +469 -0
- data/lib/tasker/concerns/authenticatable.rb +41 -0
- data/lib/tasker/concerns/authorizable.rb +204 -0
- data/lib/tasker/concerns/controller_authorizable.rb +124 -0
- data/lib/tasker/concerns/event_publisher.rb +716 -0
- data/lib/tasker/concerns/idempotent_state_transitions.rb +128 -0
- data/lib/tasker/concerns/state_machine_base.rb +218 -0
- data/lib/tasker/concerns/structured_logging.rb +387 -0
- data/lib/tasker/configuration.rb +325 -0
- data/lib/tasker/constants/event_definitions.rb +147 -0
- data/lib/tasker/constants/registry_events.rb +54 -0
- data/lib/tasker/constants.rb +417 -0
- data/lib/tasker/engine.rb +90 -0
- data/lib/tasker/errors.rb +90 -0
- data/lib/tasker/events/catalog.rb +432 -0
- data/lib/tasker/events/custom_registry.rb +175 -0
- data/lib/tasker/events/definition_loader.rb +199 -0
- data/lib/tasker/events/event_payload_builder.rb +461 -0
- data/lib/tasker/events/publisher.rb +149 -0
- data/lib/tasker/events/subscribers/base_subscriber.rb +601 -0
- data/lib/tasker/events/subscribers/metrics_subscriber.rb +120 -0
- data/lib/tasker/events/subscribers/telemetry_subscriber.rb +462 -0
- data/lib/tasker/events/subscription_loader.rb +161 -0
- data/lib/tasker/events.rb +37 -0
- data/lib/tasker/functions/function_based_analytics_metrics.rb +103 -0
- data/lib/tasker/functions/function_based_dependency_levels.rb +54 -0
- data/lib/tasker/functions/function_based_slowest_steps.rb +84 -0
- data/lib/tasker/functions/function_based_slowest_tasks.rb +84 -0
- data/lib/tasker/functions/function_based_step_readiness_status.rb +183 -0
- data/lib/tasker/functions/function_based_system_health_counts.rb +94 -0
- data/lib/tasker/functions/function_based_task_execution_context.rb +148 -0
- data/lib/tasker/functions/function_wrapper.rb +42 -0
- data/lib/tasker/functions.rb +12 -0
- data/lib/tasker/handler_factory.rb +322 -0
- data/lib/tasker/health/readiness_checker.rb +186 -0
- data/lib/tasker/health/status_checker.rb +203 -0
- data/lib/tasker/identity_strategy.rb +38 -0
- data/lib/tasker/logging/correlation_id_generator.rb +120 -0
- data/lib/tasker/orchestration/backoff_calculator.rb +184 -0
- data/lib/tasker/orchestration/connection_builder.rb +122 -0
- data/lib/tasker/orchestration/connection_pool_intelligence.rb +177 -0
- data/lib/tasker/orchestration/coordinator.rb +119 -0
- data/lib/tasker/orchestration/future_state_analyzer.rb +137 -0
- data/lib/tasker/orchestration/plugin_integration.rb +124 -0
- data/lib/tasker/orchestration/response_processor.rb +168 -0
- data/lib/tasker/orchestration/retry_header_parser.rb +78 -0
- data/lib/tasker/orchestration/step_executor.rb +941 -0
- data/lib/tasker/orchestration/step_sequence_factory.rb +67 -0
- data/lib/tasker/orchestration/task_finalizer.rb +564 -0
- data/lib/tasker/orchestration/task_initializer.rb +140 -0
- data/lib/tasker/orchestration/task_reenqueuer.rb +71 -0
- data/lib/tasker/orchestration/viable_step_discovery.rb +65 -0
- data/lib/tasker/orchestration/workflow_coordinator.rb +294 -0
- data/lib/tasker/orchestration.rb +45 -0
- data/lib/tasker/railtie.rb +9 -0
- data/lib/tasker/registry/base_registry.rb +177 -0
- data/lib/tasker/registry/event_publisher.rb +91 -0
- data/lib/tasker/registry/interface_validator.rb +140 -0
- data/lib/tasker/registry/statistics_collector.rb +381 -0
- data/lib/tasker/registry/subscriber_registry.rb +285 -0
- data/lib/tasker/registry.rb +22 -0
- data/lib/tasker/state_machine/step_state_machine.rb +508 -0
- data/lib/tasker/state_machine/task_state_machine.rb +192 -0
- data/lib/tasker/state_machine.rb +83 -0
- data/lib/tasker/step_handler/api.rb +410 -0
- data/lib/tasker/step_handler/base.rb +206 -0
- data/lib/tasker/task_builder.rb +432 -0
- data/lib/tasker/task_handler/class_methods.rb +324 -0
- data/lib/tasker/task_handler/instance_methods.rb +293 -0
- data/lib/tasker/task_handler/step_group.rb +182 -0
- data/lib/tasker/task_handler.rb +43 -0
- data/lib/tasker/telemetry/event_mapping.rb +126 -0
- data/lib/tasker/telemetry/event_router.rb +318 -0
- data/lib/tasker/telemetry/events/export_events.rb +38 -0
- data/lib/tasker/telemetry/export_coordinator.rb +497 -0
- data/lib/tasker/telemetry/intelligent_cache_manager.rb +508 -0
- data/lib/tasker/telemetry/log_backend.rb +224 -0
- data/lib/tasker/telemetry/metric_types.rb +368 -0
- data/lib/tasker/telemetry/metrics_backend.rb +1227 -0
- data/lib/tasker/telemetry/metrics_export_service.rb +392 -0
- data/lib/tasker/telemetry/plugin_registry.rb +333 -0
- data/lib/tasker/telemetry/plugins/base_exporter.rb +246 -0
- data/lib/tasker/telemetry/plugins/csv_exporter.rb +198 -0
- data/lib/tasker/telemetry/plugins/json_exporter.rb +141 -0
- data/lib/tasker/telemetry/prometheus_exporter.rb +249 -0
- data/lib/tasker/telemetry/trace_backend.rb +186 -0
- data/lib/tasker/telemetry.rb +59 -0
- data/lib/tasker/types/auth_config.rb +81 -0
- data/lib/tasker/types/backoff_config.rb +142 -0
- data/lib/tasker/types/cache_config.rb +257 -0
- data/lib/tasker/types/database_config.rb +39 -0
- data/lib/tasker/types/dependency_graph.rb +225 -0
- data/lib/tasker/types/dependency_graph_config.rb +149 -0
- data/lib/tasker/types/engine_config.rb +131 -0
- data/lib/tasker/types/execution_config.rb +289 -0
- data/lib/tasker/types/health_config.rb +84 -0
- data/lib/tasker/types/step_sequence.rb +24 -0
- data/lib/tasker/types/step_template.rb +63 -0
- data/lib/tasker/types/task_request.rb +60 -0
- data/lib/tasker/types/telemetry_config.rb +273 -0
- data/lib/tasker/types.rb +64 -0
- data/lib/tasker/version.rb +7 -0
- data/lib/tasker.rb +82 -0
- data/lib/tasks/tasker_tasks.rake +302 -0
- metadata +958 -0
@@ -0,0 +1,2556 @@
|
|
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::Events::Subscribers::BaseSubscriber
|
8
|
+
|
9
|
+
— 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::Events::Subscribers::BaseSubscriber";
|
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 (B)</a> »
|
40
|
+
<span class='title'><span class='object_link'><a href="../../../Tasker.html" title="Tasker (module)">Tasker</a></span></span> » <span class='title'><span class='object_link'><a href="../../Events.html" title="Tasker::Events (module)">Events</a></span></span> » <span class='title'><span class='object_link'><a href="../Subscribers.html" title="Tasker::Events::Subscribers (module)">Subscribers</a></span></span>
|
41
|
+
»
|
42
|
+
<span class="title">BaseSubscriber</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::Events::Subscribers::BaseSubscriber
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
</h1>
|
67
|
+
<div class="box_info">
|
68
|
+
|
69
|
+
<dl>
|
70
|
+
<dt>Inherits:</dt>
|
71
|
+
<dd>
|
72
|
+
<span class="inheritName">Object</span>
|
73
|
+
|
74
|
+
<ul class="fullTree">
|
75
|
+
<li>Object</li>
|
76
|
+
|
77
|
+
<li class="next">Tasker::Events::Subscribers::BaseSubscriber</li>
|
78
|
+
|
79
|
+
</ul>
|
80
|
+
<a href="#" class="inheritanceTree">show all</a>
|
81
|
+
|
82
|
+
</dd>
|
83
|
+
</dl>
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
<dl>
|
96
|
+
<dt>Defined in:</dt>
|
97
|
+
<dd>lib/tasker/events/subscribers/base_subscriber.rb</dd>
|
98
|
+
</dl>
|
99
|
+
|
100
|
+
</div>
|
101
|
+
|
102
|
+
<h2>Overview</h2><div class="docstring">
|
103
|
+
<div class="discussion">
|
104
|
+
|
105
|
+
<p>BaseSubscriber provides a clean foundation for creating custom event subscribers</p>
|
106
|
+
|
107
|
+
<p>This class extracts common patterns from TelemetrySubscriber and provides: - Declarative subscription registration via class methods - Automatic method routing from event names to handler methods - Defensive payload handling with safe accessors - Easy integration with the Tasker event system - Metrics collection helper methods for common patterns</p>
|
108
|
+
|
109
|
+
<p>Usage: class OrderNotificationSubscriber < Tasker::Events::Subscribers::BaseSubscriber subscribe_to :task_completed, :step_failed</p>
|
110
|
+
|
111
|
+
<pre class="code ruby"><code class="ruby"><span class='kw'>def</span> <span class='id identifier rubyid_handle_task_completed'>handle_task_completed</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
112
|
+
<span class='const'>OrderMailer</span><span class='period'>.</span><span class='id identifier rubyid_completion_email'>completion_email</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='lbracket'>[</span><span class='symbol'>:task_id</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_deliver_later'>deliver_later</span>
|
113
|
+
<span class='kw'>end</span>
|
114
|
+
|
115
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_handle_step_failed'>handle_step_failed</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
116
|
+
<span class='const'>AlertService</span><span class='period'>.</span><span class='id identifier rubyid_notify'>notify</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Step failed: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_event'>event</span><span class='lbracket'>[</span><span class='symbol'>:step_name</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
117
|
+
<span class='kw'>end</span>
|
118
|
+
</code></pre>
|
119
|
+
|
120
|
+
<p>end</p>
|
121
|
+
|
122
|
+
<p># Register the subscriber OrderNotificationSubscriber.subscribe(Tasker::Events::Publisher.instance)</p>
|
123
|
+
|
124
|
+
|
125
|
+
</div>
|
126
|
+
</div>
|
127
|
+
<div class="tags">
|
128
|
+
|
129
|
+
|
130
|
+
</div><div id="subclasses">
|
131
|
+
<h2>Direct Known Subclasses</h2>
|
132
|
+
<p class="children"><span class='object_link'><a href="MetricsSubscriber.html" title="Tasker::Events::Subscribers::MetricsSubscriber (class)">MetricsSubscriber</a></span>, <span class='object_link'><a href="TelemetrySubscriber.html" title="Tasker::Events::Subscribers::TelemetrySubscriber (class)">TelemetrySubscriber</a></span></p>
|
133
|
+
</div>
|
134
|
+
<h2>Defined Under Namespace</h2>
|
135
|
+
<p class="children">
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
<strong class="classes">Classes:</strong> <span class='object_link'><a href="BaseSubscriber/ErrorCategorizer.html" title="Tasker::Events::Subscribers::BaseSubscriber::ErrorCategorizer (class)">ErrorCategorizer</a></span>, <span class='object_link'><a href="BaseSubscriber/MetricTagsExtractor.html" title="Tasker::Events::Subscribers::BaseSubscriber::MetricTagsExtractor (class)">MetricTagsExtractor</a></span>
|
141
|
+
|
142
|
+
|
143
|
+
</p>
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
<h2>
|
153
|
+
Class Method Summary
|
154
|
+
<small><a href="#" class="summary_toggle">collapse</a></small>
|
155
|
+
</h2>
|
156
|
+
|
157
|
+
<ul class="summary">
|
158
|
+
|
159
|
+
<li class="public ">
|
160
|
+
<span class="summary_signature">
|
161
|
+
|
162
|
+
<a href="#filter_events-class_method" title="filter_events (class method)">.<strong>filter_events</strong>(&filter_proc) ⇒ void </a>
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
</span>
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
<span class="summary_desc"><div class='inline'>
|
177
|
+
<p>Set a filter for events (optional).</p>
|
178
|
+
</div></span>
|
179
|
+
|
180
|
+
</li>
|
181
|
+
|
182
|
+
|
183
|
+
<li class="public ">
|
184
|
+
<span class="summary_signature">
|
185
|
+
|
186
|
+
<a href="#subscribe-class_method" title="subscribe (class method)">.<strong>subscribe</strong>(publisher) ⇒ BaseSubscriber </a>
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
</span>
|
191
|
+
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
|
198
|
+
|
199
|
+
|
200
|
+
<span class="summary_desc"><div class='inline'>
|
201
|
+
<p>Subscribe this subscriber to a publisher.</p>
|
202
|
+
</div></span>
|
203
|
+
|
204
|
+
</li>
|
205
|
+
|
206
|
+
|
207
|
+
<li class="public ">
|
208
|
+
<span class="summary_signature">
|
209
|
+
|
210
|
+
<a href="#subscribe_to-class_method" title="subscribe_to (class method)">.<strong>subscribe_to</strong>(*events) ⇒ void </a>
|
211
|
+
|
212
|
+
|
213
|
+
|
214
|
+
</span>
|
215
|
+
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
|
224
|
+
<span class="summary_desc"><div class='inline'>
|
225
|
+
<p>Declarative method to register events this subscriber cares about.</p>
|
226
|
+
</div></span>
|
227
|
+
|
228
|
+
</li>
|
229
|
+
|
230
|
+
|
231
|
+
</ul>
|
232
|
+
|
233
|
+
<h2>
|
234
|
+
Instance Method Summary
|
235
|
+
<small><a href="#" class="summary_toggle">collapse</a></small>
|
236
|
+
</h2>
|
237
|
+
|
238
|
+
<ul class="summary">
|
239
|
+
|
240
|
+
<li class="protected ">
|
241
|
+
<span class="summary_signature">
|
242
|
+
|
243
|
+
<a href="#build_event_subscriptions-instance_method" title="#build_event_subscriptions (instance method)">#<strong>build_event_subscriptions</strong> ⇒ Hash </a>
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
</span>
|
248
|
+
|
249
|
+
|
250
|
+
|
251
|
+
<span class="note title protected">protected</span>
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
<span class="summary_desc"><div class='inline'>
|
258
|
+
<p>Build event subscriptions using explicit constants.</p>
|
259
|
+
</div></span>
|
260
|
+
|
261
|
+
</li>
|
262
|
+
|
263
|
+
|
264
|
+
<li class="protected ">
|
265
|
+
<span class="summary_signature">
|
266
|
+
|
267
|
+
<a href="#build_metric_name-instance_method" title="#build_metric_name (instance method)">#<strong>build_metric_name</strong>(base_name, event_type) ⇒ String </a>
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
</span>
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
<span class="note title protected">protected</span>
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
<span class="summary_desc"><div class='inline'>
|
282
|
+
<p>Create metric name with consistent naming convention.</p>
|
283
|
+
</div></span>
|
284
|
+
|
285
|
+
</li>
|
286
|
+
|
287
|
+
|
288
|
+
<li class="protected ">
|
289
|
+
<span class="summary_signature">
|
290
|
+
|
291
|
+
<a href="#custom_event%3F-instance_method" title="#custom_event? (instance method)">#<strong>custom_event?</strong>(event_constant) ⇒ Boolean </a>
|
292
|
+
|
293
|
+
|
294
|
+
|
295
|
+
</span>
|
296
|
+
|
297
|
+
|
298
|
+
|
299
|
+
<span class="note title protected">protected</span>
|
300
|
+
|
301
|
+
|
302
|
+
|
303
|
+
|
304
|
+
|
305
|
+
<span class="summary_desc"><div class='inline'>
|
306
|
+
<p>Check if an event is a custom event (not a system constant).</p>
|
307
|
+
</div></span>
|
308
|
+
|
309
|
+
</li>
|
310
|
+
|
311
|
+
|
312
|
+
<li class="protected ">
|
313
|
+
<span class="summary_signature">
|
314
|
+
|
315
|
+
<a href="#event_subscriptions-instance_method" title="#event_subscriptions (instance method)">#<strong>event_subscriptions</strong> ⇒ Hash </a>
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
</span>
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
+
<span class="note title protected">protected</span>
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
|
328
|
+
|
329
|
+
<span class="summary_desc"><div class='inline'>
|
330
|
+
<p>Get event subscriptions mapping for this subscriber.</p>
|
331
|
+
</div></span>
|
332
|
+
|
333
|
+
</li>
|
334
|
+
|
335
|
+
|
336
|
+
<li class="protected ">
|
337
|
+
<span class="summary_signature">
|
338
|
+
|
339
|
+
<a href="#extract_core_attributes-instance_method" title="#extract_core_attributes (instance method)">#<strong>extract_core_attributes</strong>(event) ⇒ Hash </a>
|
340
|
+
|
341
|
+
|
342
|
+
|
343
|
+
</span>
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
<span class="note title protected">protected</span>
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
<span class="summary_desc"><div class='inline'>
|
354
|
+
<p>Extract core attributes common to most events.</p>
|
355
|
+
</div></span>
|
356
|
+
|
357
|
+
</li>
|
358
|
+
|
359
|
+
|
360
|
+
<li class="protected ">
|
361
|
+
<span class="summary_signature">
|
362
|
+
|
363
|
+
<a href="#extract_error_metrics-instance_method" title="#extract_error_metrics (instance method)">#<strong>extract_error_metrics</strong>(event) ⇒ Hash </a>
|
364
|
+
|
365
|
+
|
366
|
+
|
367
|
+
</span>
|
368
|
+
|
369
|
+
|
370
|
+
|
371
|
+
<span class="note title protected">protected</span>
|
372
|
+
|
373
|
+
|
374
|
+
|
375
|
+
|
376
|
+
|
377
|
+
<span class="summary_desc"><div class='inline'>
|
378
|
+
<p>Extract error metrics from failure events.</p>
|
379
|
+
</div></span>
|
380
|
+
|
381
|
+
</li>
|
382
|
+
|
383
|
+
|
384
|
+
<li class="protected ">
|
385
|
+
<span class="summary_signature">
|
386
|
+
|
387
|
+
<a href="#extract_metric_tags-instance_method" title="#extract_metric_tags (instance method)">#<strong>extract_metric_tags</strong>(event) ⇒ Array<String> </a>
|
388
|
+
|
389
|
+
|
390
|
+
|
391
|
+
</span>
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
<span class="note title protected">protected</span>
|
396
|
+
|
397
|
+
|
398
|
+
|
399
|
+
|
400
|
+
|
401
|
+
<span class="summary_desc"><div class='inline'>
|
402
|
+
<p>Extract business metrics tags for categorization.</p>
|
403
|
+
</div></span>
|
404
|
+
|
405
|
+
</li>
|
406
|
+
|
407
|
+
|
408
|
+
<li class="protected ">
|
409
|
+
<span class="summary_signature">
|
410
|
+
|
411
|
+
<a href="#extract_numeric_metric-instance_method" title="#extract_numeric_metric (instance method)">#<strong>extract_numeric_metric</strong>(event, key, default = 0) ⇒ Numeric </a>
|
412
|
+
|
413
|
+
|
414
|
+
|
415
|
+
</span>
|
416
|
+
|
417
|
+
|
418
|
+
|
419
|
+
<span class="note title protected">protected</span>
|
420
|
+
|
421
|
+
|
422
|
+
|
423
|
+
|
424
|
+
|
425
|
+
<span class="summary_desc"><div class='inline'>
|
426
|
+
<p>Extract numeric value safely for metrics.</p>
|
427
|
+
</div></span>
|
428
|
+
|
429
|
+
</li>
|
430
|
+
|
431
|
+
|
432
|
+
<li class="protected ">
|
433
|
+
<span class="summary_signature">
|
434
|
+
|
435
|
+
<a href="#extract_performance_metrics-instance_method" title="#extract_performance_metrics (instance method)">#<strong>extract_performance_metrics</strong>(event) ⇒ Hash </a>
|
436
|
+
|
437
|
+
|
438
|
+
|
439
|
+
</span>
|
440
|
+
|
441
|
+
|
442
|
+
|
443
|
+
<span class="note title protected">protected</span>
|
444
|
+
|
445
|
+
|
446
|
+
|
447
|
+
|
448
|
+
|
449
|
+
<span class="summary_desc"><div class='inline'>
|
450
|
+
<p>Extract performance metrics for operational monitoring.</p>
|
451
|
+
</div></span>
|
452
|
+
|
453
|
+
</li>
|
454
|
+
|
455
|
+
|
456
|
+
<li class="protected ">
|
457
|
+
<span class="summary_signature">
|
458
|
+
|
459
|
+
<a href="#extract_step_attributes-instance_method" title="#extract_step_attributes (instance method)">#<strong>extract_step_attributes</strong>(event) ⇒ Hash </a>
|
460
|
+
|
461
|
+
|
462
|
+
|
463
|
+
</span>
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
<span class="note title protected">protected</span>
|
468
|
+
|
469
|
+
|
470
|
+
|
471
|
+
|
472
|
+
|
473
|
+
<span class="summary_desc"><div class='inline'>
|
474
|
+
<p>Extract step-specific attributes (for TelemetrySubscriber compatibility).</p>
|
475
|
+
</div></span>
|
476
|
+
|
477
|
+
</li>
|
478
|
+
|
479
|
+
|
480
|
+
<li class="protected ">
|
481
|
+
<span class="summary_signature">
|
482
|
+
|
483
|
+
<a href="#extract_timing_metrics-instance_method" title="#extract_timing_metrics (instance method)">#<strong>extract_timing_metrics</strong>(event) ⇒ Hash </a>
|
484
|
+
|
485
|
+
|
486
|
+
|
487
|
+
</span>
|
488
|
+
|
489
|
+
|
490
|
+
|
491
|
+
<span class="note title protected">protected</span>
|
492
|
+
|
493
|
+
|
494
|
+
|
495
|
+
|
496
|
+
|
497
|
+
<span class="summary_desc"><div class='inline'>
|
498
|
+
<p>Extract timing metrics from completion events.</p>
|
499
|
+
</div></span>
|
500
|
+
|
501
|
+
</li>
|
502
|
+
|
503
|
+
|
504
|
+
<li class="protected ">
|
505
|
+
<span class="summary_signature">
|
506
|
+
|
507
|
+
<a href="#generate_handler_method_name-instance_method" title="#generate_handler_method_name (instance method)">#<strong>generate_handler_method_name</strong>(event_name) ⇒ Symbol </a>
|
508
|
+
|
509
|
+
|
510
|
+
|
511
|
+
</span>
|
512
|
+
|
513
|
+
|
514
|
+
|
515
|
+
<span class="note title protected">protected</span>
|
516
|
+
|
517
|
+
|
518
|
+
|
519
|
+
|
520
|
+
|
521
|
+
<span class="summary_desc"><div class='inline'>
|
522
|
+
<p>Generate handler method name from event name.</p>
|
523
|
+
</div></span>
|
524
|
+
|
525
|
+
</li>
|
526
|
+
|
527
|
+
|
528
|
+
<li class="public ">
|
529
|
+
<span class="summary_signature">
|
530
|
+
|
531
|
+
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(name: nil, events: nil, config: {}) ⇒ BaseSubscriber </a>
|
532
|
+
|
533
|
+
|
534
|
+
|
535
|
+
</span>
|
536
|
+
|
537
|
+
|
538
|
+
<span class="note title constructor">constructor</span>
|
539
|
+
|
540
|
+
|
541
|
+
|
542
|
+
|
543
|
+
|
544
|
+
|
545
|
+
|
546
|
+
|
547
|
+
<span class="summary_desc"><div class='inline'>
|
548
|
+
<p>A new instance of BaseSubscriber.</p>
|
549
|
+
</div></span>
|
550
|
+
|
551
|
+
</li>
|
552
|
+
|
553
|
+
|
554
|
+
<li class="protected ">
|
555
|
+
<span class="summary_signature">
|
556
|
+
|
557
|
+
<a href="#resolve_internal_event_constant-instance_method" title="#resolve_internal_event_constant (instance method)">#<strong>resolve_internal_event_constant</strong>(event_name) ⇒ String </a>
|
558
|
+
|
559
|
+
|
560
|
+
|
561
|
+
</span>
|
562
|
+
|
563
|
+
|
564
|
+
|
565
|
+
<span class="note title protected">protected</span>
|
566
|
+
|
567
|
+
|
568
|
+
|
569
|
+
|
570
|
+
|
571
|
+
<span class="summary_desc"><div class='inline'>
|
572
|
+
<p>Resolve developer-friendly event name to internal constant.</p>
|
573
|
+
</div></span>
|
574
|
+
|
575
|
+
</li>
|
576
|
+
|
577
|
+
|
578
|
+
<li class="protected ">
|
579
|
+
<span class="summary_signature">
|
580
|
+
|
581
|
+
<a href="#safe_get-instance_method" title="#safe_get (instance method)">#<strong>safe_get</strong>(event, key, default = nil) ⇒ Object </a>
|
582
|
+
|
583
|
+
|
584
|
+
|
585
|
+
</span>
|
586
|
+
|
587
|
+
|
588
|
+
|
589
|
+
<span class="note title protected">protected</span>
|
590
|
+
|
591
|
+
|
592
|
+
|
593
|
+
|
594
|
+
|
595
|
+
<span class="summary_desc"><div class='inline'>
|
596
|
+
<p>Safe accessor for event payload keys with fallback values.</p>
|
597
|
+
</div></span>
|
598
|
+
|
599
|
+
</li>
|
600
|
+
|
601
|
+
|
602
|
+
<li class="protected ">
|
603
|
+
<span class="summary_signature">
|
604
|
+
|
605
|
+
<a href="#should_handle_event%3F-instance_method" title="#should_handle_event? (instance method)">#<strong>should_handle_event?</strong>(event_constant) ⇒ Boolean </a>
|
606
|
+
|
607
|
+
|
608
|
+
|
609
|
+
</span>
|
610
|
+
|
611
|
+
|
612
|
+
|
613
|
+
<span class="note title protected">protected</span>
|
614
|
+
|
615
|
+
|
616
|
+
|
617
|
+
|
618
|
+
|
619
|
+
<span class="summary_desc"><div class='inline'>
|
620
|
+
<p>Check if this subscriber should handle the given event.</p>
|
621
|
+
</div></span>
|
622
|
+
|
623
|
+
</li>
|
624
|
+
|
625
|
+
|
626
|
+
<li class="protected ">
|
627
|
+
<span class="summary_signature">
|
628
|
+
|
629
|
+
<a href="#should_process_event%3F-instance_method" title="#should_process_event? (instance method)">#<strong>should_process_event?</strong>(_event_constant) ⇒ Boolean </a>
|
630
|
+
|
631
|
+
|
632
|
+
|
633
|
+
</span>
|
634
|
+
|
635
|
+
|
636
|
+
|
637
|
+
<span class="note title protected">protected</span>
|
638
|
+
|
639
|
+
|
640
|
+
|
641
|
+
|
642
|
+
|
643
|
+
<span class="summary_desc"><div class='inline'>
|
644
|
+
<p>Instance-level event filtering (override in subclasses).</p>
|
645
|
+
</div></span>
|
646
|
+
|
647
|
+
</li>
|
648
|
+
|
649
|
+
|
650
|
+
<li class="public ">
|
651
|
+
<span class="summary_signature">
|
652
|
+
|
653
|
+
<a href="#subscribe_to_publisher-instance_method" title="#subscribe_to_publisher (instance method)">#<strong>subscribe_to_publisher</strong>(publisher) ⇒ void </a>
|
654
|
+
|
655
|
+
|
656
|
+
|
657
|
+
</span>
|
658
|
+
|
659
|
+
|
660
|
+
|
661
|
+
|
662
|
+
|
663
|
+
|
664
|
+
|
665
|
+
|
666
|
+
|
667
|
+
<span class="summary_desc"><div class='inline'>
|
668
|
+
<p>Subscribe to all events defined by the class.</p>
|
669
|
+
</div></span>
|
670
|
+
|
671
|
+
</li>
|
672
|
+
|
673
|
+
|
674
|
+
</ul>
|
675
|
+
|
676
|
+
|
677
|
+
<div id="constructor_details" class="method_details_list">
|
678
|
+
<h2>Constructor Details</h2>
|
679
|
+
|
680
|
+
<div class="method_details first">
|
681
|
+
<h3 class="signature first" id="initialize-instance_method">
|
682
|
+
|
683
|
+
#<strong>initialize</strong>(name: nil, events: nil, config: {}) ⇒ <tt><span class='object_link'><a href="" title="Tasker::Events::Subscribers::BaseSubscriber (class)">BaseSubscriber</a></span></tt>
|
684
|
+
|
685
|
+
|
686
|
+
|
687
|
+
|
688
|
+
|
689
|
+
</h3><div class="docstring">
|
690
|
+
<div class="discussion">
|
691
|
+
|
692
|
+
<p>Returns a new instance of BaseSubscriber.</p>
|
693
|
+
|
694
|
+
|
695
|
+
</div>
|
696
|
+
</div>
|
697
|
+
<div class="tags">
|
698
|
+
|
699
|
+
|
700
|
+
</div><table class="source_code">
|
701
|
+
<tr>
|
702
|
+
<td>
|
703
|
+
<pre class="lines">
|
704
|
+
|
705
|
+
|
706
|
+
34
|
707
|
+
35
|
708
|
+
36
|
709
|
+
37
|
710
|
+
38
|
711
|
+
39
|
712
|
+
40
|
713
|
+
41
|
714
|
+
42
|
715
|
+
43</pre>
|
716
|
+
</td>
|
717
|
+
<td>
|
718
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 34</span>
|
719
|
+
|
720
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>name:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>events:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>config:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
721
|
+
<span class='ivar'>@subscription_name</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span>
|
722
|
+
<span class='ivar'>@subscription_config</span> <span class='op'>=</span> <span class='id identifier rubyid_config'>config</span>
|
723
|
+
|
724
|
+
<span class='comment'># If events are provided via constructor (from YAML), add them to subscribed events
|
725
|
+
</span> <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_events'>events</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
|
726
|
+
|
727
|
+
<span class='id identifier rubyid_current_events'>current_events</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_subscribed_events'>subscribed_events</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
728
|
+
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_subscribed_events'>subscribed_events</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_current_events'>current_events</span> <span class='op'>+</span> <span class='const'>Array</span><span class='lparen'>(</span><span class='id identifier rubyid_events'>events</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
|
729
|
+
<span class='kw'>end</span></pre>
|
730
|
+
</td>
|
731
|
+
</tr>
|
732
|
+
</table>
|
733
|
+
</div>
|
734
|
+
|
735
|
+
</div>
|
736
|
+
|
737
|
+
|
738
|
+
<div id="class_method_details" class="method_details_list">
|
739
|
+
<h2>Class Method Details</h2>
|
740
|
+
|
741
|
+
|
742
|
+
<div class="method_details first">
|
743
|
+
<h3 class="signature first" id="filter_events-class_method">
|
744
|
+
|
745
|
+
.<strong>filter_events</strong>(&filter_proc) ⇒ <tt>void</tt>
|
746
|
+
|
747
|
+
|
748
|
+
|
749
|
+
|
750
|
+
|
751
|
+
</h3><div class="docstring">
|
752
|
+
<div class="discussion">
|
753
|
+
<p class="note returns_void">This method returns an undefined value.</p>
|
754
|
+
<p>Set a filter for events (optional)</p>
|
755
|
+
|
756
|
+
<p>Example: filter_events { |event_name| event_name.include?(‘order’) }</p>
|
757
|
+
|
758
|
+
|
759
|
+
</div>
|
760
|
+
</div>
|
761
|
+
<div class="tags">
|
762
|
+
<p class="tag_title">Parameters:</p>
|
763
|
+
<ul class="param">
|
764
|
+
|
765
|
+
<li>
|
766
|
+
|
767
|
+
<span class='name'>filter_proc</span>
|
768
|
+
|
769
|
+
|
770
|
+
<span class='type'>(<tt>Proc</tt>)</span>
|
771
|
+
|
772
|
+
|
773
|
+
|
774
|
+
—
|
775
|
+
<div class='inline'>
|
776
|
+
<p>A proc that returns true for events to process</p>
|
777
|
+
</div>
|
778
|
+
|
779
|
+
</li>
|
780
|
+
|
781
|
+
</ul>
|
782
|
+
|
783
|
+
|
784
|
+
</div><table class="source_code">
|
785
|
+
<tr>
|
786
|
+
<td>
|
787
|
+
<pre class="lines">
|
788
|
+
|
789
|
+
|
790
|
+
67
|
791
|
+
68
|
792
|
+
69</pre>
|
793
|
+
</td>
|
794
|
+
<td>
|
795
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 67</span>
|
796
|
+
|
797
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_filter_events'>filter_events</span><span class='lparen'>(</span><span class='op'>&</span><span class='id identifier rubyid_filter_proc'>filter_proc</span><span class='rparen'>)</span>
|
798
|
+
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_event_filter'>event_filter</span> <span class='op'>=</span> <span class='id identifier rubyid_filter_proc'>filter_proc</span>
|
799
|
+
<span class='kw'>end</span></pre>
|
800
|
+
</td>
|
801
|
+
</tr>
|
802
|
+
</table>
|
803
|
+
</div>
|
804
|
+
|
805
|
+
<div class="method_details ">
|
806
|
+
<h3 class="signature " id="subscribe-class_method">
|
807
|
+
|
808
|
+
.<strong>subscribe</strong>(publisher) ⇒ <tt><span class='object_link'><a href="" title="Tasker::Events::Subscribers::BaseSubscriber (class)">BaseSubscriber</a></span></tt>
|
809
|
+
|
810
|
+
|
811
|
+
|
812
|
+
|
813
|
+
|
814
|
+
</h3><div class="docstring">
|
815
|
+
<div class="discussion">
|
816
|
+
|
817
|
+
<p>Subscribe this subscriber to a publisher</p>
|
818
|
+
|
819
|
+
|
820
|
+
</div>
|
821
|
+
</div>
|
822
|
+
<div class="tags">
|
823
|
+
<p class="tag_title">Parameters:</p>
|
824
|
+
<ul class="param">
|
825
|
+
|
826
|
+
<li>
|
827
|
+
|
828
|
+
<span class='name'>publisher</span>
|
829
|
+
|
830
|
+
|
831
|
+
<span class='type'>(<tt><span class='object_link'><a href="../Publisher.html" title="Tasker::Events::Publisher (class)">Tasker::Events::Publisher</a></span></tt>)</span>
|
832
|
+
|
833
|
+
|
834
|
+
|
835
|
+
—
|
836
|
+
<div class='inline'>
|
837
|
+
<p>The event publisher</p>
|
838
|
+
</div>
|
839
|
+
|
840
|
+
</li>
|
841
|
+
|
842
|
+
</ul>
|
843
|
+
|
844
|
+
<p class="tag_title">Returns:</p>
|
845
|
+
<ul class="return">
|
846
|
+
|
847
|
+
<li>
|
848
|
+
|
849
|
+
|
850
|
+
<span class='type'>(<tt><span class='object_link'><a href="" title="Tasker::Events::Subscribers::BaseSubscriber (class)">BaseSubscriber</a></span></tt>)</span>
|
851
|
+
|
852
|
+
|
853
|
+
|
854
|
+
—
|
855
|
+
<div class='inline'>
|
856
|
+
<p>The subscriber instance</p>
|
857
|
+
</div>
|
858
|
+
|
859
|
+
</li>
|
860
|
+
|
861
|
+
</ul>
|
862
|
+
|
863
|
+
</div><table class="source_code">
|
864
|
+
<tr>
|
865
|
+
<td>
|
866
|
+
<pre class="lines">
|
867
|
+
|
868
|
+
|
869
|
+
75
|
870
|
+
76
|
871
|
+
77
|
872
|
+
78
|
873
|
+
79</pre>
|
874
|
+
</td>
|
875
|
+
<td>
|
876
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 75</span>
|
877
|
+
|
878
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_subscribe'>subscribe</span><span class='lparen'>(</span><span class='id identifier rubyid_publisher'>publisher</span><span class='rparen'>)</span>
|
879
|
+
<span class='id identifier rubyid_subscriber'>subscriber</span> <span class='op'>=</span> <span class='id identifier rubyid_new'>new</span>
|
880
|
+
<span class='id identifier rubyid_subscriber'>subscriber</span><span class='period'>.</span><span class='id identifier rubyid_subscribe_to_publisher'>subscribe_to_publisher</span><span class='lparen'>(</span><span class='id identifier rubyid_publisher'>publisher</span><span class='rparen'>)</span>
|
881
|
+
<span class='id identifier rubyid_subscriber'>subscriber</span>
|
882
|
+
<span class='kw'>end</span></pre>
|
883
|
+
</td>
|
884
|
+
</tr>
|
885
|
+
</table>
|
886
|
+
</div>
|
887
|
+
|
888
|
+
<div class="method_details ">
|
889
|
+
<h3 class="signature " id="subscribe_to-class_method">
|
890
|
+
|
891
|
+
.<strong>subscribe_to</strong>(*events) ⇒ <tt>void</tt>
|
892
|
+
|
893
|
+
|
894
|
+
|
895
|
+
|
896
|
+
|
897
|
+
</h3><div class="docstring">
|
898
|
+
<div class="discussion">
|
899
|
+
<p class="note returns_void">This method returns an undefined value.</p>
|
900
|
+
<p>Declarative method to register events this subscriber cares about</p>
|
901
|
+
|
902
|
+
<p>Example: subscribe_to :task_completed, :step_failed subscribe_to ‘order.created’, ‘payment.processed’</p>
|
903
|
+
|
904
|
+
|
905
|
+
</div>
|
906
|
+
</div>
|
907
|
+
<div class="tags">
|
908
|
+
<p class="tag_title">Parameters:</p>
|
909
|
+
<ul class="param">
|
910
|
+
|
911
|
+
<li>
|
912
|
+
|
913
|
+
<span class='name'>events</span>
|
914
|
+
|
915
|
+
|
916
|
+
<span class='type'>(<tt>Array<Symbol, String></tt>)</span>
|
917
|
+
|
918
|
+
|
919
|
+
|
920
|
+
—
|
921
|
+
<div class='inline'>
|
922
|
+
<p>Event names to subscribe to</p>
|
923
|
+
</div>
|
924
|
+
|
925
|
+
</li>
|
926
|
+
|
927
|
+
</ul>
|
928
|
+
|
929
|
+
|
930
|
+
</div><table class="source_code">
|
931
|
+
<tr>
|
932
|
+
<td>
|
933
|
+
<pre class="lines">
|
934
|
+
|
935
|
+
|
936
|
+
54
|
937
|
+
55
|
938
|
+
56
|
939
|
+
57
|
940
|
+
58</pre>
|
941
|
+
</td>
|
942
|
+
<td>
|
943
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 54</span>
|
944
|
+
|
945
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_subscribe_to'>subscribe_to</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_events'>events</span><span class='rparen'>)</span>
|
946
|
+
<span class='comment'># Accumulate events instead of replacing them
|
947
|
+
</span> <span class='id identifier rubyid_current_events'>current_events</span> <span class='op'>=</span> <span class='id identifier rubyid_subscribed_events'>subscribed_events</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
948
|
+
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_subscribed_events'>subscribed_events</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_current_events'>current_events</span> <span class='op'>+</span> <span class='id identifier rubyid_events'>events</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:to_s</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
|
949
|
+
<span class='kw'>end</span></pre>
|
950
|
+
</td>
|
951
|
+
</tr>
|
952
|
+
</table>
|
953
|
+
</div>
|
954
|
+
|
955
|
+
</div>
|
956
|
+
|
957
|
+
<div id="instance_method_details" class="method_details_list">
|
958
|
+
<h2>Instance Method Details</h2>
|
959
|
+
|
960
|
+
|
961
|
+
<div class="method_details first">
|
962
|
+
<h3 class="signature first" id="build_event_subscriptions-instance_method">
|
963
|
+
|
964
|
+
#<strong>build_event_subscriptions</strong> ⇒ <tt>Hash</tt> <span class="extras">(protected)</span>
|
965
|
+
|
966
|
+
|
967
|
+
|
968
|
+
|
969
|
+
|
970
|
+
</h3><div class="docstring">
|
971
|
+
<div class="discussion">
|
972
|
+
|
973
|
+
<p>Build event subscriptions using explicit constants</p>
|
974
|
+
|
975
|
+
|
976
|
+
</div>
|
977
|
+
</div>
|
978
|
+
<div class="tags">
|
979
|
+
|
980
|
+
<p class="tag_title">Returns:</p>
|
981
|
+
<ul class="return">
|
982
|
+
|
983
|
+
<li>
|
984
|
+
|
985
|
+
|
986
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
987
|
+
|
988
|
+
|
989
|
+
|
990
|
+
—
|
991
|
+
<div class='inline'>
|
992
|
+
<p>Mapping of event constants to handler method symbols</p>
|
993
|
+
</div>
|
994
|
+
|
995
|
+
</li>
|
996
|
+
|
997
|
+
</ul>
|
998
|
+
|
999
|
+
</div><table class="source_code">
|
1000
|
+
<tr>
|
1001
|
+
<td>
|
1002
|
+
<pre class="lines">
|
1003
|
+
|
1004
|
+
|
1005
|
+
121
|
1006
|
+
122
|
1007
|
+
123
|
1008
|
+
124
|
1009
|
+
125
|
1010
|
+
126
|
1011
|
+
127
|
1012
|
+
128
|
1013
|
+
129
|
1014
|
+
130
|
1015
|
+
131
|
1016
|
+
132
|
1017
|
+
133
|
1018
|
+
134
|
1019
|
+
135
|
1020
|
+
136
|
1021
|
+
137
|
1022
|
+
138
|
1023
|
+
139
|
1024
|
+
140</pre>
|
1025
|
+
</td>
|
1026
|
+
<td>
|
1027
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 121</span>
|
1028
|
+
|
1029
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_build_event_subscriptions'>build_event_subscriptions</span>
|
1030
|
+
<span class='id identifier rubyid_subscriptions'>subscriptions</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
1031
|
+
|
1032
|
+
<span class='lparen'>(</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_subscribed_events'>subscribed_events</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</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_event_name'>event_name</span><span class='op'>|</span>
|
1033
|
+
<span class='comment'># Convert developer-friendly name to internal constant
|
1034
|
+
</span> <span class='id identifier rubyid_internal_constant'>internal_constant</span> <span class='op'>=</span> <span class='id identifier rubyid_resolve_internal_event_constant'>resolve_internal_event_constant</span><span class='lparen'>(</span><span class='id identifier rubyid_event_name'>event_name</span><span class='rparen'>)</span>
|
1035
|
+
|
1036
|
+
<span class='comment'># Generate handler method name: order.processed -> handle_order_processed
|
1037
|
+
</span> <span class='id identifier rubyid_handler_method'>handler_method</span> <span class='op'>=</span> <span class='id identifier rubyid_generate_handler_method_name'>generate_handler_method_name</span><span class='lparen'>(</span><span class='id identifier rubyid_event_name'>event_name</span><span class='rparen'>)</span>
|
1038
|
+
|
1039
|
+
<span class='comment'># Only add if the handler method exists
|
1040
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='id identifier rubyid_handler_method'>handler_method</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
|
1041
|
+
<span class='id identifier rubyid_subscriptions'>subscriptions</span><span class='lbracket'>[</span><span class='id identifier rubyid_internal_constant'>internal_constant</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_handler_method'>handler_method</span>
|
1042
|
+
<span class='kw'>else</span>
|
1043
|
+
<span class='const'>Rails</span><span class='period'>.</span><span class='id identifier rubyid_logger'>logger</span><span class='period'>.</span><span class='id identifier rubyid_warn'>warn</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>: Handler method </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_handler_method'>handler_method</span><span class='embexpr_end'>}</span><span class='tstring_content'> not found for event </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_event_name'>event_name</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
1044
|
+
<span class='kw'>end</span>
|
1045
|
+
<span class='kw'>end</span>
|
1046
|
+
|
1047
|
+
<span class='id identifier rubyid_subscriptions'>subscriptions</span>
|
1048
|
+
<span class='kw'>end</span></pre>
|
1049
|
+
</td>
|
1050
|
+
</tr>
|
1051
|
+
</table>
|
1052
|
+
</div>
|
1053
|
+
|
1054
|
+
<div class="method_details ">
|
1055
|
+
<h3 class="signature " id="build_metric_name-instance_method">
|
1056
|
+
|
1057
|
+
#<strong>build_metric_name</strong>(base_name, event_type) ⇒ <tt>String</tt> <span class="extras">(protected)</span>
|
1058
|
+
|
1059
|
+
|
1060
|
+
|
1061
|
+
|
1062
|
+
|
1063
|
+
</h3><div class="docstring">
|
1064
|
+
<div class="discussion">
|
1065
|
+
|
1066
|
+
<p>Create metric name with consistent naming convention</p>
|
1067
|
+
|
1068
|
+
<p>Example: metric_name = build_metric_name(‘tasker.task’, ‘completed’) # => ‘tasker.task.completed’</p>
|
1069
|
+
|
1070
|
+
|
1071
|
+
</div>
|
1072
|
+
</div>
|
1073
|
+
<div class="tags">
|
1074
|
+
<p class="tag_title">Parameters:</p>
|
1075
|
+
<ul class="param">
|
1076
|
+
|
1077
|
+
<li>
|
1078
|
+
|
1079
|
+
<span class='name'>base_name</span>
|
1080
|
+
|
1081
|
+
|
1082
|
+
<span class='type'>(<tt>String</tt>)</span>
|
1083
|
+
|
1084
|
+
|
1085
|
+
|
1086
|
+
—
|
1087
|
+
<div class='inline'>
|
1088
|
+
<p>The base metric name</p>
|
1089
|
+
</div>
|
1090
|
+
|
1091
|
+
</li>
|
1092
|
+
|
1093
|
+
<li>
|
1094
|
+
|
1095
|
+
<span class='name'>event_type</span>
|
1096
|
+
|
1097
|
+
|
1098
|
+
<span class='type'>(<tt>String</tt>)</span>
|
1099
|
+
|
1100
|
+
|
1101
|
+
|
1102
|
+
—
|
1103
|
+
<div class='inline'>
|
1104
|
+
<p>The event type (completed, failed, etc.)</p>
|
1105
|
+
</div>
|
1106
|
+
|
1107
|
+
</li>
|
1108
|
+
|
1109
|
+
</ul>
|
1110
|
+
|
1111
|
+
<p class="tag_title">Returns:</p>
|
1112
|
+
<ul class="return">
|
1113
|
+
|
1114
|
+
<li>
|
1115
|
+
|
1116
|
+
|
1117
|
+
<span class='type'>(<tt>String</tt>)</span>
|
1118
|
+
|
1119
|
+
|
1120
|
+
|
1121
|
+
—
|
1122
|
+
<div class='inline'>
|
1123
|
+
<p>Standardized metric name</p>
|
1124
|
+
</div>
|
1125
|
+
|
1126
|
+
</li>
|
1127
|
+
|
1128
|
+
</ul>
|
1129
|
+
|
1130
|
+
</div><table class="source_code">
|
1131
|
+
<tr>
|
1132
|
+
<td>
|
1133
|
+
<pre class="lines">
|
1134
|
+
|
1135
|
+
|
1136
|
+
433
|
1137
|
+
434
|
1138
|
+
435</pre>
|
1139
|
+
</td>
|
1140
|
+
<td>
|
1141
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 433</span>
|
1142
|
+
|
1143
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_build_metric_name'>build_metric_name</span><span class='lparen'>(</span><span class='id identifier rubyid_base_name'>base_name</span><span class='comma'>,</span> <span class='id identifier rubyid_event_type'>event_type</span><span class='rparen'>)</span>
|
1144
|
+
<span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_base_name'>base_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_event_type'>event_type</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='period'>.</span><span class='id identifier rubyid_squeeze'>squeeze</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>.</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
1145
|
+
<span class='kw'>end</span></pre>
|
1146
|
+
</td>
|
1147
|
+
</tr>
|
1148
|
+
</table>
|
1149
|
+
</div>
|
1150
|
+
|
1151
|
+
<div class="method_details ">
|
1152
|
+
<h3 class="signature " id="custom_event?-instance_method">
|
1153
|
+
|
1154
|
+
#<strong>custom_event?</strong>(event_constant) ⇒ <tt>Boolean</tt> <span class="extras">(protected)</span>
|
1155
|
+
|
1156
|
+
|
1157
|
+
|
1158
|
+
|
1159
|
+
|
1160
|
+
</h3><div class="docstring">
|
1161
|
+
<div class="discussion">
|
1162
|
+
|
1163
|
+
<p>Check if an event is a custom event (not a system constant)</p>
|
1164
|
+
|
1165
|
+
|
1166
|
+
</div>
|
1167
|
+
</div>
|
1168
|
+
<div class="tags">
|
1169
|
+
<p class="tag_title">Parameters:</p>
|
1170
|
+
<ul class="param">
|
1171
|
+
|
1172
|
+
<li>
|
1173
|
+
|
1174
|
+
<span class='name'>event_constant</span>
|
1175
|
+
|
1176
|
+
|
1177
|
+
<span class='type'>(<tt>String</tt>)</span>
|
1178
|
+
|
1179
|
+
|
1180
|
+
|
1181
|
+
—
|
1182
|
+
<div class='inline'>
|
1183
|
+
<p>The event constant or name</p>
|
1184
|
+
</div>
|
1185
|
+
|
1186
|
+
</li>
|
1187
|
+
|
1188
|
+
</ul>
|
1189
|
+
|
1190
|
+
<p class="tag_title">Returns:</p>
|
1191
|
+
<ul class="return">
|
1192
|
+
|
1193
|
+
<li>
|
1194
|
+
|
1195
|
+
|
1196
|
+
<span class='type'>(<tt>Boolean</tt>)</span>
|
1197
|
+
|
1198
|
+
|
1199
|
+
|
1200
|
+
—
|
1201
|
+
<div class='inline'>
|
1202
|
+
<p>Whether it’s a custom event</p>
|
1203
|
+
</div>
|
1204
|
+
|
1205
|
+
</li>
|
1206
|
+
|
1207
|
+
</ul>
|
1208
|
+
|
1209
|
+
</div><table class="source_code">
|
1210
|
+
<tr>
|
1211
|
+
<td>
|
1212
|
+
<pre class="lines">
|
1213
|
+
|
1214
|
+
|
1215
|
+
103
|
1216
|
+
104
|
1217
|
+
105
|
1218
|
+
106</pre>
|
1219
|
+
</td>
|
1220
|
+
<td>
|
1221
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 103</span>
|
1222
|
+
|
1223
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_custom_event?'>custom_event?</span><span class='lparen'>(</span><span class='id identifier rubyid_event_constant'>event_constant</span><span class='rparen'>)</span>
|
1224
|
+
<span class='id identifier rubyid_event_str'>event_str</span> <span class='op'>=</span> <span class='id identifier rubyid_event_constant'>event_constant</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
|
1225
|
+
<span class='id identifier rubyid_event_str'>event_str</span><span class='period'>.</span><span class='id identifier rubyid_exclude?'>exclude?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Tasker::Constants::</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_event_str'>event_str</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>.</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
1226
|
+
<span class='kw'>end</span></pre>
|
1227
|
+
</td>
|
1228
|
+
</tr>
|
1229
|
+
</table>
|
1230
|
+
</div>
|
1231
|
+
|
1232
|
+
<div class="method_details ">
|
1233
|
+
<h3 class="signature " id="event_subscriptions-instance_method">
|
1234
|
+
|
1235
|
+
#<strong>event_subscriptions</strong> ⇒ <tt>Hash</tt> <span class="extras">(protected)</span>
|
1236
|
+
|
1237
|
+
|
1238
|
+
|
1239
|
+
|
1240
|
+
|
1241
|
+
</h3><div class="docstring">
|
1242
|
+
<div class="discussion">
|
1243
|
+
|
1244
|
+
<p>Get event subscriptions mapping for this subscriber</p>
|
1245
|
+
|
1246
|
+
<p>This method maps event constants to handler methods using naming conventions. Override this method to customize the mapping.</p>
|
1247
|
+
|
1248
|
+
|
1249
|
+
</div>
|
1250
|
+
</div>
|
1251
|
+
<div class="tags">
|
1252
|
+
|
1253
|
+
<p class="tag_title">Returns:</p>
|
1254
|
+
<ul class="return">
|
1255
|
+
|
1256
|
+
<li>
|
1257
|
+
|
1258
|
+
|
1259
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
1260
|
+
|
1261
|
+
|
1262
|
+
|
1263
|
+
—
|
1264
|
+
<div class='inline'>
|
1265
|
+
<p>Mapping of event constants to handler method symbols</p>
|
1266
|
+
</div>
|
1267
|
+
|
1268
|
+
</li>
|
1269
|
+
|
1270
|
+
</ul>
|
1271
|
+
|
1272
|
+
</div><table class="source_code">
|
1273
|
+
<tr>
|
1274
|
+
<td>
|
1275
|
+
<pre class="lines">
|
1276
|
+
|
1277
|
+
|
1278
|
+
114
|
1279
|
+
115
|
1280
|
+
116</pre>
|
1281
|
+
</td>
|
1282
|
+
<td>
|
1283
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 114</span>
|
1284
|
+
|
1285
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_event_subscriptions'>event_subscriptions</span>
|
1286
|
+
<span class='ivar'>@event_subscriptions</span> <span class='op'>||=</span> <span class='id identifier rubyid_build_event_subscriptions'>build_event_subscriptions</span>
|
1287
|
+
<span class='kw'>end</span></pre>
|
1288
|
+
</td>
|
1289
|
+
</tr>
|
1290
|
+
</table>
|
1291
|
+
</div>
|
1292
|
+
|
1293
|
+
<div class="method_details ">
|
1294
|
+
<h3 class="signature " id="extract_core_attributes-instance_method">
|
1295
|
+
|
1296
|
+
#<strong>extract_core_attributes</strong>(event) ⇒ <tt>Hash</tt> <span class="extras">(protected)</span>
|
1297
|
+
|
1298
|
+
|
1299
|
+
|
1300
|
+
|
1301
|
+
|
1302
|
+
</h3><div class="docstring">
|
1303
|
+
<div class="discussion">
|
1304
|
+
|
1305
|
+
<p>Extract core attributes common to most events</p>
|
1306
|
+
|
1307
|
+
|
1308
|
+
</div>
|
1309
|
+
</div>
|
1310
|
+
<div class="tags">
|
1311
|
+
<p class="tag_title">Parameters:</p>
|
1312
|
+
<ul class="param">
|
1313
|
+
|
1314
|
+
<li>
|
1315
|
+
|
1316
|
+
<span class='name'>event</span>
|
1317
|
+
|
1318
|
+
|
1319
|
+
<span class='type'>(<tt>Hash</tt>, <tt>Dry::Events::Event</tt>)</span>
|
1320
|
+
|
1321
|
+
|
1322
|
+
|
1323
|
+
—
|
1324
|
+
<div class='inline'>
|
1325
|
+
<p>The event payload or event object</p>
|
1326
|
+
</div>
|
1327
|
+
|
1328
|
+
</li>
|
1329
|
+
|
1330
|
+
</ul>
|
1331
|
+
|
1332
|
+
<p class="tag_title">Returns:</p>
|
1333
|
+
<ul class="return">
|
1334
|
+
|
1335
|
+
<li>
|
1336
|
+
|
1337
|
+
|
1338
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
1339
|
+
|
1340
|
+
|
1341
|
+
|
1342
|
+
—
|
1343
|
+
<div class='inline'>
|
1344
|
+
<p>Core attributes</p>
|
1345
|
+
</div>
|
1346
|
+
|
1347
|
+
</li>
|
1348
|
+
|
1349
|
+
</ul>
|
1350
|
+
|
1351
|
+
</div><table class="source_code">
|
1352
|
+
<tr>
|
1353
|
+
<td>
|
1354
|
+
<pre class="lines">
|
1355
|
+
|
1356
|
+
|
1357
|
+
227
|
1358
|
+
228
|
1359
|
+
229
|
1360
|
+
230
|
1361
|
+
231
|
1362
|
+
232
|
1363
|
+
233</pre>
|
1364
|
+
</td>
|
1365
|
+
<td>
|
1366
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 227</span>
|
1367
|
+
|
1368
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_extract_core_attributes'>extract_core_attributes</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
1369
|
+
<span class='lbrace'>{</span>
|
1370
|
+
<span class='label'>task_id:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:task_id</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>unknown</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='comma'>,</span>
|
1371
|
+
<span class='label'>step_id:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:step_id</span><span class='rparen'>)</span><span class='comma'>,</span>
|
1372
|
+
<span class='label'>event_timestamp:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:timestamp</span><span class='comma'>,</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
|
1373
|
+
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span>
|
1374
|
+
<span class='kw'>end</span></pre>
|
1375
|
+
</td>
|
1376
|
+
</tr>
|
1377
|
+
</table>
|
1378
|
+
</div>
|
1379
|
+
|
1380
|
+
<div class="method_details ">
|
1381
|
+
<h3 class="signature " id="extract_error_metrics-instance_method">
|
1382
|
+
|
1383
|
+
#<strong>extract_error_metrics</strong>(event) ⇒ <tt>Hash</tt> <span class="extras">(protected)</span>
|
1384
|
+
|
1385
|
+
|
1386
|
+
|
1387
|
+
|
1388
|
+
|
1389
|
+
</h3><div class="docstring">
|
1390
|
+
<div class="discussion">
|
1391
|
+
|
1392
|
+
<p>Extract error metrics from failure events</p>
|
1393
|
+
|
1394
|
+
<p>Example: error = extract_error_metrics(event) StatsD.increment(‘tasker.errors’, tags: [“error_type:#:error_type”])</p>
|
1395
|
+
|
1396
|
+
|
1397
|
+
</div>
|
1398
|
+
</div>
|
1399
|
+
<div class="tags">
|
1400
|
+
<p class="tag_title">Parameters:</p>
|
1401
|
+
<ul class="param">
|
1402
|
+
|
1403
|
+
<li>
|
1404
|
+
|
1405
|
+
<span class='name'>event</span>
|
1406
|
+
|
1407
|
+
|
1408
|
+
<span class='type'>(<tt>Hash</tt>, <tt>Dry::Events::Event</tt>)</span>
|
1409
|
+
|
1410
|
+
|
1411
|
+
|
1412
|
+
—
|
1413
|
+
<div class='inline'>
|
1414
|
+
<p>The event payload</p>
|
1415
|
+
</div>
|
1416
|
+
|
1417
|
+
</li>
|
1418
|
+
|
1419
|
+
</ul>
|
1420
|
+
|
1421
|
+
<p class="tag_title">Returns:</p>
|
1422
|
+
<ul class="return">
|
1423
|
+
|
1424
|
+
<li>
|
1425
|
+
|
1426
|
+
|
1427
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
1428
|
+
|
1429
|
+
|
1430
|
+
|
1431
|
+
—
|
1432
|
+
<div class='inline'>
|
1433
|
+
<p>Error metrics with categorization</p>
|
1434
|
+
</div>
|
1435
|
+
|
1436
|
+
</li>
|
1437
|
+
|
1438
|
+
</ul>
|
1439
|
+
|
1440
|
+
</div><table class="source_code">
|
1441
|
+
<tr>
|
1442
|
+
<td>
|
1443
|
+
<pre class="lines">
|
1444
|
+
|
1445
|
+
|
1446
|
+
279
|
1447
|
+
280
|
1448
|
+
281
|
1449
|
+
282
|
1450
|
+
283
|
1451
|
+
284
|
1452
|
+
285
|
1453
|
+
286
|
1454
|
+
287
|
1455
|
+
288</pre>
|
1456
|
+
</td>
|
1457
|
+
<td>
|
1458
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 279</span>
|
1459
|
+
|
1460
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_extract_error_metrics'>extract_error_metrics</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
1461
|
+
<span class='lbrace'>{</span>
|
1462
|
+
<span class='label'>error_message:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:error_message</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>unknown_error</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='comma'>,</span>
|
1463
|
+
<span class='label'>error_class:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:exception_class</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>UnknownError</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='comma'>,</span>
|
1464
|
+
<span class='label'>error_type:</span> <span class='id identifier rubyid_categorize_error'>categorize_error</span><span class='lparen'>(</span><span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:exception_class</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='comma'>,</span>
|
1465
|
+
<span class='label'>attempt_number:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:attempt_number</span><span class='comma'>,</span> <span class='int'>1</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span>
|
1466
|
+
<span class='label'>is_retryable:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:retryable</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span><span class='comma'>,</span>
|
1467
|
+
<span class='label'>final_failure:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:attempt_number</span><span class='comma'>,</span> <span class='int'>1</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>>=</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:retry_limit</span><span class='comma'>,</span> <span class='int'>1</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
|
1468
|
+
<span class='rbrace'>}</span>
|
1469
|
+
<span class='kw'>end</span></pre>
|
1470
|
+
</td>
|
1471
|
+
</tr>
|
1472
|
+
</table>
|
1473
|
+
</div>
|
1474
|
+
|
1475
|
+
<div class="method_details ">
|
1476
|
+
<h3 class="signature " id="extract_metric_tags-instance_method">
|
1477
|
+
|
1478
|
+
#<strong>extract_metric_tags</strong>(event) ⇒ <tt>Array<String></tt> <span class="extras">(protected)</span>
|
1479
|
+
|
1480
|
+
|
1481
|
+
|
1482
|
+
|
1483
|
+
|
1484
|
+
</h3><div class="docstring">
|
1485
|
+
<div class="discussion">
|
1486
|
+
|
1487
|
+
<p>Extract business metrics tags for categorization</p>
|
1488
|
+
|
1489
|
+
<p>Example: tags = extract_metric_tags(event) StatsD.increment(‘tasker.task.completed’, tags: tags)</p>
|
1490
|
+
|
1491
|
+
|
1492
|
+
</div>
|
1493
|
+
</div>
|
1494
|
+
<div class="tags">
|
1495
|
+
<p class="tag_title">Parameters:</p>
|
1496
|
+
<ul class="param">
|
1497
|
+
|
1498
|
+
<li>
|
1499
|
+
|
1500
|
+
<span class='name'>event</span>
|
1501
|
+
|
1502
|
+
|
1503
|
+
<span class='type'>(<tt>Hash</tt>, <tt>Dry::Events::Event</tt>)</span>
|
1504
|
+
|
1505
|
+
|
1506
|
+
|
1507
|
+
—
|
1508
|
+
<div class='inline'>
|
1509
|
+
<p>The event payload</p>
|
1510
|
+
</div>
|
1511
|
+
|
1512
|
+
</li>
|
1513
|
+
|
1514
|
+
</ul>
|
1515
|
+
|
1516
|
+
<p class="tag_title">Returns:</p>
|
1517
|
+
<ul class="return">
|
1518
|
+
|
1519
|
+
<li>
|
1520
|
+
|
1521
|
+
|
1522
|
+
<span class='type'>(<tt>Array<String></tt>)</span>
|
1523
|
+
|
1524
|
+
|
1525
|
+
|
1526
|
+
—
|
1527
|
+
<div class='inline'>
|
1528
|
+
<p>Array of tag strings for metrics systems</p>
|
1529
|
+
</div>
|
1530
|
+
|
1531
|
+
</li>
|
1532
|
+
|
1533
|
+
</ul>
|
1534
|
+
|
1535
|
+
</div><table class="source_code">
|
1536
|
+
<tr>
|
1537
|
+
<td>
|
1538
|
+
<pre class="lines">
|
1539
|
+
|
1540
|
+
|
1541
|
+
316
|
1542
|
+
317
|
1543
|
+
318</pre>
|
1544
|
+
</td>
|
1545
|
+
<td>
|
1546
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 316</span>
|
1547
|
+
|
1548
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_extract_metric_tags'>extract_metric_tags</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
1549
|
+
<span class='const'><span class='object_link'><a href="BaseSubscriber/MetricTagsExtractor.html" title="Tasker::Events::Subscribers::BaseSubscriber::MetricTagsExtractor (class)">MetricTagsExtractor</a></span></span><span class='period'>.</span><span class='id identifier rubyid_extract'><span class='object_link'><a href="BaseSubscriber/MetricTagsExtractor.html#extract-class_method" title="Tasker::Events::Subscribers::BaseSubscriber::MetricTagsExtractor.extract (method)">extract</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
1550
|
+
<span class='kw'>end</span></pre>
|
1551
|
+
</td>
|
1552
|
+
</tr>
|
1553
|
+
</table>
|
1554
|
+
</div>
|
1555
|
+
|
1556
|
+
<div class="method_details ">
|
1557
|
+
<h3 class="signature " id="extract_numeric_metric-instance_method">
|
1558
|
+
|
1559
|
+
#<strong>extract_numeric_metric</strong>(event, key, default = 0) ⇒ <tt>Numeric</tt> <span class="extras">(protected)</span>
|
1560
|
+
|
1561
|
+
|
1562
|
+
|
1563
|
+
|
1564
|
+
|
1565
|
+
</h3><div class="docstring">
|
1566
|
+
<div class="discussion">
|
1567
|
+
|
1568
|
+
<p>Extract numeric value safely for metrics</p>
|
1569
|
+
|
1570
|
+
<p>Example: duration = extract_numeric_metric(event, :execution_duration, 0.0) StatsD.histogram(‘task.duration’, duration)</p>
|
1571
|
+
|
1572
|
+
|
1573
|
+
</div>
|
1574
|
+
</div>
|
1575
|
+
<div class="tags">
|
1576
|
+
<p class="tag_title">Parameters:</p>
|
1577
|
+
<ul class="param">
|
1578
|
+
|
1579
|
+
<li>
|
1580
|
+
|
1581
|
+
<span class='name'>event</span>
|
1582
|
+
|
1583
|
+
|
1584
|
+
<span class='type'>(<tt>Hash</tt>, <tt>Dry::Events::Event</tt>)</span>
|
1585
|
+
|
1586
|
+
|
1587
|
+
|
1588
|
+
—
|
1589
|
+
<div class='inline'>
|
1590
|
+
<p>The event payload</p>
|
1591
|
+
</div>
|
1592
|
+
|
1593
|
+
</li>
|
1594
|
+
|
1595
|
+
<li>
|
1596
|
+
|
1597
|
+
<span class='name'>key</span>
|
1598
|
+
|
1599
|
+
|
1600
|
+
<span class='type'>(<tt>Symbol</tt>, <tt>String</tt>)</span>
|
1601
|
+
|
1602
|
+
|
1603
|
+
|
1604
|
+
—
|
1605
|
+
<div class='inline'>
|
1606
|
+
<p>The key to extract</p>
|
1607
|
+
</div>
|
1608
|
+
|
1609
|
+
</li>
|
1610
|
+
|
1611
|
+
<li>
|
1612
|
+
|
1613
|
+
<span class='name'>default</span>
|
1614
|
+
|
1615
|
+
|
1616
|
+
<span class='type'>(<tt>Numeric</tt>)</span>
|
1617
|
+
|
1618
|
+
|
1619
|
+
<em class="default">(defaults to: <tt>0</tt>)</em>
|
1620
|
+
|
1621
|
+
|
1622
|
+
—
|
1623
|
+
<div class='inline'>
|
1624
|
+
<p>The default value</p>
|
1625
|
+
</div>
|
1626
|
+
|
1627
|
+
</li>
|
1628
|
+
|
1629
|
+
</ul>
|
1630
|
+
|
1631
|
+
<p class="tag_title">Returns:</p>
|
1632
|
+
<ul class="return">
|
1633
|
+
|
1634
|
+
<li>
|
1635
|
+
|
1636
|
+
|
1637
|
+
<span class='type'>(<tt>Numeric</tt>)</span>
|
1638
|
+
|
1639
|
+
|
1640
|
+
|
1641
|
+
—
|
1642
|
+
<div class='inline'>
|
1643
|
+
<p>The numeric value</p>
|
1644
|
+
</div>
|
1645
|
+
|
1646
|
+
</li>
|
1647
|
+
|
1648
|
+
</ul>
|
1649
|
+
|
1650
|
+
</div><table class="source_code">
|
1651
|
+
<tr>
|
1652
|
+
<td>
|
1653
|
+
<pre class="lines">
|
1654
|
+
|
1655
|
+
|
1656
|
+
447
|
1657
|
+
448
|
1658
|
+
449
|
1659
|
+
450
|
1660
|
+
451
|
1661
|
+
452
|
1662
|
+
453
|
1663
|
+
454
|
1664
|
+
455
|
1665
|
+
456
|
1666
|
+
457
|
1667
|
+
458
|
1668
|
+
459
|
1669
|
+
460
|
1670
|
+
461</pre>
|
1671
|
+
</td>
|
1672
|
+
<td>
|
1673
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 447</span>
|
1674
|
+
|
1675
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_extract_numeric_metric'>extract_numeric_metric</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='int'>0</span><span class='rparen'>)</span>
|
1676
|
+
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_default'>default</span><span class='rparen'>)</span>
|
1677
|
+
|
1678
|
+
<span class='comment'># Handle nil values and non-numeric types
|
1679
|
+
</span> <span class='kw'>return</span> <span class='id identifier rubyid_default'>default</span> <span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='op'>!</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:to_f</span><span class='rparen'>)</span>
|
1680
|
+
|
1681
|
+
<span class='comment'># Try to convert to float
|
1682
|
+
</span> <span class='id identifier rubyid_converted'>converted</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span>
|
1683
|
+
|
1684
|
+
<span class='comment'># Check if this was a valid numeric conversion
|
1685
|
+
</span> <span class='comment'># For strings that can't convert, to_f returns 0.0
|
1686
|
+
</span> <span class='kw'>return</span> <span class='id identifier rubyid_default'>default</span> <span class='kw'>if</span> <span class='id identifier rubyid_converted'>converted</span> <span class='op'>==</span> <span class='float'>0.0</span> <span class='op'>&&</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>!~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>\A\s*0*(\.0*)?\s*\z</span><span class='regexp_end'>/</span></span>
|
1687
|
+
|
1688
|
+
<span class='id identifier rubyid_converted'>converted</span>
|
1689
|
+
<span class='kw'>end</span></pre>
|
1690
|
+
</td>
|
1691
|
+
</tr>
|
1692
|
+
</table>
|
1693
|
+
</div>
|
1694
|
+
|
1695
|
+
<div class="method_details ">
|
1696
|
+
<h3 class="signature " id="extract_performance_metrics-instance_method">
|
1697
|
+
|
1698
|
+
#<strong>extract_performance_metrics</strong>(event) ⇒ <tt>Hash</tt> <span class="extras">(protected)</span>
|
1699
|
+
|
1700
|
+
|
1701
|
+
|
1702
|
+
|
1703
|
+
|
1704
|
+
</h3><div class="docstring">
|
1705
|
+
<div class="discussion">
|
1706
|
+
|
1707
|
+
<p>Extract performance metrics for operational monitoring</p>
|
1708
|
+
|
1709
|
+
<p>Example: perf = extract_performance_metrics(event) StatsD.histogram(‘tasker.memory_usage’, <a href=":memory_usage">perf</a>)</p>
|
1710
|
+
|
1711
|
+
|
1712
|
+
</div>
|
1713
|
+
</div>
|
1714
|
+
<div class="tags">
|
1715
|
+
<p class="tag_title">Parameters:</p>
|
1716
|
+
<ul class="param">
|
1717
|
+
|
1718
|
+
<li>
|
1719
|
+
|
1720
|
+
<span class='name'>event</span>
|
1721
|
+
|
1722
|
+
|
1723
|
+
<span class='type'>(<tt>Hash</tt>, <tt>Dry::Events::Event</tt>)</span>
|
1724
|
+
|
1725
|
+
|
1726
|
+
|
1727
|
+
—
|
1728
|
+
<div class='inline'>
|
1729
|
+
<p>The event payload</p>
|
1730
|
+
</div>
|
1731
|
+
|
1732
|
+
</li>
|
1733
|
+
|
1734
|
+
</ul>
|
1735
|
+
|
1736
|
+
<p class="tag_title">Returns:</p>
|
1737
|
+
<ul class="return">
|
1738
|
+
|
1739
|
+
<li>
|
1740
|
+
|
1741
|
+
|
1742
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
1743
|
+
|
1744
|
+
|
1745
|
+
|
1746
|
+
—
|
1747
|
+
<div class='inline'>
|
1748
|
+
<p>Performance metrics</p>
|
1749
|
+
</div>
|
1750
|
+
|
1751
|
+
</li>
|
1752
|
+
|
1753
|
+
</ul>
|
1754
|
+
|
1755
|
+
</div><table class="source_code">
|
1756
|
+
<tr>
|
1757
|
+
<td>
|
1758
|
+
<pre class="lines">
|
1759
|
+
|
1760
|
+
|
1761
|
+
298
|
1762
|
+
299
|
1763
|
+
300
|
1764
|
+
301
|
1765
|
+
302
|
1766
|
+
303
|
1767
|
+
304
|
1768
|
+
305
|
1769
|
+
306</pre>
|
1770
|
+
</td>
|
1771
|
+
<td>
|
1772
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 298</span>
|
1773
|
+
|
1774
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_extract_performance_metrics'>extract_performance_metrics</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
1775
|
+
<span class='lbrace'>{</span>
|
1776
|
+
<span class='label'>memory_usage:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:memory_usage</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span>
|
1777
|
+
<span class='label'>cpu_time:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:cpu_time</span><span class='comma'>,</span> <span class='float'>0.0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span><span class='comma'>,</span>
|
1778
|
+
<span class='label'>queue_time:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:queue_time</span><span class='comma'>,</span> <span class='float'>0.0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span><span class='comma'>,</span>
|
1779
|
+
<span class='label'>processing_time:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:processing_time</span><span class='comma'>,</span> <span class='float'>0.0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span><span class='comma'>,</span>
|
1780
|
+
<span class='label'>retry_delay:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:retry_delay</span><span class='comma'>,</span> <span class='float'>0.0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span>
|
1781
|
+
<span class='rbrace'>}</span>
|
1782
|
+
<span class='kw'>end</span></pre>
|
1783
|
+
</td>
|
1784
|
+
</tr>
|
1785
|
+
</table>
|
1786
|
+
</div>
|
1787
|
+
|
1788
|
+
<div class="method_details ">
|
1789
|
+
<h3 class="signature " id="extract_step_attributes-instance_method">
|
1790
|
+
|
1791
|
+
#<strong>extract_step_attributes</strong>(event) ⇒ <tt>Hash</tt> <span class="extras">(protected)</span>
|
1792
|
+
|
1793
|
+
|
1794
|
+
|
1795
|
+
|
1796
|
+
|
1797
|
+
</h3><div class="docstring">
|
1798
|
+
<div class="discussion">
|
1799
|
+
|
1800
|
+
<p>Extract step-specific attributes (for TelemetrySubscriber compatibility)</p>
|
1801
|
+
|
1802
|
+
|
1803
|
+
</div>
|
1804
|
+
</div>
|
1805
|
+
<div class="tags">
|
1806
|
+
<p class="tag_title">Parameters:</p>
|
1807
|
+
<ul class="param">
|
1808
|
+
|
1809
|
+
<li>
|
1810
|
+
|
1811
|
+
<span class='name'>event</span>
|
1812
|
+
|
1813
|
+
|
1814
|
+
<span class='type'>(<tt>Hash</tt>, <tt>Dry::Events::Event</tt>)</span>
|
1815
|
+
|
1816
|
+
|
1817
|
+
|
1818
|
+
—
|
1819
|
+
<div class='inline'>
|
1820
|
+
<p>The event payload or event object</p>
|
1821
|
+
</div>
|
1822
|
+
|
1823
|
+
</li>
|
1824
|
+
|
1825
|
+
</ul>
|
1826
|
+
|
1827
|
+
<p class="tag_title">Returns:</p>
|
1828
|
+
<ul class="return">
|
1829
|
+
|
1830
|
+
<li>
|
1831
|
+
|
1832
|
+
|
1833
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
1834
|
+
|
1835
|
+
|
1836
|
+
|
1837
|
+
—
|
1838
|
+
<div class='inline'>
|
1839
|
+
<p>Step attributes</p>
|
1840
|
+
</div>
|
1841
|
+
|
1842
|
+
</li>
|
1843
|
+
|
1844
|
+
</ul>
|
1845
|
+
|
1846
|
+
</div><table class="source_code">
|
1847
|
+
<tr>
|
1848
|
+
<td>
|
1849
|
+
<pre class="lines">
|
1850
|
+
|
1851
|
+
|
1852
|
+
239
|
1853
|
+
240
|
1854
|
+
241
|
1855
|
+
242
|
1856
|
+
243
|
1857
|
+
244</pre>
|
1858
|
+
</td>
|
1859
|
+
<td>
|
1860
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 239</span>
|
1861
|
+
|
1862
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_extract_step_attributes'>extract_step_attributes</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
1863
|
+
<span class='id identifier rubyid_extract_core_attributes'>extract_core_attributes</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span>
|
1864
|
+
<span class='label'>step_id:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:step_id</span><span class='rparen'>)</span><span class='comma'>,</span>
|
1865
|
+
<span class='label'>step_name:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:step_name</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>unknown_step</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
1866
|
+
<span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span>
|
1867
|
+
<span class='kw'>end</span></pre>
|
1868
|
+
</td>
|
1869
|
+
</tr>
|
1870
|
+
</table>
|
1871
|
+
</div>
|
1872
|
+
|
1873
|
+
<div class="method_details ">
|
1874
|
+
<h3 class="signature " id="extract_timing_metrics-instance_method">
|
1875
|
+
|
1876
|
+
#<strong>extract_timing_metrics</strong>(event) ⇒ <tt>Hash</tt> <span class="extras">(protected)</span>
|
1877
|
+
|
1878
|
+
|
1879
|
+
|
1880
|
+
|
1881
|
+
|
1882
|
+
</h3><div class="docstring">
|
1883
|
+
<div class="discussion">
|
1884
|
+
|
1885
|
+
<p>Extract timing metrics from completion events</p>
|
1886
|
+
|
1887
|
+
<p>Example: timing = extract_timing_metrics(event) StatsD.histogram(‘tasker.task.duration’, <a href=":execution_duration">timing</a>) StatsD.gauge(‘tasker.task.step_count’, <a href=":step_count">timing</a>)</p>
|
1888
|
+
|
1889
|
+
|
1890
|
+
</div>
|
1891
|
+
</div>
|
1892
|
+
<div class="tags">
|
1893
|
+
<p class="tag_title">Parameters:</p>
|
1894
|
+
<ul class="param">
|
1895
|
+
|
1896
|
+
<li>
|
1897
|
+
|
1898
|
+
<span class='name'>event</span>
|
1899
|
+
|
1900
|
+
|
1901
|
+
<span class='type'>(<tt>Hash</tt>, <tt>Dry::Events::Event</tt>)</span>
|
1902
|
+
|
1903
|
+
|
1904
|
+
|
1905
|
+
—
|
1906
|
+
<div class='inline'>
|
1907
|
+
<p>The event payload</p>
|
1908
|
+
</div>
|
1909
|
+
|
1910
|
+
</li>
|
1911
|
+
|
1912
|
+
</ul>
|
1913
|
+
|
1914
|
+
<p class="tag_title">Returns:</p>
|
1915
|
+
<ul class="return">
|
1916
|
+
|
1917
|
+
<li>
|
1918
|
+
|
1919
|
+
|
1920
|
+
<span class='type'>(<tt>Hash</tt>)</span>
|
1921
|
+
|
1922
|
+
|
1923
|
+
|
1924
|
+
—
|
1925
|
+
<div class='inline'>
|
1926
|
+
<p>Timing metrics with default values</p>
|
1927
|
+
</div>
|
1928
|
+
|
1929
|
+
</li>
|
1930
|
+
|
1931
|
+
</ul>
|
1932
|
+
|
1933
|
+
</div><table class="source_code">
|
1934
|
+
<tr>
|
1935
|
+
<td>
|
1936
|
+
<pre class="lines">
|
1937
|
+
|
1938
|
+
|
1939
|
+
260
|
1940
|
+
261
|
1941
|
+
262
|
1942
|
+
263
|
1943
|
+
264
|
1944
|
+
265
|
1945
|
+
266
|
1946
|
+
267
|
1947
|
+
268
|
1948
|
+
269</pre>
|
1949
|
+
</td>
|
1950
|
+
<td>
|
1951
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 260</span>
|
1952
|
+
|
1953
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_extract_timing_metrics'>extract_timing_metrics</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='rparen'>)</span>
|
1954
|
+
<span class='lbrace'>{</span>
|
1955
|
+
<span class='label'>execution_duration:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:execution_duration</span><span class='comma'>,</span> <span class='float'>0.0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span><span class='comma'>,</span>
|
1956
|
+
<span class='label'>started_at:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:started_at</span><span class='rparen'>)</span><span class='comma'>,</span>
|
1957
|
+
<span class='label'>completed_at:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:completed_at</span><span class='rparen'>)</span><span class='comma'>,</span>
|
1958
|
+
<span class='label'>step_count:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:total_steps</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span>
|
1959
|
+
<span class='label'>completed_steps:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:completed_steps</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span>
|
1960
|
+
<span class='label'>failed_steps:</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='symbol'>:failed_steps</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
|
1961
|
+
<span class='rbrace'>}</span>
|
1962
|
+
<span class='kw'>end</span></pre>
|
1963
|
+
</td>
|
1964
|
+
</tr>
|
1965
|
+
</table>
|
1966
|
+
</div>
|
1967
|
+
|
1968
|
+
<div class="method_details ">
|
1969
|
+
<h3 class="signature " id="generate_handler_method_name-instance_method">
|
1970
|
+
|
1971
|
+
#<strong>generate_handler_method_name</strong>(event_name) ⇒ <tt>Symbol</tt> <span class="extras">(protected)</span>
|
1972
|
+
|
1973
|
+
|
1974
|
+
|
1975
|
+
|
1976
|
+
|
1977
|
+
</h3><div class="docstring">
|
1978
|
+
<div class="discussion">
|
1979
|
+
|
1980
|
+
<p>Generate handler method name from event name</p>
|
1981
|
+
|
1982
|
+
|
1983
|
+
</div>
|
1984
|
+
</div>
|
1985
|
+
<div class="tags">
|
1986
|
+
<p class="tag_title">Parameters:</p>
|
1987
|
+
<ul class="param">
|
1988
|
+
|
1989
|
+
<li>
|
1990
|
+
|
1991
|
+
<span class='name'>event_name</span>
|
1992
|
+
|
1993
|
+
|
1994
|
+
<span class='type'>(<tt>String</tt>)</span>
|
1995
|
+
|
1996
|
+
|
1997
|
+
|
1998
|
+
—
|
1999
|
+
<div class='inline'>
|
2000
|
+
<p>The event name (should be consistent format)</p>
|
2001
|
+
</div>
|
2002
|
+
|
2003
|
+
</li>
|
2004
|
+
|
2005
|
+
</ul>
|
2006
|
+
|
2007
|
+
<p class="tag_title">Returns:</p>
|
2008
|
+
<ul class="return">
|
2009
|
+
|
2010
|
+
<li>
|
2011
|
+
|
2012
|
+
|
2013
|
+
<span class='type'>(<tt>Symbol</tt>)</span>
|
2014
|
+
|
2015
|
+
|
2016
|
+
|
2017
|
+
—
|
2018
|
+
<div class='inline'>
|
2019
|
+
<p>The handler method name</p>
|
2020
|
+
</div>
|
2021
|
+
|
2022
|
+
</li>
|
2023
|
+
|
2024
|
+
</ul>
|
2025
|
+
|
2026
|
+
</div><table class="source_code">
|
2027
|
+
<tr>
|
2028
|
+
<td>
|
2029
|
+
<pre class="lines">
|
2030
|
+
|
2031
|
+
|
2032
|
+
172
|
2033
|
+
173
|
2034
|
+
174
|
2035
|
+
175
|
2036
|
+
176
|
2037
|
+
177
|
2038
|
+
178
|
2039
|
+
179
|
2040
|
+
180</pre>
|
2041
|
+
</td>
|
2042
|
+
<td>
|
2043
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 172</span>
|
2044
|
+
|
2045
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_generate_handler_method_name'>generate_handler_method_name</span><span class='lparen'>(</span><span class='id identifier rubyid_event_name'>event_name</span><span class='rparen'>)</span>
|
2046
|
+
<span class='comment'># Convert dots to underscores and prefix with handle_
|
2047
|
+
</span> <span class='comment'># Examples:
|
2048
|
+
</span> <span class='comment'># 'task.completed' -> :handle_task_completed
|
2049
|
+
</span> <span class='comment'># 'step.failed' -> :handle_step_failed
|
2050
|
+
</span> <span class='comment'># 'custom.event' -> :handle_custom_event
|
2051
|
+
</span> <span class='id identifier rubyid_clean_name'>clean_name</span> <span class='op'>=</span> <span class='id identifier rubyid_event_name'>event_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_tr'>tr</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>.</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>_</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span>
|
2052
|
+
<span class='symbol'>:"handle_</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_clean_name'>clean_name</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
2053
|
+
<span class='kw'>end</span></pre>
|
2054
|
+
</td>
|
2055
|
+
</tr>
|
2056
|
+
</table>
|
2057
|
+
</div>
|
2058
|
+
|
2059
|
+
<div class="method_details ">
|
2060
|
+
<h3 class="signature " id="resolve_internal_event_constant-instance_method">
|
2061
|
+
|
2062
|
+
#<strong>resolve_internal_event_constant</strong>(event_name) ⇒ <tt>String</tt> <span class="extras">(protected)</span>
|
2063
|
+
|
2064
|
+
|
2065
|
+
|
2066
|
+
|
2067
|
+
|
2068
|
+
</h3><div class="docstring">
|
2069
|
+
<div class="discussion">
|
2070
|
+
|
2071
|
+
<p>Resolve developer-friendly event name to internal constant</p>
|
2072
|
+
|
2073
|
+
<p>This handles the transparent namespace mapping: - “order.processed” -> “custom.order.processed” (for custom events) - “task.completed” -> “task.completed” (for system events)</p>
|
2074
|
+
|
2075
|
+
|
2076
|
+
</div>
|
2077
|
+
</div>
|
2078
|
+
<div class="tags">
|
2079
|
+
<p class="tag_title">Parameters:</p>
|
2080
|
+
<ul class="param">
|
2081
|
+
|
2082
|
+
<li>
|
2083
|
+
|
2084
|
+
<span class='name'>event_name</span>
|
2085
|
+
|
2086
|
+
|
2087
|
+
<span class='type'>(<tt>String</tt>)</span>
|
2088
|
+
|
2089
|
+
|
2090
|
+
|
2091
|
+
—
|
2092
|
+
<div class='inline'>
|
2093
|
+
<p>The developer-friendly event name</p>
|
2094
|
+
</div>
|
2095
|
+
|
2096
|
+
</li>
|
2097
|
+
|
2098
|
+
</ul>
|
2099
|
+
|
2100
|
+
<p class="tag_title">Returns:</p>
|
2101
|
+
<ul class="return">
|
2102
|
+
|
2103
|
+
<li>
|
2104
|
+
|
2105
|
+
|
2106
|
+
<span class='type'>(<tt>String</tt>)</span>
|
2107
|
+
|
2108
|
+
|
2109
|
+
|
2110
|
+
—
|
2111
|
+
<div class='inline'>
|
2112
|
+
<p>The internal event constant</p>
|
2113
|
+
</div>
|
2114
|
+
|
2115
|
+
</li>
|
2116
|
+
|
2117
|
+
</ul>
|
2118
|
+
|
2119
|
+
</div><table class="source_code">
|
2120
|
+
<tr>
|
2121
|
+
<td>
|
2122
|
+
<pre class="lines">
|
2123
|
+
|
2124
|
+
|
2125
|
+
150
|
2126
|
+
151
|
2127
|
+
152
|
2128
|
+
153
|
2129
|
+
154
|
2130
|
+
155
|
2131
|
+
156
|
2132
|
+
157
|
2133
|
+
158
|
2134
|
+
159
|
2135
|
+
160
|
2136
|
+
161
|
2137
|
+
162
|
2138
|
+
163
|
2139
|
+
164
|
2140
|
+
165
|
2141
|
+
166</pre>
|
2142
|
+
</td>
|
2143
|
+
<td>
|
2144
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 150</span>
|
2145
|
+
|
2146
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_resolve_internal_event_constant'>resolve_internal_event_constant</span><span class='lparen'>(</span><span class='id identifier rubyid_event_name'>event_name</span><span class='rparen'>)</span>
|
2147
|
+
<span class='id identifier rubyid_event_str'>event_str</span> <span class='op'>=</span> <span class='id identifier rubyid_event_name'>event_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
|
2148
|
+
|
2149
|
+
<span class='comment'># Check if it's already an internal constant (starts with system prefixes)
|
2150
|
+
</span> <span class='id identifier rubyid_system_prefixes'>system_prefixes</span> <span class='op'>=</span> <span class='qwords_beg'>%w[</span><span class='tstring_content'>task.</span><span class='words_sep'> </span><span class='tstring_content'>step.</span><span class='words_sep'> </span><span class='tstring_content'>workflow.</span><span class='words_sep'> </span><span class='tstring_content'>observability.</span><span class='tstring_end'>]</span></span>
|
2151
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_system_prefixes'>system_prefixes</span><span class='period'>.</span><span class='id identifier rubyid_any?'>any?</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_prefix'>prefix</span><span class='op'>|</span> <span class='id identifier rubyid_event_str'>event_str</span><span class='period'>.</span><span class='id identifier rubyid_start_with?'>start_with?</span><span class='lparen'>(</span><span class='id identifier rubyid_prefix'>prefix</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
2152
|
+
<span class='kw'>return</span> <span class='id identifier rubyid_event_str'>event_str</span> <span class='comment'># It's a system event, use as-is
|
2153
|
+
</span> <span class='kw'>end</span>
|
2154
|
+
|
2155
|
+
<span class='comment'># Check if it's already prefixed with custom.
|
2156
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_event_str'>event_str</span><span class='period'>.</span><span class='id identifier rubyid_start_with?'>start_with?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>custom.</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
2157
|
+
<span class='kw'>return</span> <span class='id identifier rubyid_event_str'>event_str</span> <span class='comment'># Already internal format
|
2158
|
+
</span> <span class='kw'>end</span>
|
2159
|
+
|
2160
|
+
<span class='comment'># Assume it's a custom event and add the prefix
|
2161
|
+
</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>custom.</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_event_str'>event_str</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
2162
|
+
<span class='kw'>end</span></pre>
|
2163
|
+
</td>
|
2164
|
+
</tr>
|
2165
|
+
</table>
|
2166
|
+
</div>
|
2167
|
+
|
2168
|
+
<div class="method_details ">
|
2169
|
+
<h3 class="signature " id="safe_get-instance_method">
|
2170
|
+
|
2171
|
+
#<strong>safe_get</strong>(event, key, default = nil) ⇒ <tt>Object</tt> <span class="extras">(protected)</span>
|
2172
|
+
|
2173
|
+
|
2174
|
+
|
2175
|
+
|
2176
|
+
|
2177
|
+
</h3><div class="docstring">
|
2178
|
+
<div class="discussion">
|
2179
|
+
|
2180
|
+
<p>Safe accessor for event payload keys with fallback values</p>
|
2181
|
+
|
2182
|
+
|
2183
|
+
</div>
|
2184
|
+
</div>
|
2185
|
+
<div class="tags">
|
2186
|
+
<p class="tag_title">Parameters:</p>
|
2187
|
+
<ul class="param">
|
2188
|
+
|
2189
|
+
<li>
|
2190
|
+
|
2191
|
+
<span class='name'>event</span>
|
2192
|
+
|
2193
|
+
|
2194
|
+
<span class='type'>(<tt>Hash</tt>, <tt>Dry::Events::Event</tt>)</span>
|
2195
|
+
|
2196
|
+
|
2197
|
+
|
2198
|
+
—
|
2199
|
+
<div class='inline'>
|
2200
|
+
<p>The event payload or event object</p>
|
2201
|
+
</div>
|
2202
|
+
|
2203
|
+
</li>
|
2204
|
+
|
2205
|
+
<li>
|
2206
|
+
|
2207
|
+
<span class='name'>key</span>
|
2208
|
+
|
2209
|
+
|
2210
|
+
<span class='type'>(<tt>Symbol</tt>, <tt>String</tt>)</span>
|
2211
|
+
|
2212
|
+
|
2213
|
+
|
2214
|
+
—
|
2215
|
+
<div class='inline'>
|
2216
|
+
<p>The key to access</p>
|
2217
|
+
</div>
|
2218
|
+
|
2219
|
+
</li>
|
2220
|
+
|
2221
|
+
<li>
|
2222
|
+
|
2223
|
+
<span class='name'>default</span>
|
2224
|
+
|
2225
|
+
|
2226
|
+
<span class='type'>(<tt>Object</tt>)</span>
|
2227
|
+
|
2228
|
+
|
2229
|
+
<em class="default">(defaults to: <tt>nil</tt>)</em>
|
2230
|
+
|
2231
|
+
|
2232
|
+
—
|
2233
|
+
<div class='inline'>
|
2234
|
+
<p>The default value if key is missing</p>
|
2235
|
+
</div>
|
2236
|
+
|
2237
|
+
</li>
|
2238
|
+
|
2239
|
+
</ul>
|
2240
|
+
|
2241
|
+
<p class="tag_title">Returns:</p>
|
2242
|
+
<ul class="return">
|
2243
|
+
|
2244
|
+
<li>
|
2245
|
+
|
2246
|
+
|
2247
|
+
<span class='type'>(<tt>Object</tt>)</span>
|
2248
|
+
|
2249
|
+
|
2250
|
+
|
2251
|
+
—
|
2252
|
+
<div class='inline'>
|
2253
|
+
<p>The value or default</p>
|
2254
|
+
</div>
|
2255
|
+
|
2256
|
+
</li>
|
2257
|
+
|
2258
|
+
</ul>
|
2259
|
+
|
2260
|
+
</div><table class="source_code">
|
2261
|
+
<tr>
|
2262
|
+
<td>
|
2263
|
+
<pre class="lines">
|
2264
|
+
|
2265
|
+
|
2266
|
+
208
|
2267
|
+
209
|
2268
|
+
210
|
2269
|
+
211
|
2270
|
+
212
|
2271
|
+
213
|
2272
|
+
214
|
2273
|
+
215
|
2274
|
+
216
|
2275
|
+
217
|
2276
|
+
218
|
2277
|
+
219
|
2278
|
+
220
|
2279
|
+
221</pre>
|
2280
|
+
</td>
|
2281
|
+
<td>
|
2282
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 208</span>
|
2283
|
+
|
2284
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_safe_get'>safe_get</span><span class='lparen'>(</span><span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
|
2285
|
+
<span class='kw'>return</span> <span class='id identifier rubyid_default'>default</span> <span class='kw'>if</span> <span class='id identifier rubyid_event'>event</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
2286
|
+
|
2287
|
+
<span class='comment'># Handle Dry::Events::Event objects
|
2288
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_event'>event</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:payload</span><span class='rparen'>)</span>
|
2289
|
+
<span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_event'>event</span><span class='period'>.</span><span class='id identifier rubyid_payload'>payload</span>
|
2290
|
+
<span class='kw'>return</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='comma'>,</span> <span class='id identifier rubyid_default'>default</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
2291
|
+
<span class='kw'>end</span>
|
2292
|
+
|
2293
|
+
<span class='comment'># Handle plain hash events
|
2294
|
+
</span> <span class='id identifier rubyid_event'>event</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span><span class='rparen'>)</span> <span class='kw'>do</span>
|
2295
|
+
<span class='id identifier rubyid_event'>event</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='comma'>,</span> <span class='id identifier rubyid_default'>default</span><span class='rparen'>)</span>
|
2296
|
+
<span class='kw'>end</span>
|
2297
|
+
<span class='kw'>end</span></pre>
|
2298
|
+
</td>
|
2299
|
+
</tr>
|
2300
|
+
</table>
|
2301
|
+
</div>
|
2302
|
+
|
2303
|
+
<div class="method_details ">
|
2304
|
+
<h3 class="signature " id="should_handle_event?-instance_method">
|
2305
|
+
|
2306
|
+
#<strong>should_handle_event?</strong>(event_constant) ⇒ <tt>Boolean</tt> <span class="extras">(protected)</span>
|
2307
|
+
|
2308
|
+
|
2309
|
+
|
2310
|
+
|
2311
|
+
|
2312
|
+
</h3><div class="docstring">
|
2313
|
+
<div class="discussion">
|
2314
|
+
|
2315
|
+
<p>Check if this subscriber should handle the given event</p>
|
2316
|
+
|
2317
|
+
|
2318
|
+
</div>
|
2319
|
+
</div>
|
2320
|
+
<div class="tags">
|
2321
|
+
<p class="tag_title">Parameters:</p>
|
2322
|
+
<ul class="param">
|
2323
|
+
|
2324
|
+
<li>
|
2325
|
+
|
2326
|
+
<span class='name'>event_constant</span>
|
2327
|
+
|
2328
|
+
|
2329
|
+
<span class='type'>(<tt>String</tt>)</span>
|
2330
|
+
|
2331
|
+
|
2332
|
+
|
2333
|
+
—
|
2334
|
+
<div class='inline'>
|
2335
|
+
<p>The event constant</p>
|
2336
|
+
</div>
|
2337
|
+
|
2338
|
+
</li>
|
2339
|
+
|
2340
|
+
</ul>
|
2341
|
+
|
2342
|
+
<p class="tag_title">Returns:</p>
|
2343
|
+
<ul class="return">
|
2344
|
+
|
2345
|
+
<li>
|
2346
|
+
|
2347
|
+
|
2348
|
+
<span class='type'>(<tt>Boolean</tt>)</span>
|
2349
|
+
|
2350
|
+
|
2351
|
+
|
2352
|
+
—
|
2353
|
+
<div class='inline'>
|
2354
|
+
<p>Whether to handle this event</p>
|
2355
|
+
</div>
|
2356
|
+
|
2357
|
+
</li>
|
2358
|
+
|
2359
|
+
</ul>
|
2360
|
+
|
2361
|
+
</div><table class="source_code">
|
2362
|
+
<tr>
|
2363
|
+
<td>
|
2364
|
+
<pre class="lines">
|
2365
|
+
|
2366
|
+
|
2367
|
+
186
|
2368
|
+
187
|
2369
|
+
188
|
2370
|
+
189
|
2371
|
+
190
|
2372
|
+
191
|
2373
|
+
192</pre>
|
2374
|
+
</td>
|
2375
|
+
<td>
|
2376
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 186</span>
|
2377
|
+
|
2378
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_should_handle_event?'>should_handle_event?</span><span class='lparen'>(</span><span class='id identifier rubyid_event_constant'>event_constant</span><span class='rparen'>)</span>
|
2379
|
+
<span class='comment'># Apply class-level filter if defined
|
2380
|
+
</span> <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_event_filter'>event_filter</span> <span class='op'>&&</span> <span class='op'>!</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_event_filter'>event_filter</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_event_constant'>event_constant</span><span class='rparen'>)</span>
|
2381
|
+
|
2382
|
+
<span class='comment'># Apply instance-level filtering (override in subclasses)
|
2383
|
+
</span> <span class='id identifier rubyid_should_process_event?'>should_process_event?</span><span class='lparen'>(</span><span class='id identifier rubyid_event_constant'>event_constant</span><span class='rparen'>)</span>
|
2384
|
+
<span class='kw'>end</span></pre>
|
2385
|
+
</td>
|
2386
|
+
</tr>
|
2387
|
+
</table>
|
2388
|
+
</div>
|
2389
|
+
|
2390
|
+
<div class="method_details ">
|
2391
|
+
<h3 class="signature " id="should_process_event?-instance_method">
|
2392
|
+
|
2393
|
+
#<strong>should_process_event?</strong>(_event_constant) ⇒ <tt>Boolean</tt> <span class="extras">(protected)</span>
|
2394
|
+
|
2395
|
+
|
2396
|
+
|
2397
|
+
|
2398
|
+
|
2399
|
+
</h3><div class="docstring">
|
2400
|
+
<div class="discussion">
|
2401
|
+
|
2402
|
+
<p>Instance-level event filtering (override in subclasses)</p>
|
2403
|
+
|
2404
|
+
|
2405
|
+
</div>
|
2406
|
+
</div>
|
2407
|
+
<div class="tags">
|
2408
|
+
<p class="tag_title">Parameters:</p>
|
2409
|
+
<ul class="param">
|
2410
|
+
|
2411
|
+
<li>
|
2412
|
+
|
2413
|
+
<span class='name'>_event_constant</span>
|
2414
|
+
|
2415
|
+
|
2416
|
+
<span class='type'>(<tt>String</tt>)</span>
|
2417
|
+
|
2418
|
+
|
2419
|
+
|
2420
|
+
—
|
2421
|
+
<div class='inline'>
|
2422
|
+
<p>The event constant (unused in base implementation)</p>
|
2423
|
+
</div>
|
2424
|
+
|
2425
|
+
</li>
|
2426
|
+
|
2427
|
+
</ul>
|
2428
|
+
|
2429
|
+
<p class="tag_title">Returns:</p>
|
2430
|
+
<ul class="return">
|
2431
|
+
|
2432
|
+
<li>
|
2433
|
+
|
2434
|
+
|
2435
|
+
<span class='type'>(<tt>Boolean</tt>)</span>
|
2436
|
+
|
2437
|
+
|
2438
|
+
|
2439
|
+
—
|
2440
|
+
<div class='inline'>
|
2441
|
+
<p>Whether to handle this event</p>
|
2442
|
+
</div>
|
2443
|
+
|
2444
|
+
</li>
|
2445
|
+
|
2446
|
+
</ul>
|
2447
|
+
|
2448
|
+
</div><table class="source_code">
|
2449
|
+
<tr>
|
2450
|
+
<td>
|
2451
|
+
<pre class="lines">
|
2452
|
+
|
2453
|
+
|
2454
|
+
198
|
2455
|
+
199
|
2456
|
+
200</pre>
|
2457
|
+
</td>
|
2458
|
+
<td>
|
2459
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 198</span>
|
2460
|
+
|
2461
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_should_process_event?'>should_process_event?</span><span class='lparen'>(</span><span class='id identifier rubyid__event_constant'>_event_constant</span><span class='rparen'>)</span>
|
2462
|
+
<span class='kw'>true</span> <span class='comment'># Process all events by default
|
2463
|
+
</span><span class='kw'>end</span></pre>
|
2464
|
+
</td>
|
2465
|
+
</tr>
|
2466
|
+
</table>
|
2467
|
+
</div>
|
2468
|
+
|
2469
|
+
<div class="method_details ">
|
2470
|
+
<h3 class="signature " id="subscribe_to_publisher-instance_method">
|
2471
|
+
|
2472
|
+
#<strong>subscribe_to_publisher</strong>(publisher) ⇒ <tt>void</tt>
|
2473
|
+
|
2474
|
+
|
2475
|
+
|
2476
|
+
|
2477
|
+
|
2478
|
+
</h3><div class="docstring">
|
2479
|
+
<div class="discussion">
|
2480
|
+
<p class="note returns_void">This method returns an undefined value.</p>
|
2481
|
+
<p>Subscribe to all events defined by the class</p>
|
2482
|
+
|
2483
|
+
|
2484
|
+
</div>
|
2485
|
+
</div>
|
2486
|
+
<div class="tags">
|
2487
|
+
<p class="tag_title">Parameters:</p>
|
2488
|
+
<ul class="param">
|
2489
|
+
|
2490
|
+
<li>
|
2491
|
+
|
2492
|
+
<span class='name'>publisher</span>
|
2493
|
+
|
2494
|
+
|
2495
|
+
<span class='type'>(<tt><span class='object_link'><a href="../Publisher.html" title="Tasker::Events::Publisher (class)">Tasker::Events::Publisher</a></span></tt>)</span>
|
2496
|
+
|
2497
|
+
|
2498
|
+
|
2499
|
+
—
|
2500
|
+
<div class='inline'>
|
2501
|
+
<p>The event publisher</p>
|
2502
|
+
</div>
|
2503
|
+
|
2504
|
+
</li>
|
2505
|
+
|
2506
|
+
</ul>
|
2507
|
+
|
2508
|
+
|
2509
|
+
</div><table class="source_code">
|
2510
|
+
<tr>
|
2511
|
+
<td>
|
2512
|
+
<pre class="lines">
|
2513
|
+
|
2514
|
+
|
2515
|
+
86
|
2516
|
+
87
|
2517
|
+
88
|
2518
|
+
89
|
2519
|
+
90
|
2520
|
+
91
|
2521
|
+
92
|
2522
|
+
93
|
2523
|
+
94
|
2524
|
+
95</pre>
|
2525
|
+
</td>
|
2526
|
+
<td>
|
2527
|
+
<pre class="code"><span class="info file"># File 'lib/tasker/events/subscribers/base_subscriber.rb', line 86</span>
|
2528
|
+
|
2529
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_subscribe_to_publisher'>subscribe_to_publisher</span><span class='lparen'>(</span><span class='id identifier rubyid_publisher'>publisher</span><span class='rparen'>)</span>
|
2530
|
+
<span class='id identifier rubyid_event_subscriptions'>event_subscriptions</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_event_constant'>event_constant</span><span class='comma'>,</span> <span class='id identifier rubyid_handler_method'>handler_method</span><span class='op'>|</span>
|
2531
|
+
<span class='comment'># Apply filtering if defined
|
2532
|
+
</span> <span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_should_handle_event?'>should_handle_event?</span><span class='lparen'>(</span><span class='id identifier rubyid_event_constant'>event_constant</span><span class='rparen'>)</span>
|
2533
|
+
|
2534
|
+
<span class='comment'># Subscribe to the event with automatic method routing
|
2535
|
+
</span> <span class='comment'># This will fail fast if the event doesn't exist, which is the correct behavior
|
2536
|
+
</span> <span class='id identifier rubyid_publisher'>publisher</span><span class='period'>.</span><span class='id identifier rubyid_subscribe'>subscribe</span><span class='lparen'>(</span><span class='id identifier rubyid_event_constant'>event_constant</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='id identifier rubyid_handler_method'>handler_method</span><span class='rparen'>)</span><span class='rparen'>)</span>
|
2537
|
+
<span class='kw'>end</span>
|
2538
|
+
<span class='kw'>end</span></pre>
|
2539
|
+
</td>
|
2540
|
+
</tr>
|
2541
|
+
</table>
|
2542
|
+
</div>
|
2543
|
+
|
2544
|
+
</div>
|
2545
|
+
|
2546
|
+
</div>
|
2547
|
+
|
2548
|
+
<div id="footer">
|
2549
|
+
Generated on Tue Jul 1 16:47:41 2025 by
|
2550
|
+
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
2551
|
+
0.9.37 (ruby-3.2.4).
|
2552
|
+
</div>
|
2553
|
+
|
2554
|
+
</div>
|
2555
|
+
</body>
|
2556
|
+
</html>
|