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 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