class Sv::Job
Attributes
name[R]
namespace[W]
working_dir[W]
Public Class Methods
new(name)
click to toggle source
# File lib/sv/job.rb, line 8 def initialize(name) set :name, name end
Public Instance Methods
autorestart(*args)
click to toggle source
# File lib/sv/job.rb, line 38 def autorestart(*args) set_or_get :autorestart, args end
command(*args)
click to toggle source
# File lib/sv/job.rb, line 20 def command(*args) set_or_get :command, args end
env(*args)
click to toggle source
# File lib/sv/job.rb, line 28 def env(*args) set_or_get :env, args end
group()
click to toggle source
# File lib/sv/job.rb, line 16 def group @namespace ? "#{name}.#{@namespace}" : name end
killasgroup(*args)
click to toggle source
# File lib/sv/job.rb, line 66 def killasgroup(*args) set_or_get :killasgroup, args end
numprocs(*args)
click to toggle source
# File lib/sv/job.rb, line 32 def numprocs(*args) set_or_get :numprocs, args do |v| v.to_i end end
processes()
click to toggle source
# File lib/sv/job.rb, line 93 def processes processes = [] s = Struct.new(:name, :group, :stopwait_on_rr) numprocs.times do |i| process = s.new process.name = "#{name}_#{i.to_s.rjust(2,"0")}" process.group = group process.stopwait_on_rr = stopwait_on_rr processes << process end processes end
render()
click to toggle source
# File lib/sv/job.rb, line 84 def render return if attributes.values.any? { |v| v.nil? } return if attributes[:numprocs] < 1 File.open(template) do |f| erb = ERB.new(f.read, nil, '<>') erb.result(binding) end end
startretries(*args)
click to toggle source
# File lib/sv/job.rb, line 46 def startretries(*args) set_or_get :startretries, args end
startsecs(*args)
click to toggle source
# File lib/sv/job.rb, line 42 def startsecs(*args) set_or_get :startsecs, args end
stderr_logfile(*args)
click to toggle source
# File lib/sv/job.rb, line 74 def stderr_logfile(*args) set_or_get :stderr_logfile, args end
stdout_logfile(*args)
click to toggle source
# File lib/sv/job.rb, line 70 def stdout_logfile(*args) set_or_get :stdout_logfile, args end
stopasgroup(*args)
click to toggle source
# File lib/sv/job.rb, line 62 def stopasgroup(*args) set_or_get :stopasgroup, args end
stopsignal(*args)
click to toggle source
# File lib/sv/job.rb, line 50 def stopsignal(*args) set_or_get :stopsignal, args end
stopwait_on_rr(*args)
click to toggle source
# File lib/sv/job.rb, line 54 def stopwait_on_rr(*args) set_or_get :stopwait_on_rr, args end
stopwaitsecs(*args)
click to toggle source
# File lib/sv/job.rb, line 58 def stopwaitsecs(*args) set_or_get :stopwaitsecs, args end
update(attrs)
click to toggle source
# File lib/sv/job.rb, line 78 def update(attrs) attrs.each do |key ,value| set key, value end end
working_dir(*args)
click to toggle source
# File lib/sv/job.rb, line 24 def working_dir(*args) set_or_get :working_dir, args end
Private Instance Methods
attributes()
click to toggle source
# File lib/sv/job.rb, line 108 def attributes @attributes ||= { name: nil, command: nil, working_dir: nil, env: "", numprocs: 0, autorestart: true, startsecs: 1, startretries: 3, stopsignal: :TERM, stopwaitsecs: 10, stopasgroup: false, killasgroup: true, redirect_stderr: true, stdout_logfile: "/dev/null", stderr_logfile: "", stopwait_on_rr: true } end
binding()
click to toggle source
# File lib/sv/job.rb, line 155 def binding attrs = OpenStruct.new(attributes) attrs.group = group transform_paths attrs transform_command attrs attrs.instance_eval { binding } end
set(key, value)
click to toggle source
# File lib/sv/job.rb, line 142 def set(key, value) key = key.to_sym if attributes.key? key attributes.store key, value else raise "no such key #{key}" end end
set_or_get(key, args) { |value| ... }
click to toggle source
# File lib/sv/job.rb, line 129 def set_or_get(key, args) key = key.to_sym if args.length == 0 return attributes.fetch key else value = args.first if block_given? value = yield value end set key, value end end
template()
click to toggle source
# File lib/sv/job.rb, line 151 def template @template ||= Pathname.new("#{__dir__}/templates/job.erb") end
transform_command(attrs)
click to toggle source
# File lib/sv/job.rb, line 177 def transform_command(attrs) command = attrs.command.strip return if not command =~ /\A\.\// command.gsub! /\A\.\//, "#{attrs.working_dir}/" attrs.command = command end
transform_paths(attrs)
click to toggle source
transform relative paths to absolute paths for stdout_logfile
and stderr_logfile
only while rendering
# File lib/sv/job.rb, line 167 def transform_paths(attrs) [:stdout_logfile, :stderr_logfile].each do |key| value = attrs.send key path = Pathname.new(value) next if value.empty? || path.absolute? new_value = "#{attrs.working_dir}/#{path}" attrs.send "#{key}=".to_sym, new_value end end