Module: Kaal

Extended by:
RegisterConflictSupport
Defined in:
lib/kaal.rb,
lib/kaal/cli.rb,
lib/kaal/core.rb,
lib/kaal/utils.rb,
lib/kaal/config.rb,
lib/kaal/runtime.rb,
lib/kaal/version.rb,
lib/kaal/registry.rb,
lib/kaal/backend/mysql.rb,
lib/kaal/backend/sqlite.rb,
lib/kaal/scheduler_file.rb,
lib/kaal/sequel_support.rb,
lib/kaal/backend/adapter.rb,
lib/kaal/backend/postgres.rb,
lib/kaal/core/coordinator.rb,
lib/kaal/utils/cron_utils.rb,
lib/kaal/dispatch/registry.rb,
lib/kaal/support/hash_tools.rb,
lib/kaal/definition/registry.rb,
lib/kaal/config/configuration.rb,
lib/kaal/persistence/database.rb,
lib/kaal/utils/cron_humanizer.rb,
lib/kaal/active_record_support.rb,
lib/kaal/backend/redis_adapter.rb,
lib/kaal/dispatch/redis_engine.rb,
lib/kaal/scheduler_file/loader.rb,
lib/kaal/backend/memory_adapter.rb,
lib/kaal/core/occurrence_finder.rb,
lib/kaal/dispatch/memory_engine.rb,
lib/kaal/definition/redis_engine.rb,
lib/kaal/runtime/runtime_context.rb,
lib/kaal/backend/dispatch_logging.rb,
lib/kaal/definition/memory_engine.rb,
lib/kaal/dispatch/database_engine.rb,
lib/kaal/register_conflict_support.rb,
lib/kaal/definition/database_engine.rb,
lib/kaal/scheduler_file/job_applier.rb,
lib/kaal/runtime/signal_handler_chain.rb,
lib/kaal/scheduler_file/helper_bundle.rb,
lib/kaal/config/scheduler_config_error.rb,
lib/kaal/core/enabled_entry_enumerator.rb,
lib/kaal/definitions/registry_accessor.rb,
lib/kaal/internal/sequel/mysql_backend.rb,
lib/kaal/runtime/scheduler_boot_loader.rb,
lib/kaal/scheduler_file/hash_transform.rb,
lib/kaal/scheduler_file/job_normalizer.rb,
lib/kaal/scheduler_file/payload_loader.rb,
lib/kaal/definition/persistence_helpers.rb,
lib/kaal/backend/dispatch_attempt_logger.rb,
lib/kaal/persistence/migration_templates.rb,
lib/kaal/utils/idempotency_key_generator.rb,
lib/kaal/definitions/registration_service.rb,
lib/kaal/internal/sequel/database_backend.rb,
lib/kaal/internal/sequel/postgres_backend.rb,
lib/kaal/runtime/signal_handler_installer.rb,
lib/kaal/backend/dispatch_registry_accessor.rb,
lib/kaal/internal/active_record/base_record.rb,
lib/kaal/internal/active_record/lock_record.rb,
lib/kaal/scheduler_file/placeholder_support.rb,
lib/kaal/config/scheduler_time_zone_resolver.rb,
lib/kaal/internal/active_record/mysql_backend.rb,
lib/kaal/internal/active_record/dispatch_record.rb,
lib/kaal/internal/active_record/database_backend.rb,
lib/kaal/internal/active_record/postgres_backend.rb,
lib/kaal/internal/active_record/definition_record.rb,
lib/kaal/internal/active_record/dispatch_registry.rb,
lib/kaal/internal/active_record/connection_support.rb,
lib/kaal/internal/active_record/definition_registry.rb,
lib/kaal/internal/active_record/migration_templates.rb

Overview

Copyright Codevedas Inc. 2025-present

This source code is licensed under the MIT license found in the LICENSE file in the root directory of this source tree.

Defined Under Namespace

Modules: ActiveRecord, Backend, Config, Core, CronHumanizer, CronUtils, Definition, Definitions, Dispatch, Internal, Persistence, RegisterConflictSupport, Runtime, SchedulerFile, SchedulerHashTransform, SchedulerPlaceholderSupport, Sequel, Support, Utils Classes: CLI, Configuration, ConfigurationError, Coordinator, EnabledEntryEnumerator, IdempotencyKeyGenerator, OccurrenceFinder, Registry, RegistryError, RuntimeContext, SchedulerBootLoader, SchedulerConfigError, SchedulerFileLoader, SchedulerTimeZoneResolver, SignalHandlerChain, SignalHandlerInstaller

