capistrano-sidekiq 2.0.0.beta5 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.tool-versions +1 -1
- data/CHANGELOG.md +221 -66
- data/Gemfile +4 -0
- data/README.md +25 -5
- data/Rakefile +8 -0
- data/capistrano-sidekiq.gemspec +0 -1
- data/lib/capistrano/sidekiq/helpers.rb +60 -0
- data/lib/capistrano/sidekiq/monit.rb +2 -0
- data/lib/capistrano/sidekiq/systemd.rb +4 -1
- data/lib/capistrano/sidekiq/upstart.rb +6 -2
- data/lib/capistrano/sidekiq/version.rb +1 -1
- data/lib/capistrano/sidekiq.rb +1 -0
- data/lib/capistrano/tasks/monit.rake +63 -104
- data/lib/capistrano/tasks/sidekiq.rake +1 -7
- data/lib/capistrano/tasks/systemd.rake +209 -51
- data/lib/capistrano/tasks/upstart.rake +14 -54
- data/lib/generators/capistrano/sidekiq/monit/templates/sidekiq_monit.conf.erb +4 -8
- data/lib/generators/capistrano/sidekiq/systemd/templates/sidekiq.service.capistrano.erb +51 -7
- metadata +9 -8
@@ -1,14 +1,4 @@
|
|
1
|
-
|
2
|
-
task :defaults do
|
3
|
-
set :sidekiq_monit_conf_dir, '/etc/monit/conf.d'
|
4
|
-
set :sidekiq_monit_conf_file, -> { "#{sidekiq_service_name}.conf" }
|
5
|
-
set :sidekiq_monit_use_sudo, true
|
6
|
-
set :monit_bin, '/usr/bin/monit'
|
7
|
-
set :sidekiq_monit_default_hooks, true
|
8
|
-
set :sidekiq_monit_templates_path, 'config/deploy/templates'
|
9
|
-
set :sidekiq_monit_group, nil
|
10
|
-
end
|
11
|
-
end
|
1
|
+
git_plugin = self
|
12
2
|
|
13
3
|
namespace :deploy do
|
14
4
|
before :starting, :check_sidekiq_monit_hooks do
|
@@ -20,7 +10,6 @@ end
|
|
20
10
|
|
21
11
|
namespace :sidekiq do
|
22
12
|
namespace :monit do
|
23
|
-
|
24
13
|
task :add_default_hooks do
|
25
14
|
before 'deploy:updating', 'sidekiq:monit:unmonitor'
|
26
15
|
after 'deploy:published', 'sidekiq:monit:monitor'
|
@@ -30,24 +19,26 @@ namespace :sidekiq do
|
|
30
19
|
task :config do
|
31
20
|
on roles(fetch(:sidekiq_roles)) do |role|
|
32
21
|
@role = role
|
33
|
-
upload_sidekiq_template 'sidekiq_monit', "#{fetch(:tmp_dir)}/monit.conf", @role
|
22
|
+
git_plugin.upload_sidekiq_template 'sidekiq_monit', "#{fetch(:tmp_dir)}/monit.conf", @role
|
34
23
|
|
35
|
-
|
36
|
-
|
24
|
+
git_plugin.switch_user(role) do
|
25
|
+
mv_command = "mv #{fetch(:tmp_dir)}/monit.conf #{fetch(:sidekiq_monit_conf_dir)}/#{fetch(:sidekiq_monit_conf_file)}"
|
37
26
|
|
38
|
-
|
27
|
+
git_plugin.sudo_if_needed mv_command
|
28
|
+
git_plugin.sudo_if_needed "#{fetch(:monit_bin)} reload"
|
29
|
+
end
|
39
30
|
end
|
40
31
|
end
|
41
32
|
|
42
33
|
desc 'Monitor Sidekiq monit-service'
|
43
34
|
task :monitor do
|
44
|
-
on roles(fetch(:sidekiq_roles)) do
|
45
|
-
|
35
|
+
on roles(fetch(:sidekiq_roles)) do |role|
|
36
|
+
git_plugin.switch_user(role) do
|
46
37
|
begin
|
47
|
-
sudo_if_needed "#{fetch(:monit_bin)} monitor #{sidekiq_service_name
|
38
|
+
git_plugin.sudo_if_needed "#{fetch(:monit_bin)} monitor #{git_plugin.sidekiq_service_name}"
|
48
39
|
rescue
|
49
40
|
invoke 'sidekiq:monit:config'
|
50
|
-
sudo_if_needed "#{fetch(:monit_bin)} monitor #{sidekiq_service_name
|
41
|
+
git_plugin.sudo_if_needed "#{fetch(:monit_bin)} monitor #{git_plugin.sidekiq_service_name}"
|
51
42
|
end
|
52
43
|
end
|
53
44
|
end
|
@@ -55,114 +46,82 @@ namespace :sidekiq do
|
|
55
46
|
|
56
47
|
desc 'Unmonitor Sidekiq monit-service'
|
57
48
|
task :unmonitor do
|
58
|
-
on roles(fetch(:sidekiq_roles)) do
|
59
|
-
|
49
|
+
on roles(fetch(:sidekiq_roles)) do |role|
|
50
|
+
git_plugin.switch_user(role) do
|
60
51
|
begin
|
61
|
-
sudo_if_needed "#{fetch(:monit_bin)} unmonitor #{sidekiq_service_name
|
52
|
+
git_plugin.sudo_if_needed "#{fetch(:monit_bin)} unmonitor #{git_plugin.sidekiq_service_name}"
|
62
53
|
rescue
|
63
54
|
# no worries here
|
64
55
|
end
|
65
56
|
end
|
66
57
|
end
|
67
58
|
end
|
59
|
+
end
|
68
60
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
desc 'Stop Sidekiq monit-service'
|
79
|
-
task :stop do
|
80
|
-
on roles(fetch(:sidekiq_roles)) do
|
81
|
-
fetch(:sidekiq_processes).times do |idx|
|
82
|
-
sudo_if_needed "#{fetch(:monit_bin)} stop #{sidekiq_service_name(idx)}"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
desc 'Restart Sidekiq monit-service'
|
88
|
-
task :restart do
|
89
|
-
on roles(fetch(:sidekiq_roles)) do
|
90
|
-
fetch(:sidekiq_processes).times do |idx|
|
91
|
-
sudo_if_needed"#{fetch(:monit_bin)} restart #{sidekiq_service_name(idx)}"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def sidekiq_service_name(index=nil)
|
97
|
-
fetch(:sidekiq_service_name, "sidekiq_#{fetch(:application)}_#{fetch(:sidekiq_env)}") + (index ? "_#{index}" : '')
|
98
|
-
end
|
99
|
-
|
100
|
-
def sidekiq_config
|
101
|
-
if fetch(:sidekiq_config)
|
102
|
-
"--config #{fetch(:sidekiq_config)}"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def sidekiq_concurrency
|
107
|
-
if fetch(:sidekiq_concurrency)
|
108
|
-
"--concurrency #{fetch(:sidekiq_concurrency)}"
|
61
|
+
desc 'Start Sidekiq monit-service'
|
62
|
+
task :start do
|
63
|
+
on roles(fetch(:sidekiq_roles)) do |role|
|
64
|
+
git_plugin.switch_user(role) do
|
65
|
+
git_plugin.sudo_if_needed "#{fetch(:monit_bin)} start #{git_plugin.sidekiq_service_name}"
|
109
66
|
end
|
110
67
|
end
|
68
|
+
end
|
111
69
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
def sidekiq_logfile
|
119
|
-
if fetch(:sidekiq_log)
|
120
|
-
"--logfile #{fetch(:sidekiq_log)}"
|
70
|
+
desc 'Stop Sidekiq monit-service'
|
71
|
+
task :stop do
|
72
|
+
on roles(fetch(:sidekiq_roles)) do |role|
|
73
|
+
git_plugin.switch_user(role) do
|
74
|
+
git_plugin.sudo_if_needed "#{fetch(:monit_bin)} stop #{git_plugin.sidekiq_service_name}"
|
121
75
|
end
|
122
76
|
end
|
77
|
+
end
|
123
78
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
79
|
+
desc 'Restart Sidekiq monit-service'
|
80
|
+
task :restart do
|
81
|
+
on roles(fetch(:sidekiq_roles)) do |role|
|
82
|
+
git_plugin.sudo_if_needed "#{fetch(:monit_bin)} restart #{git_plugin.sidekiq_service_name}"
|
128
83
|
end
|
84
|
+
end
|
129
85
|
|
130
|
-
|
131
|
-
|
132
|
-
|
86
|
+
def sidekiq_service_name
|
87
|
+
fetch(:sidekiq_service_name, "sidekiq_#{fetch(:application)}_#{fetch(:sidekiq_env)}")
|
88
|
+
end
|
133
89
|
|
134
|
-
|
135
|
-
|
90
|
+
def sudo_if_needed(command)
|
91
|
+
if use_sudo?
|
92
|
+
backend.execute :sudo, command
|
93
|
+
else
|
94
|
+
backend.execute command
|
136
95
|
end
|
96
|
+
end
|
137
97
|
|
138
|
-
|
139
|
-
|
140
|
-
|
98
|
+
def use_sudo?
|
99
|
+
fetch(:sidekiq_monit_use_sudo)
|
100
|
+
end
|
141
101
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
102
|
+
def upload_sidekiq_template(from, to, role)
|
103
|
+
template = sidekiq_template(from, role)
|
104
|
+
backend.upload!(StringIO.new(ERB.new(template).result(binding)), to)
|
105
|
+
end
|
146
106
|
|
147
|
-
|
148
|
-
|
107
|
+
def sidekiq_template(name, role)
|
108
|
+
local_template_directory = fetch(:sidekiq_monit_templates_path)
|
149
109
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
110
|
+
search_paths = [
|
111
|
+
"#{name}-#{role.hostname}-#{fetch(:stage)}.erb",
|
112
|
+
"#{name}-#{role.hostname}.erb",
|
113
|
+
"#{name}-#{fetch(:stage)}.erb",
|
114
|
+
"#{name}.erb"
|
115
|
+
].map { |filename| File.join(local_template_directory, filename) }
|
156
116
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
117
|
+
global_search_path = File.expand_path(
|
118
|
+
File.join(*%w[.. .. .. generators capistrano sidekiq monit templates], "#{name}.conf.erb"),
|
119
|
+
__FILE__
|
120
|
+
)
|
161
121
|
|
162
|
-
|
122
|
+
search_paths << global_search_path
|
163
123
|
|
164
|
-
|
165
|
-
|
166
|
-
end
|
124
|
+
template_path = search_paths.detect { |path| File.file?(path) }
|
125
|
+
File.read(template_path)
|
167
126
|
end
|
168
127
|
end
|
@@ -6,15 +6,9 @@ end
|
|
6
6
|
|
7
7
|
namespace :sidekiq do
|
8
8
|
task :add_default_hooks do
|
9
|
-
after 'deploy:starting', 'sidekiq:quiet'
|
9
|
+
after 'deploy:starting', 'sidekiq:quiet' if Rake::Task.task_defined?('sidekiq:quiet')
|
10
10
|
after 'deploy:updated', 'sidekiq:stop'
|
11
11
|
after 'deploy:published', 'sidekiq:start'
|
12
12
|
after 'deploy:failed', 'sidekiq:restart'
|
13
13
|
end
|
14
|
-
|
15
|
-
desc 'Restart sidekiq'
|
16
|
-
task :restart do
|
17
|
-
invoke! 'sidekiq:stop'
|
18
|
-
invoke! 'sidekiq:start'
|
19
|
-
end
|
20
14
|
end
|
@@ -1,41 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
git_plugin = self
|
2
4
|
|
3
5
|
namespace :sidekiq do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
standard_actions = {
|
7
|
+
start: 'Start Sidekiq',
|
8
|
+
stop: 'Stop Sidekiq (graceful shutdown within timeout, put unfinished tasks back to Redis)',
|
9
|
+
status: 'Get Sidekiq Status'
|
10
|
+
}
|
11
|
+
standard_actions.each do |command, description|
|
12
|
+
desc description
|
13
|
+
task command do
|
14
|
+
on roles fetch(:sidekiq_roles) do |role|
|
15
|
+
git_plugin.switch_user(role) do
|
16
|
+
git_plugin.systemctl_command(command)
|
12
17
|
end
|
13
18
|
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
|
17
|
-
desc '
|
18
|
-
task :
|
22
|
+
desc 'Restart Sidekiq (Quiet, Wait till workers finish or 30 seconds, Stop, Start)'
|
23
|
+
task :restart do
|
19
24
|
on roles fetch(:sidekiq_roles) do |role|
|
20
25
|
git_plugin.switch_user(role) do
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
26
|
+
git_plugin.quiet_sidekiq
|
27
|
+
git_plugin.process_block do |process|
|
28
|
+
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
29
|
+
running = nil
|
30
|
+
|
31
|
+
# get running workers
|
32
|
+
while (running.nil? || running > 0) && git_plugin.duration(start_time) < 30 do
|
33
|
+
command_args =
|
34
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
35
|
+
[:sudo, 'systemd-cgls']
|
36
|
+
else
|
37
|
+
['systemd-cgls', '--user']
|
38
|
+
end
|
39
|
+
# need to pipe through tr -cd... to strip out systemd colors or you
|
40
|
+
# get log error messages for non UTF-8 characters.
|
41
|
+
command_args.push(
|
42
|
+
'-u', "#{git_plugin.sidekiq_service_unit_name(process: process)}.service",
|
43
|
+
'|', 'tr -cd \'\11\12\15\40-\176\''
|
44
|
+
)
|
45
|
+
status = capture(*command_args, raise_on_non_zero_exit: false)
|
46
|
+
status_match = status.match(/\[(?<running>\d+) of (?<total>\d+) busy\]/)
|
47
|
+
break unless status_match
|
48
|
+
|
49
|
+
running = status_match[:running]&.to_i
|
50
|
+
|
51
|
+
colors = SSHKit::Color.new($stdout)
|
52
|
+
if running.zero?
|
53
|
+
info colors.colorize("✔ Process ##{process}: No running workers. Shutting down for restart!", :green)
|
54
|
+
else
|
55
|
+
info colors.colorize("⧗ Process ##{process}: Waiting for #{running} workers.", :yellow)
|
56
|
+
sleep(1)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
git_plugin.systemctl_command(:stop, process: process)
|
61
|
+
git_plugin.systemctl_command(:start, process: process)
|
25
62
|
end
|
26
63
|
end
|
27
64
|
end
|
28
65
|
end
|
29
66
|
|
30
|
-
desc '
|
31
|
-
task :
|
67
|
+
desc 'Quiet Sidekiq (stop fetching new tasks from Redis)'
|
68
|
+
task :quiet do
|
32
69
|
on roles fetch(:sidekiq_roles) do |role|
|
33
70
|
git_plugin.switch_user(role) do
|
34
|
-
|
35
|
-
execute :sudo, :systemctl, 'start', fetch(:sidekiq_service_unit_name)
|
36
|
-
else
|
37
|
-
execute :systemctl, '--user', 'start', fetch(:sidekiq_service_unit_name)
|
38
|
-
end
|
71
|
+
git_plugin.quiet_sidekiq
|
39
72
|
end
|
40
73
|
end
|
41
74
|
end
|
@@ -45,26 +78,35 @@ namespace :sidekiq do
|
|
45
78
|
on roles fetch(:sidekiq_roles) do |role|
|
46
79
|
git_plugin.switch_user(role) do
|
47
80
|
git_plugin.create_systemd_template
|
48
|
-
if
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
81
|
+
if git_plugin.config_per_process?
|
82
|
+
git_plugin.process_block do |process|
|
83
|
+
git_plugin.create_systemd_config_symlink(process)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
git_plugin.systemctl_command(:enable)
|
87
|
+
|
88
|
+
if fetch(:sidekiq_service_unit_user) != :system && fetch(:sidekiq_enable_lingering)
|
89
|
+
execute :loginctl, 'enable-linger', fetch(:sidekiq_lingering_user)
|
53
90
|
end
|
54
91
|
end
|
55
92
|
end
|
56
93
|
end
|
57
94
|
|
58
|
-
desc '
|
95
|
+
desc 'Uninstall systemd sidekiq service'
|
59
96
|
task :uninstall do
|
60
97
|
on roles fetch(:sidekiq_roles) do |role|
|
61
98
|
git_plugin.switch_user(role) do
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
99
|
+
git_plugin.systemctl_command(:stop)
|
100
|
+
git_plugin.systemctl_command(:disable)
|
101
|
+
if git_plugin.config_per_process?
|
102
|
+
git_plugin.process_block do |process|
|
103
|
+
git_plugin.delete_systemd_config_symlink(process)
|
104
|
+
end
|
66
105
|
end
|
67
|
-
execute :rm, '-f', File.join(
|
106
|
+
execute :sudo, :rm, '-f', File.join(
|
107
|
+
fetch(:service_unit_path, git_plugin.fetch_systemd_unit_path),
|
108
|
+
git_plugin.sidekiq_service_file_name
|
109
|
+
)
|
68
110
|
end
|
69
111
|
end
|
70
112
|
end
|
@@ -79,19 +121,22 @@ namespace :sidekiq do
|
|
79
121
|
def fetch_systemd_unit_path
|
80
122
|
if fetch(:sidekiq_service_unit_user) == :system
|
81
123
|
# if the path is not standard `set :service_unit_path`
|
82
|
-
|
124
|
+
'/etc/systemd/system/'
|
83
125
|
else
|
84
126
|
home_dir = backend.capture :pwd
|
85
|
-
File.join(home_dir,
|
127
|
+
File.join(home_dir, '.config', 'systemd', 'user')
|
86
128
|
end
|
87
129
|
end
|
88
130
|
|
89
131
|
def compiled_template
|
132
|
+
local_template_directory = fetch(:sidekiq_service_templates_path)
|
90
133
|
search_paths = [
|
134
|
+
File.join(local_template_directory, "#{fetch(:sidekiq_service_unit_name)}.service.capistrano.erb"),
|
135
|
+
File.join(local_template_directory, 'sidekiq.service.capistrano.erb'),
|
91
136
|
File.expand_path(
|
92
|
-
|
93
|
-
|
94
|
-
)
|
137
|
+
File.join(*%w[.. .. .. generators capistrano sidekiq systemd templates sidekiq.service.capistrano.erb]),
|
138
|
+
__FILE__
|
139
|
+
)
|
95
140
|
]
|
96
141
|
template_path = search_paths.detect { |path| File.file?(path) }
|
97
142
|
template = File.read(template_path)
|
@@ -101,35 +146,148 @@ namespace :sidekiq do
|
|
101
146
|
def create_systemd_template
|
102
147
|
ctemplate = compiled_template
|
103
148
|
systemd_path = fetch(:service_unit_path, fetch_systemd_unit_path)
|
149
|
+
systemd_file_name = File.join(systemd_path, sidekiq_service_file_name)
|
104
150
|
|
105
|
-
if fetch(:sidekiq_service_unit_user) == :user
|
106
|
-
|
151
|
+
backend.execute :mkdir, '-p', systemd_path if fetch(:sidekiq_service_unit_user) == :user
|
152
|
+
|
153
|
+
temp_file_name = File.join('/tmp', sidekiq_service_file_name)
|
154
|
+
backend.upload!(StringIO.new(ctemplate), temp_file_name)
|
155
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
156
|
+
backend.execute :sudo, :mv, temp_file_name, systemd_file_name
|
157
|
+
backend.execute :sudo, :systemctl, 'daemon-reload'
|
158
|
+
else
|
159
|
+
backend.execute :mv, temp_file_name, systemd_file_name
|
160
|
+
backend.execute :systemctl, '--user', 'daemon-reload'
|
107
161
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
162
|
+
end
|
163
|
+
|
164
|
+
def create_systemd_config_symlink(process)
|
165
|
+
config = fetch(:sidekiq_config)
|
166
|
+
return unless config
|
167
|
+
|
168
|
+
process_config = config[process - 1]
|
169
|
+
if process_config.nil?
|
170
|
+
backend.error(
|
171
|
+
"No configuration for Process ##{process} found. "\
|
172
|
+
'Please make sure you have 1 item in :sidekiq_config for each process.'
|
173
|
+
)
|
174
|
+
exit 1
|
175
|
+
end
|
176
|
+
|
177
|
+
base_path = fetch(:deploy_to)
|
178
|
+
config_link_base_path = File.join(base_path, 'shared', 'sidekiq_systemd')
|
179
|
+
config_link_path = File.join(
|
180
|
+
config_link_base_path, sidekiq_systemd_config_name(process)
|
111
181
|
)
|
112
|
-
|
113
|
-
|
114
|
-
|
182
|
+
process_config_path = File.join(base_path, 'current', process_config)
|
183
|
+
|
184
|
+
backend.execute :mkdir, '-p', config_link_base_path
|
185
|
+
backend.execute :ln, '-sf', process_config_path, config_link_path
|
186
|
+
end
|
187
|
+
|
188
|
+
def delete_systemd_config_symlink(process)
|
189
|
+
config_link_path = File.join(
|
190
|
+
fetch(:deploy_to), 'shared', 'sidekiq_systemd',
|
191
|
+
sidekiq_systemd_config_name(process)
|
192
|
+
)
|
193
|
+
backend.execute :rm, config_link_path, raise_on_non_zero_exit: false
|
194
|
+
end
|
195
|
+
|
196
|
+
def systemctl_command(*args, process: nil)
|
197
|
+
execute_array =
|
198
|
+
if fetch(:sidekiq_service_unit_user) == :system
|
199
|
+
%i[sudo systemctl]
|
200
|
+
else
|
201
|
+
[:systemctl, '--user']
|
202
|
+
end
|
203
|
+
|
204
|
+
if process
|
205
|
+
execute_array.push(
|
206
|
+
*args, sidekiq_service_unit_name(process: process)
|
207
|
+
).flatten
|
115
208
|
else
|
116
|
-
|
117
|
-
backend.execute :systemctl, "--user", "daemon-reload"
|
209
|
+
execute_array.push(*args, sidekiq_service_unit_name).flatten
|
118
210
|
end
|
211
|
+
backend.execute(*execute_array, raise_on_non_zero_exit: false)
|
119
212
|
end
|
120
213
|
|
121
|
-
def
|
214
|
+
def quiet_sidekiq
|
215
|
+
systemctl_command(:kill, '-s', :TSTP)
|
216
|
+
end
|
217
|
+
|
218
|
+
def switch_user(role, &block)
|
122
219
|
su_user = sidekiq_user
|
123
220
|
if su_user != role.user
|
124
221
|
yield
|
125
222
|
else
|
126
|
-
backend.as su_user
|
127
|
-
yield
|
128
|
-
end
|
223
|
+
backend.as su_user, &block
|
129
224
|
end
|
130
225
|
end
|
131
226
|
|
132
227
|
def sidekiq_user
|
133
228
|
fetch(:sidekiq_user, fetch(:run_as))
|
134
229
|
end
|
230
|
+
|
231
|
+
def sidekiq_config
|
232
|
+
config = fetch(:sidekiq_config)
|
233
|
+
return unless config
|
234
|
+
|
235
|
+
if config_per_process?
|
236
|
+
config = File.join(
|
237
|
+
fetch(:deploy_to), 'shared', 'sidekiq_systemd',
|
238
|
+
sidekiq_systemd_config_name
|
239
|
+
)
|
240
|
+
end
|
241
|
+
"--config #{config}"
|
242
|
+
end
|
243
|
+
|
244
|
+
def sidekiq_concurrency
|
245
|
+
"--concurrency #{fetch(:sidekiq_concurrency)}" if fetch(:sidekiq_concurrency)
|
246
|
+
end
|
247
|
+
|
248
|
+
def sidekiq_processes
|
249
|
+
fetch(:sidekiq_processes, 1)
|
250
|
+
end
|
251
|
+
|
252
|
+
def sidekiq_queues
|
253
|
+
Array(fetch(:sidekiq_queue)).map do |queue|
|
254
|
+
"--queue #{queue}"
|
255
|
+
end.join(' ')
|
256
|
+
end
|
257
|
+
|
258
|
+
def sidekiq_service_file_name
|
259
|
+
"#{fetch(:sidekiq_service_unit_name)}.service"
|
260
|
+
end
|
261
|
+
|
262
|
+
def sidekiq_service_unit_name(process: nil)
|
263
|
+
if process
|
264
|
+
"#{fetch(:sidekiq_service_unit_name)}@#{process}"
|
265
|
+
elsif sidekiq_processes > 1
|
266
|
+
"#{fetch(:sidekiq_service_unit_name)}@{1..#{sidekiq_processes}}"
|
267
|
+
else
|
268
|
+
fetch(:sidekiq_service_unit_name)
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
# process = 1 | sidekiq_systemd_1.yaml
|
273
|
+
# process = nil | sidekiq_systemd_%i.yaml
|
274
|
+
def sidekiq_systemd_config_name(process = nil)
|
275
|
+
file_name = 'sidekiq_systemd_'
|
276
|
+
file_name << (process&.to_s || '%i')
|
277
|
+
"#{file_name}.yaml"
|
278
|
+
end
|
279
|
+
|
280
|
+
def config_per_process?
|
281
|
+
fetch(:sidekiq_config).is_a?(Array)
|
282
|
+
end
|
283
|
+
|
284
|
+
def process_block
|
285
|
+
(1..sidekiq_processes).each do |process|
|
286
|
+
yield(process)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
def duration(start_time)
|
291
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time
|
292
|
+
end
|
135
293
|
end
|