Class: GenevaDrive::HousekeepingJob

Inherits:
ActiveJob::Base
  • Object
show all
Defined in:
lib/geneva_drive/jobs/housekeeping_job.rb

Overview

Job that performs housekeeping tasks for GenevaDrive workflows.

This job handles two main responsibilities:

  1. Cleanup: Deletes completed/canceled workflows (with their step executions) that are older than the configured threshold.
  2. Recovery: Recovers stuck step executions that are:
    • In "in_progress" state for too long (process crashed)
    • In "scheduled" state past their scheduled_for time (job never ran)

Examples:

Running the housekeeping job

GenevaDrive::HousekeepingJob.perform_later

Scheduling with good-job or sidekiq-cron

# Run every 30 minutes
GenevaDrive::HousekeepingJob.set(cron: "*/30 * * * *").perform_later

Configuration

# config/initializers/geneva_drive.rb
GenevaDrive.delete_completed_workflows_after = 30.days
GenevaDrive.stuck_in_progress_threshold = 1.hour
GenevaDrive.stuck_scheduled_threshold = 15.minutes
GenevaDrive.stuck_recovery_action = :reattempt # or :cancel

Instance Method Summary collapse

Instance Method Details

#performHash

Performs housekeeping tasks.

Returns:

  • (Hash)

    summary of actions taken



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/geneva_drive/jobs/housekeeping_job.rb', line 32

def perform
  results = {
    workflows_cleaned_up: 0,
    step_executions_cleaned_up: 0,
    stuck_in_progress_recovered: 0,
    stuck_scheduled_recovered: 0
  }

  cleanup_completed_workflows!(results)
  recover_stuck_step_executions!(results)
  report_workflow_gauges!

  logger.info("Completed: #{results}")
  results
end