sv 0.2.1 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|