Skip to content

Specific callback per workflow #5

@vicentesi

Description

@vicentesi

Hi, how are you?

First, thanks for all your work.

I need to trigger callbacks per job instance, as I'm trying below:

Workflow Root Job:

class CsvGenerator::BaseJob
  include Sidekiq::Worker

  sidekiq_options workflow: true, queue: :test

  def on_workflow_complete
    Rails.logger.info "[JobWorkflow] Callback Completed!"
  end

  def perform
   # call child jobs
  end

Callback Registry:

Sidekiq::Hierarchy.callback_registry
  .subscribe(Sidekiq::Hierarchy::Notifications::WORKFLOW_UPDATE,
             Sidekiq::Hierarchy::WorkflowListener.new)

Workflow Listener:

class Sidekiq::Hierarchy::WorkflowListener
  def call(job, status, _old_status)
    Rails.logger.info "[JobWorkflow] Job: #{job} Status: #{status}"

    callback = :"on_workflow_#{status}"

    job.send(callback) if job.respond_to?(callback)
  end
end

The problem is that this line won't work: job.send(callback) if job.respond_to?(callback), because job is not our class, is a Sidekiq::Hierarchy::Workflow & Jobs...

Is there any way to get the original CsvGenerator::BaseJob instance from job inside Listener's call()?

Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions