capistrano-sidekiq 2.0.0.beta5 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,14 +1,4 @@
1
- namespace :load do
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
- mv_command = "mv #{fetch(:tmp_dir)}/monit.conf #{fetch(:sidekiq_monit_conf_dir)}/#{fetch(:sidekiq_monit_conf_file)}"
36
- sudo_if_needed mv_command
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
- sudo_if_needed "#{fetch(:monit_bin)} reload"
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
- fetch(:sidekiq_processes).times do |idx|
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(idx)}"
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(idx)}"
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
- fetch(:sidekiq_processes).times do |idx|
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(idx)}"
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
- desc 'Start Sidekiq monit-service'
70
- task :start do
71
- on roles(fetch(:sidekiq_roles)) do
72
- fetch(:sidekiq_processes).times do |idx|
73
- sudo_if_needed "#{fetch(:monit_bin)} start #{sidekiq_service_name(idx)}"
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
- def sidekiq_queues
113
- Array(fetch(:sidekiq_queue)).map do |queue|
114
- "--queue #{queue}"
115
- end.join(' ')
116
- end
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
- def sidekiq_require
125
- if fetch(:sidekiq_require)
126
- "--require #{fetch(:sidekiq_require)}"
127
- end
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
- def sidekiq_options_per_process
131
- fetch(:sidekiq_options_per_process) || []
132
- end
86
+ def sidekiq_service_name
87
+ fetch(:sidekiq_service_name, "sidekiq_#{fetch(:application)}_#{fetch(:sidekiq_env)}")
88
+ end
133
89
 
134
- def sudo_if_needed(command)
135
- send(use_sudo? ? :sudo : :execute, command)
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
- def use_sudo?
139
- fetch(:sidekiq_monit_use_sudo)
140
- end
98
+ def use_sudo?
99
+ fetch(:sidekiq_monit_use_sudo)
100
+ end
141
101
 
142
- def upload_sidekiq_template(from, to, role)
143
- template = sidekiq_template(from, role)
144
- upload!(StringIO.new(ERB.new(template).result(binding)), to)
145
- end
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
- def sidekiq_template(name, role)
148
- local_template_directory = fetch(:sidekiq_monit_templates_path)
107
+ def sidekiq_template(name, role)
108
+ local_template_directory = fetch(:sidekiq_monit_templates_path)
149
109
 
150
- search_paths = [
151
- "#{name}-#{role.hostname}-#{fetch(:stage)}.erb",
152
- "#{name}-#{role.hostname}.erb",
153
- "#{name}-#{fetch(:stage)}.erb",
154
- "#{name}.erb"
155
- ].map { |filename| File.join(local_template_directory, filename) }
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
- global_search_path = File.expand_path(
158
- File.join(*%w[.. .. .. generators capistrano sidekiq monit templates], "#{name}.conf.erb"),
159
- __FILE__
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
- search_paths << global_search_path
122
+ search_paths << global_search_path
163
123
 
164
- template_path = search_paths.detect { |path| File.file?(path) }
165
- File.read(template_path)
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
- desc 'Quiet sidekiq (stop fetching new tasks from Redis)'
5
- task :quiet do
6
- on roles fetch(:sidekiq_roles) do |role|
7
- git_plugin.switch_user(role) do
8
- if fetch(:sidekiq_service_unit_user) == :system
9
- execute :sudo, :systemctl, "reload", fetch(:sidekiq_service_unit_name), raise_on_non_zero_exit: false
10
- else
11
- execute :systemctl, "--user", "reload", fetch(:sidekiq_service_unit_name), raise_on_non_zero_exit: false
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 'Stop sidekiq (graceful shutdown within timeout, put unfinished tasks back to Redis)'
18
- task :stop do
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
- if fetch(:sidekiq_service_unit_user) == :system
22
- execute :sudo, :systemctl, "stop", fetch(:sidekiq_service_unit_name)
23
- else
24
- execute :systemctl, "--user", "stop", fetch(:sidekiq_service_unit_name)
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 'Start sidekiq'
31
- task :start do
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
- if fetch(:sidekiq_service_unit_user) == :system
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 fetch(:sidekiq_service_unit_user) == :system
49
- execute :sudo, :systemctl, "enable", fetch(:sidekiq_service_unit_name)
50
- else
51
- execute :systemctl, "--user", "enable", fetch(:sidekiq_service_unit_name)
52
- execute :loginctl, "enable-linger", fetch(:sidekiq_lingering_user) if fetch(:sidekiq_enable_lingering)
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 'UnInstall systemd sidekiq service'
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
- if fetch(:sidekiq_service_unit_user) == :system
63
- execute :sudo, :systemctl, "disable", fetch(:sidekiq_service_unit_name)
64
- else
65
- execute :systemctl, "--user", "disable", fetch(:sidekiq_service_unit_name)
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(fetch(:service_unit_path, fetch_systemd_unit_path), fetch(:sidekiq_service_unit_name))
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
- "/etc/systemd/system/"
124
+ '/etc/systemd/system/'
83
125
  else
84
126
  home_dir = backend.capture :pwd
85
- File.join(home_dir, ".config", "systemd", "user")
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
- File.join(*%w[.. .. .. generators capistrano sidekiq systemd templates sidekiq.service.capistrano.erb]),
93
- __FILE__
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
- backend.execute :mkdir, "-p", systemd_path
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
- backend.upload!(
109
- StringIO.new(ctemplate),
110
- "/tmp/#{fetch :sidekiq_service_unit_name}.service"
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
- if fetch(:sidekiq_service_unit_user) == :system
113
- backend.execute :sudo, :mv, "/tmp/#{fetch :sidekiq_service_unit_name}.service", "#{systemd_path}/#{fetch :sidekiq_service_unit_name}.service"
114
- backend.execute :sudo, :systemctl, "daemon-reload"
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
- backend.execute :mv, "/tmp/#{fetch :sidekiq_service_unit_name}.service", "#{systemd_path}/#{fetch :sidekiq_service_unit_name}.service"
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 switch_user(role)
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 do
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