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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a91c30e6b02d359c7ce54a75001f0c47126818e0
4
- data.tar.gz: dbb3c98d6847f33b4dc073c2877d41f81f632b3c
3
+ metadata.gz: 9dcb2b89e314decf911279e9cd7feb6001c564d9
4
+ data.tar.gz: c3f84f93c4ce52fc04016f02bed990ecdd43feb0
5
5
  SHA512:
6
- metadata.gz: 475256d6937be2adbda674267a57fee9d6286b8273b48ac1007dd98065cc5f1bde8a907d20ad12d3b65d449f1c5934230e41d224319847ab6cdd38c905515722
7
- data.tar.gz: 4f38b49b5a02d3c84896fd52a4e3b761f68047d66868cf6e2cfec8fd93a477fc5e7cd8eefd6399ab9cdccbe423a7ec2a053054316f00b0add82f8e922b2f529c
6
+ metadata.gz: ebc2862268835ea7475aba32fb9054de6d0b52ccd9d0e646f40ce52895fdd1620c9a3c2b5b471f9f7951f0f28e5ff6140d0fa3ec81aca6faf384244628486811
7
+ data.tar.gz: d9271545bdc58cbe294f2217575ea304155045f46e88755929a0c933eb2c47fe7db3a6f18de86d00e6e6b21339ee01d77e127797de39d16a0a05383ef3e9c42c
data/dev_bin/sv ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
3
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
4
+ load __dir__ + '/../bin/sv'
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
- printf template, job.name, job.statename, job.pid, uptime(job.start)
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
 
@@ -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
- logger.debug "stopping #{o.group}:#{o.name}"
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
- @old_groups.each { |g| @api.remove_group g }
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
@@ -81,6 +81,8 @@ module Sv
81
81
  def status
82
82
  if server_status.running?
83
83
  api.print_status
84
+ puts "-"* 20
85
+ puts "active_groups: #{api.active_groups.size}"
84
86
  else
85
87
  puts "Stopped"
86
88
  end
data/lib/sv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sv
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.3"
3
3
  end
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.1
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: 2015-08-24 00:00:00.000000000 Z
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.4.5.1
97
+ rubygems_version: 2.6.8
97
98
  signing_key:
98
99
  specification_version: 4
99
100
  summary: A wrapper for supervisord