sv 0.2.1 → 0.2.3
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/dev_bin/sv +4 -0
- data/lib/sv/api.rb +25 -6
- data/lib/sv/job.rb +8 -2
- data/lib/sv/rolling_restart.rb +23 -3
- data/lib/sv/server.rb +2 -0
- data/lib/sv/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dcb2b89e314decf911279e9cd7feb6001c564d9
|
4
|
+
data.tar.gz: c3f84f93c4ce52fc04016f02bed990ecdd43feb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebc2862268835ea7475aba32fb9054de6d0b52ccd9d0e646f40ce52895fdd1620c9a3c2b5b471f9f7951f0f28e5ff6140d0fa3ec81aca6faf384244628486811
|
7
|
+
data.tar.gz: d9271545bdc58cbe294f2217575ea304155045f46e88755929a0c933eb2c47fe7db3a6f18de86d00e6e6b21339ee01d77e127797de39d16a0a05383ef3e9c42c
|
data/dev_bin/sv
ADDED
data/lib/sv/api.rb
CHANGED
@@ -18,6 +18,14 @@ module Sv
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def shutdown
|
21
|
+
call "supervisor.stopAllProcesses", false
|
22
|
+
sleep 2
|
23
|
+
stopping = jobs.select { |j| j.statename == "STOPPING" }
|
24
|
+
stopping.each do |j|
|
25
|
+
puts "killing #{j.group}:#{j.name}"
|
26
|
+
Process.kill("KILL", j.pid)
|
27
|
+
end
|
28
|
+
sleep 1
|
21
29
|
call "supervisor.shutdown"
|
22
30
|
close_connection
|
23
31
|
end
|
@@ -26,9 +34,9 @@ module Sv
|
|
26
34
|
call "supervisor.startProcess", "#{group}:#{name}"
|
27
35
|
end
|
28
36
|
|
29
|
-
def stop_job(group, name)
|
37
|
+
def stop_job(group, name, wait: true)
|
30
38
|
return if job_stopped?(group, name)
|
31
|
-
ok, output = call_safe "supervisor.stopProcess", "#{group}:#{name}"
|
39
|
+
ok, output = call_safe "supervisor.stopProcess", "#{group}:#{name}", wait
|
32
40
|
if not ok
|
33
41
|
msg = "stopping job #{name} failed: #{output.faultString}"
|
34
42
|
raise Error, msg if not output.faultString =~ /\ANOT_RUNNING/
|
@@ -61,12 +69,13 @@ module Sv
|
|
61
69
|
puts "pid #{pid}"
|
62
70
|
jobs = self.jobs
|
63
71
|
name_width = jobs.map { |j| j.name.size }.max || 20
|
64
|
-
template = "%-#{name_width}s %-10s %-7s %-20s\n"
|
65
|
-
printf template, "name", "state", "pid", "uptime"
|
66
|
-
puts "-"*(name_width + 10 + 7 + 20 + 2)
|
72
|
+
template = "%-#{name_width}s %-10s %-7s %-20s %-50s\n"
|
73
|
+
printf template, "name", "state", "pid", "uptime", "dir"
|
74
|
+
puts "-"*(name_width + 10 + 7 + 20 + 50 + 2)
|
67
75
|
jobs.each do |job|
|
68
76
|
logger.debug { require 'pp'; PP.pp job.to_h, out="" ; out }
|
69
|
-
|
77
|
+
dir = (job.statename == "STOPPING" || job.statename == "RUNNING" ) ? job_cwd(job.pid) : "-"
|
78
|
+
printf template, job.name, job.statename, job.pid, uptime(job.start), dir
|
70
79
|
end
|
71
80
|
end
|
72
81
|
|
@@ -87,6 +96,12 @@ module Sv
|
|
87
96
|
jobs = jobs_array.map { |j| OpenStruct.new(j) }
|
88
97
|
end
|
89
98
|
|
99
|
+
def active_groups
|
100
|
+
running_states = ["STOPPING", "RUNNING"]
|
101
|
+
running_jobs = jobs.select { |j| running_states.include? j.statename }
|
102
|
+
running_jobs.map { |j| j.group }.uniq
|
103
|
+
end
|
104
|
+
|
90
105
|
def reread_config
|
91
106
|
call "supervisor.reloadConfig"
|
92
107
|
end
|
@@ -146,5 +161,9 @@ module Sv
|
|
146
161
|
end
|
147
162
|
end
|
148
163
|
|
164
|
+
def job_cwd(pid)
|
165
|
+
File.readlink "/proc/#{pid}/cwd"
|
166
|
+
end
|
167
|
+
|
149
168
|
end
|
150
169
|
end
|
data/lib/sv/job.rb
CHANGED
@@ -51,6 +51,10 @@ module Sv
|
|
51
51
|
set_or_get :stopsignal, args
|
52
52
|
end
|
53
53
|
|
54
|
+
def stopwait(*args)
|
55
|
+
set_or_get :stopwait, args
|
56
|
+
end
|
57
|
+
|
54
58
|
def stopwaitsecs(*args)
|
55
59
|
set_or_get :stopwaitsecs, args
|
56
60
|
end
|
@@ -88,11 +92,12 @@ module Sv
|
|
88
92
|
|
89
93
|
def processes
|
90
94
|
processes = []
|
91
|
-
s = Struct.new(:name, :group)
|
95
|
+
s = Struct.new(:name, :group, :stopwait)
|
92
96
|
numprocs.times do |i|
|
93
97
|
process = s.new
|
94
98
|
process.name = "#{name}_#{i.to_s.rjust(2,"0")}"
|
95
99
|
process.group = group
|
100
|
+
process.stopwait = stopwait
|
96
101
|
processes << process
|
97
102
|
end
|
98
103
|
processes
|
@@ -116,7 +121,8 @@ module Sv
|
|
116
121
|
killasgroup: true,
|
117
122
|
redirect_stderr: true,
|
118
123
|
stdout_logfile: "/dev/null",
|
119
|
-
stderr_logfile: ""
|
124
|
+
stderr_logfile: "",
|
125
|
+
stopwait: true
|
120
126
|
}
|
121
127
|
end
|
122
128
|
|
data/lib/sv/rolling_restart.rb
CHANGED
@@ -34,8 +34,7 @@ module Sv
|
|
34
34
|
#stop older processes with same name
|
35
35
|
old = @old_processes.select { |p| p.name == x.name }
|
36
36
|
old.each do |o|
|
37
|
-
|
38
|
-
@api.stop_job o.group, o.name
|
37
|
+
stop_job o, x.stopwait
|
39
38
|
end
|
40
39
|
|
41
40
|
if old.empty?
|
@@ -48,7 +47,17 @@ module Sv
|
|
48
47
|
end
|
49
48
|
|
50
49
|
def remove_old_groups
|
51
|
-
|
50
|
+
stopped_states = ["STOPPED", "FATAL", "EXITED"]
|
51
|
+
jobs = @api.jobs
|
52
|
+
@old_groups.each do |g|
|
53
|
+
stopped_count = jobs.select { |j| j.group == g && stopped_states.include?(j.statename) }.size
|
54
|
+
all_count = jobs.select { |j| j.group == g }.size
|
55
|
+
if stopped_count != all_count
|
56
|
+
puts "skip remove_group #{g}: #{all_count - stopped_count} processes running"
|
57
|
+
next
|
58
|
+
end
|
59
|
+
@api.remove_group g
|
60
|
+
end
|
52
61
|
end
|
53
62
|
|
54
63
|
def unneeded_processes
|
@@ -82,5 +91,16 @@ module Sv
|
|
82
91
|
load_old_groups
|
83
92
|
end
|
84
93
|
|
94
|
+
private
|
95
|
+
|
96
|
+
def stop_job(job, wait)
|
97
|
+
if wait
|
98
|
+
logger.debug "stopping #{job.group}:#{job.name}"
|
99
|
+
else
|
100
|
+
logger.debug "signaling #{job.group}:#{job.name} to stop"
|
101
|
+
end
|
102
|
+
@api.stop_job job.group, job.name, wait: wait
|
103
|
+
end
|
104
|
+
|
85
105
|
end
|
86
106
|
end
|
data/lib/sv/server.rb
CHANGED
data/lib/sv/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neeraj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- bin/sv
|
55
|
+
- dev_bin/sv
|
55
56
|
- examples/jobs.yml
|
56
57
|
- examples/sv.rb
|
57
58
|
- lib/sv.rb
|
@@ -93,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
94
|
version: '0'
|
94
95
|
requirements: []
|
95
96
|
rubyforge_project:
|
96
|
-
rubygems_version: 2.
|
97
|
+
rubygems_version: 2.6.8
|
97
98
|
signing_key:
|
98
99
|
specification_version: 4
|
99
100
|
summary: A wrapper for supervisord
|