Constant Summary collapse

VERSION =
'0.4.0'

Class Method Summary collapse

Class Method Details

.backendObject



160
# File 'lib/kaal.rb', line 160

def backend = configuration.backend

.backend=(value) ⇒ Object



184
185
186
# File 'lib/kaal.rb', line 184

def backend=(value)
  configuration.backend = value
end

.configurationObject



41
42
43
# File 'lib/kaal.rb', line 41

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



78
79
80
# File 'lib/kaal.rb', line 78

def configure
  yield(configuration) if block_given?
end

.coordinatorObject



49
50
51
# File 'lib/kaal.rb', line 49

def coordinator
  @coordinator ||= Coordinator.new(configuration: configuration, registry: registry)
end

.definition_registryObject



196
197
198
# File 'lib/kaal.rb', line 196

def definition_registry
  definitions_registry_accessor.call
end

.disable(key:) ⇒ Object



117
118
119
# File 'lib/kaal.rb', line 117

def disable(key:)
  definition_registry.disable_definition(key)
end

.dispatch_log_registryObject



151
152
153
# File 'lib/kaal.rb', line 151

def dispatch_log_registry
  dispatch_registry_accessor.registry
end

.dispatched?(key, fire_time) ⇒ Boolean

Returns:

  • (Boolean)


147
148
149
# File 'lib/kaal.rb', line 147

def dispatched?(key, fire_time)
  dispatch_registry_accessor.dispatched?(key, fire_time)
end

.enable(key:) ⇒ Object



113
114
115
# File 'lib/kaal.rb', line 113

def enable(key:)
  definition_registry.enable_definition(key)
end

.lease_ttlObject



158
# File 'lib/kaal.rb', line 158

def lease_ttl = configuration.lease_ttl

.lease_ttl=(value) ⇒ Object



176
177
178
# File 'lib/kaal.rb', line 176

def lease_ttl=(value)
  configuration.lease_ttl = value
end

.lint(expression) ⇒ Object



216
217
218
# File 'lib/kaal.rb', line 216

def lint(expression)
  CronUtils.lint(expression)
end

.load_scheduler_file!(runtime_context: RuntimeContext.default) ⇒ Object



86
87
88
89
90
91
92
93
94
# File 'lib/kaal.rb', line 86

def load_scheduler_file!(runtime_context: RuntimeContext.default)
  SchedulerFileLoader.new(
    configuration: configuration,
    definition_registry: definition_registry,
    registry: registry,
    logger: configuration.logger,
    runtime_context: runtime_context
  ).load
end

.loggerObject



161
# File 'lib/kaal.rb', line 161

def logger = configuration.logger

.logger=(value) ⇒ Object



188
189
190
# File 'lib/kaal.rb', line 188

def logger=(value)
  configuration.logger = value
end

.namespaceObject



159
# File 'lib/kaal.rb', line 159

def namespace = configuration.namespace

.namespace=(value) ⇒ Object



180
181
182
# File 'lib/kaal.rb', line 180

def namespace=(value)
  configuration.namespace = value
end

.register(key:, cron:, enqueue:) ⇒ Object



82
83
84
# File 'lib/kaal.rb', line 82

def register(key:, cron:, enqueue:)
  registration_service.call(key:, cron:, enqueue:)
end

.registeredObject



101
102
103
104
105
106
107
# File 'lib/kaal.rb', line 101

def registered
  definition_registry.all_definitions.map do |definition|
    key = definition[:key]
    callback = registry.find(key)&.enqueue
    Registry::Entry.new(key: key, cron: definition[:cron], enqueue: callback).freeze
  end
end

.registered?(key:) ⇒ Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/kaal.rb', line 109

def registered?(key:)
  !!definition_registry.find_definition(key)
end

.registryObject



45
46
47
# File 'lib/kaal.rb', line 45

def registry
  @registry ||= Registry.new
end

.reset_configuration!Object



