# frozen_string_literal: true
# @note Inspired by Puma capistrano handlers and Sidekiq capistrano handlers # @see github.com/seuros/capistrano-puma/blob/master/lib/capistrano/tasks/puma.rake # @see github.com/seuros/capistrano-sidekiq/blob/master/lib/capistrano/tasks/capistrano2.rb namespace :karafka do
# @return [Array<Hash>] hash with details about each of the processes that # we're suppose to manage. Contains pidfile and consumer_groups for now def karafka_processes_details processes_details = [] Array(fetch(:karafka_role)).each do |role| next unless host.roles.include?(role) processes = fetch(:"#{role}_processes") || fetch(:karafka_processes) consumer_groups = fetch(:"#{role}_consumer_groups") || fetch(:karafka_consumer_groups) processes.times do |index| processes_details << { pidfile: fetch(:karafka_pid).gsub(/\.pid$/, "-#{index}.pid"), consumer_groups: consumer_groups[index] } end end processes_details end def for_each_karafka_process karafka_processes_details.each_with_index do |process_details, index| within release_path do yield(process_details, index) end end end task :add_default_hooks do after 'deploy:finished', 'karafka:restart' end
end