runit-man 1.6.4 → 1.7.0

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.
data/i18n/en.yml CHANGED
@@ -11,6 +11,7 @@ runit:
11
11
  headers:
12
12
  pid: PID
13
13
  name: Name
14
+ uptime: Uptime (s)
14
15
  stat: Status
15
16
  actions: Actions
16
17
  log_file: Log file
data/i18n/ru.yml CHANGED
@@ -11,6 +11,7 @@ runit:
11
11
  headers:
12
12
  pid: PID
13
13
  name: Название
14
+ uptime: "Время исполнения (сек.)"
14
15
  stat: Состояние
15
16
  actions: Действия
16
17
  log_file: Лог
@@ -58,7 +58,7 @@ private
58
58
  cmd = log_command(lpid)
59
59
  return nil if cmd.nil?
60
60
  args = cmd.split(/\s+/).select { |arg| arg !~ /^\-/ }
61
- return nil if args.shift != 'svlogd'
61
+ return nil if args.shift !~ /svlogd/
62
62
  args.shift
63
63
  end
64
64
 
@@ -4,12 +4,14 @@ class ServiceInfo
4
4
  attr_reader :name
5
5
 
6
6
  def initialize(a_name)
7
- @name = a_name
7
+ @name = a_name
8
+ @data = ''
9
+ @files = {}
8
10
  end
9
11
 
10
12
  def to_json(*a)
11
13
  data = {}
12
- [ :name, :stat, :active?, :logged?, :switchable?, :run?, :pid, :log_pid, :log_file_location ].each do |sym|
14
+ [ :name, :stat, :active?, :logged?, :switchable?, :run?, :pid, :log_pid, :log_file_location, :finish?, :down?, :started_at, :uptime ].each do |sym|
13
15
  data[sym] = send(sym)
14
16
  end
15
17
  data.to_json(*a)
@@ -20,7 +22,7 @@ class ServiceInfo
20
22
  end
21
23
 
22
24
  def stat
23
- r = ServiceInfo.data_from_file(File.join(supervise_folder, 'stat'))
25
+ r = data_from_file(File.join(supervise_folder, 'stat'))
24
26
  r ? r : 'inactive'
25
27
  end
26
28
 
@@ -32,8 +34,16 @@ class ServiceInfo
32
34
  File.symlink?(active_service_folder) || File.directory?(inactive_service_folder)
33
35
  end
34
36
 
37
+ def down?
38
+ status_byte == 0
39
+ end
40
+
35
41
  def run?
36
- !!(stat =~ /\brun\b/)
42
+ status_byte == 1
43
+ end
44
+
45
+ def finish?
46
+ status_byte == 2
37
47
  end
38
48
 
39
49
  def up!
@@ -59,11 +69,25 @@ class ServiceInfo
59
69
  end
60
70
 
61
71
  def pid
62
- ServiceInfo.data_from_file(File.join(supervise_folder, 'pid'))
72
+ return nil if down?
73
+ st = raw_status
74
+ st.unpack('xxxxxxxxxxxxV').first
75
+ end
76
+
77
+ def started_at
78
+ st = raw_status
79
+ return nil unless st
80
+ vals = st.unpack('NN')
81
+ Time.at((vals[0] << 32) + vals[1] - 4611686018427387914)
82
+ end
83
+
84
+ def uptime
85
+ return nil if down?
86
+ Time.now - started_at
63
87
  end
64
88
 
65
89
  def log_pid
66
- ServiceInfo.data_from_file(File.join(log_supervise_folder, 'pid'))
90
+ data_from_file(File.join(log_supervise_folder, 'pid'))
67
91
  end
68
92
 
69
93
  def log_file_location
@@ -96,7 +120,7 @@ class ServiceInfo
96
120
  Dir.entries(urls_to_view_folder).select do |name|
97
121
  name =~ /\.url$/ && File.file?(File.join(urls_to_view_folder, name))
98
122
  end.map do |name|
99
- ServiceInfo.data_from_file(File.join(urls_to_view_folder, name))
123
+ data_from_file(File.join(urls_to_view_folder, name))
100
124
  end.select do |url|
101
125
  !url.nil?
102
126
  end
@@ -135,6 +159,27 @@ private
135
159
  File.directory?(supervise_folder)
136
160
  end
137
161
 
162
+ def raw_status
163
+ # status in daemontools supervise format
164
+ # look at runit's sv.c for details
165
+ if @data == ''
166
+ data = data_from_file(File.join(supervise_folder, 'status'))
167
+ @data = !data.nil? && data.length == 20 ? data : nil
168
+ end
169
+ @data
170
+ end
171
+
172
+ def status_byte
173
+ st = raw_status
174
+ return 0 unless st
175
+ st.unpack('xxxxxxxxxxxxxxxxxxxC').first
176
+ end
177
+
178
+ def data_from_file(file_name)
179
+ return @files[file_name] if @files.include?(file_name)
180
+ @files[file_name] = self.class.real_data_from_file(file_name)
181
+ end
182
+
138
183
  class << self
139
184
  def all
140
185
  all_service_names.sort.map do |name|
@@ -153,7 +198,7 @@ private
153
198
  @log_location_cache
154
199
  end
155
200
 
156
- def data_from_file(file_name)
201
+ def real_data_from_file(file_name)
157
202
  return nil unless File.readable?(file_name)
158
203
  data = IO.read(file_name)
159
204
  data.chomp! unless data.nil?
@@ -4,6 +4,7 @@ need_second_row = !service_info.files_to_view.empty? || !service_info.urls_to_vi
4
4
  <tr class="<%= even_or_odd ? 'even' : 'odd' %>">
5
5
  <td<%= need_second_row ? ' rowspan="2"' : '' %>><%= h(service_info.pid) %></td>
6
6
  <th scope="row"><%= h(service_info.name) %></th>
7
+ <td><%= '%5.2d' % service_info.uptime) %></td>
7
8
  <td><%= stat_subst(service_info.stat) %></td>
8
9
  <td>
9
10
  <% if service_info.active? %>
data/views/_services.erb CHANGED
@@ -4,6 +4,7 @@
4
4
  <tr>
5
5
  <th><%= h(t.runit.services.table.headers.pid) %></th>
6
6
  <th><%= h(t.runit.services.table.headers.name) %></th>
7
+ <th><%= h(t.runit.services.table.headers.uptime) %></th>
7
8
  <th><%= h(t.runit.services.table.headers.stat) %></th>
8
9
  <th><%= h(t.runit.services.table.headers.actions) %></th>
9
10
  <th><%= h(t.runit.services.table.headers.log_file) %></th>
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 6
8
- - 4
9
- version: 1.6.4
7
+ - 7
8
+ - 0
9
+ version: 1.7.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Akzhan Abdulin
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-20 00:00:00 +04:00
17
+ date: 2010-05-21 00:00:00 +04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency