# Capistrano plugin hook to set default values namespace :load do

task :defaults do
  set :sidekiq_systemd_role, fetch(:sidekiq_systemd_role, :app)
  set :sidekiq_systemd_use_hooks, fetch(:sidekiq_systemd_use_hooks, false)
end

end

# Integrate sidekiq hooks into Capistrano namespace :deploy do

before :starting, :add_sidekiq_systemd_hooks do
  invoke 'sidekiq_systemd:add_hooks' if fetch(:sidekiq_systemd_use_hooks)
end

end

namespace :sidekiq_systemd do

# NOTE: no `desc` here to avoid publishing this task in the `cap -T` list
task :add_hooks do
  after 'deploy:failed', 'sidekiq_systemd:restart'
  after 'deploy:published', 'sidekiq_systemd:start'
  after 'deploy:starting', 'sidekiq_systemd:quiet'
  after 'deploy:updated', 'sidekiq_systemd:stop'
end

desc 'Stop workers from picking up new jobs'
task :quiet do
  on roles fetch(:sidekiq_systemd_role) do
    sudo :systemctl, 'reload', 'sidekiq-*', raise_on_non_zero_exit: false
  end
end

desc 'Stop running workers gracefully'
task :stop do
  on roles fetch(:sidekiq_systemd_role) do
    sudo :systemctl, 'stop', 'sidekiq-*'
  end
end

desc 'Start workers'
task :start do
  on roles fetch(:sidekiq_systemd_role) do
    sudo :systemctl, 'start', 'sidekiq-*', '--all'
  end
end

desc 'Restart workers'
task :restart do
  on roles fetch(:sidekiq_systemd_role) do
    sudo :systemctl, 'restart', 'sidekiq-*', raise_on_non_zero_exit: false
  end
end

end