53
54
55
56
57
58
59
# File 'lib/kaal.rb', line 53

def reset_configuration!
  @configuration = Configuration.new
  @coordinator = nil
  @definition_registry = nil
  @definitions_registry_accessor = nil
  @dispatch_registry_accessor = nil
end

.reset_coordinator!Object



68
69
70
71
72
73
74
75
76
# File 'lib/kaal.rb', line 68

def reset_coordinator!
  if @coordinator&.running?
    stopped = @coordinator.stop!
    raise 'Failed to stop coordinator thread within timeout' unless stopped
  end

  @coordinator = nil
  coordinator
end

.reset_registry!Object



61
62
63
64
65
66
# File 'lib/kaal.rb', line 61

def reset_registry!
  @registry = Registry.new
  definition_registry = @definition_registry
  definition_registry.clear if definition_registry.respond_to?(:clear)
  @coordinator = nil
end

.restart!Object



133
134
135
# File 'lib/kaal.rb', line 133

def restart!
  coordinator.restart!
end

.running?Boolean

Returns:

  • (Boolean)


129
130
131
# File 'lib/kaal.rb', line 129

def running?
  coordinator.running?
end

.simplify(expression) ⇒ Object



212
213
214
# File 'lib/kaal.rb', line 212

def simplify(expression)
  CronUtils.simplify(expression)
end

.start!Object



121
122
123
# File 'lib/kaal.rb', line 121

def start!
  coordinator.start!
end

.stop!(timeout: 30) ⇒ Object



125
126
127
# File 'lib/kaal.rb', line 125

def stop!(timeout: 30)
  coordinator.stop!(timeout: timeout)
end

.tick!Object



137
138
139
# File 'lib/kaal.rb', line 137

def tick!
  coordinator.tick!
end

.tick_intervalObject



155
# File 'lib/kaal.rb', line 155

def tick_interval = configuration.tick_interval

.tick_interval=(value) ⇒ Object



164
165
166
# File 'lib/kaal.rb', line 164

def tick_interval=(value)
  configuration.tick_interval = value
end

.time_zoneObject



162
# File 'lib/kaal.rb', line 162

def time_zone = configuration.time_zone

.time_zone=(value) ⇒ Object



192
193
194
# File 'lib/kaal.rb', line 192

def time_zone=(value)
  configuration.time_zone = value
end

.to_human(expression, locale: nil) ⇒ Object



220
221
222
# File 'lib/kaal.rb', line 220

def to_human(expression, locale: nil)
  CronHumanizer.to_human(expression, locale: locale)
end

.unregister(key:) ⇒ Object



96
97
98
99
# File 'lib/kaal.rb', line 96

def unregister(key:)
  definition_registry.remove_definition(key)
  registry.remove(key)
end

.valid?(expression) ⇒ Boolean

Returns:

  • (Boolean)


208
209
210
# File 'lib/kaal.rb', line 208

def valid?(expression)
  CronUtils.valid?(expression)
end

.validateObject



200
201
202
# File 'lib/kaal.rb', line 200

def validate
  configuration.validate
end

.validate!Object



204
205
206
# File 'lib/kaal.rb', line 204

def validate!
  configuration.validate!
end

.window_lookaheadObject



157
# File 'lib/kaal.rb', line 157

def window_lookahead = configuration.window_lookahead

.window_lookahead=(value) ⇒ Object



172
173
174
# File 'lib/kaal.rb', line 172

def window_lookahead=(value)
  configuration.window_lookahead = value
end

.window_lookbackObject



156
# File 'lib/kaal.rb', line 156

def window_lookback = configuration.window_lookback

.window_lookback=(value) ⇒ Object



168
169
170
# File 'lib/kaal.rb', line 168

def window_lookback=(value)
  configuration.window_lookback = value
end

.with_idempotency(key, fire_time) {|IdempotencyKeyGenerator.call(key, fire_time, configuration: configuration)| ... } ⇒ Object

Yields:

Raises:

  • (ArgumentError)


141
142
143
144
145
# File 'lib/kaal.rb', line 141

def with_idempotency(key, fire_time)
  raise ArgumentError, 'block required' unless block_given?

  yield(IdempotencyKeyGenerator.call(key, fire_time, configuration: configuration))
end