Sha256: a6bf6338f7d2a8b42f47de1c85c2bd5f362a6f6839789db40a9cbb40130d577e
Contents?: true
Size: 1.38 KB
Versions: 3
Compression:
Stored size: 1.38 KB
Contents
class ServiceStatus STATUS_SIZE = 20 # state S_DOWN = 0 S_RUN = 1 S_FINISH = 2 def initialize(data) # status in daemontools supervise format # look at runit's sv.c for details data = (!data.nil? && data.length == STATUS_SIZE) ? data : nil @raw = data.nil? ? nil : data.unpack('NNxxxxVxa1CC') end def inactive? @raw.nil? end def down? status_byte == S_DOWN end def run? status_byte == S_RUN end def finish? status_byte == S_FINISH end def pid @pid ||= down? ? nil : @raw[2] end def started_at # from TAI to Unix @started_at ||= @raw ? Time.at((@raw[0] << 32) + @raw[1] - 4611686018427387914) : nil end def uptime @uptime ||= down? ? nil : Time.now - started_at end def want_up? @raw && !pid && @raw[3] == 'u' end def want_down? pid && @raw[3] == 'd' end def got_term? pid && @raw[4] != 0 end def to_s return 'inactive' if inactive? # try to mimics stat behaviour to minimize readings result = status_string result += ', got TERM' if got_term? result += ', want down' if want_down? result += ', want up' if want_up? result end private def status_byte @status_byte ||= @raw ? @raw[5] : 0 end def status_string case status_byte when S_DOWN; 'down' when S_RUN; 'run' when S_FINISH; 'finish' end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
runit-man-2.4.0 | lib/runit-man/service_status.rb |
runit-man-2.4.0a2 | lib/runit-man/service_status.rb |
runit-man-2.4.0a1 | lib/runit-man/service_status.rb |