runit-man 2.4.0 → 2.4.1a1
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/README.md +7 -1
- data/README_ru.md +6 -0
- data/lib/runit-man/service_info/base.rb +27 -8
- data/lib/runit-man/service_status.rb +18 -3
- data/lib/runit-man/version.rb +1 -1
- data/public/css/runit-man.css +1 -0
- data/views/_service_info.haml +3 -1
- metadata +33 -36
data/README.md
CHANGED
@@ -38,13 +38,19 @@ This tool can provide additional information or actions through it's Web page.
|
|
38
38
|
### View names and content of files that related to concrete service
|
39
39
|
|
40
40
|
For each known runit service this tool looks for `./runit-man/files-to-view/` folder.
|
41
|
-
Every symlink
|
41
|
+
Every symlink there will be shown as link to view target file content.
|
42
42
|
|
43
43
|
### Show links that related to concrete service
|
44
44
|
|
45
45
|
For each known runit service this tool looks for `./runit-man/urls-to-view/` folder.
|
46
46
|
Every file ended with .url will be shown as link to view target location (location should be written as content of this file).
|
47
47
|
|
48
|
+
### Indicate services with any of watched files are modified since service startup
|
49
|
+
|
50
|
+
For each known runit service this tool looks for `./runit-man/files-to-watch/` folder.
|
51
|
+
Symlink targets there will be tested for its mtime to be less than service start time.
|
52
|
+
Service will be indicated as dangerous (as red color) to restart if any watched file is modified since service startup.
|
53
|
+
|
48
54
|
### Show buttons that send signals to concrete service
|
49
55
|
|
50
56
|
For each known runit service this tool looks for `./runit-man/allowed-signals/` folder.
|
data/README_ru.md
CHANGED
@@ -39,6 +39,12 @@ runit-man -p 14500 -r
|
|
39
39
|
Для каждого известного сервиса runit эта утилита просматривает каталог `./runit-man/files-to-view/`.
|
40
40
|
Каждый симлинк в этом каталоге будет показан как ссылка на просмотр содержимого целевого файла.
|
41
41
|
|
42
|
+
### Индикация сервисов, чьи файлы для наблюдения изменились после старта
|
43
|
+
|
44
|
+
Для каждого известного сервиса runit эта утилита просматривает каталог `./runit-man/files-to-watch/`.
|
45
|
+
Целевые файлы симлинков в этом каталоге будут проверяться на время последней модификации файла.
|
46
|
+
Сервис будет помечаться как опасный (красным цветом) в плане рестарта, если любой наблюдаемый файл изменился после старта сервиса.
|
47
|
+
|
42
48
|
### Показ ссылок, относящихся к конкретному сервису
|
43
49
|
|
44
50
|
Для каждого известного сервиса runit эта утилита просматривает каталог `./runit-man/urls-to-view/`.
|
@@ -18,7 +18,7 @@ class ServiceInfo::Base
|
|
18
18
|
data = {}
|
19
19
|
[
|
20
20
|
:name, :stat, :active?, :logged?, :switchable?,
|
21
|
-
:log_file_location, :log_pid
|
21
|
+
:log_file_location, :log_pid, :restart_dangerous?
|
22
22
|
].each do |sym|
|
23
23
|
data[sym] = send(sym)
|
24
24
|
end
|
@@ -109,6 +109,13 @@ class ServiceInfo::Base
|
|
109
109
|
[]
|
110
110
|
end
|
111
111
|
|
112
|
+
def restart_dangerous?
|
113
|
+
! ! files_to_watch.detect do |file|
|
114
|
+
mtime = File.stat(file).mtime
|
115
|
+
mtime > @status.started_at
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
112
119
|
def send_signal(signal)
|
113
120
|
return unless supervise?
|
114
121
|
|
@@ -117,19 +124,27 @@ class ServiceInfo::Base
|
|
117
124
|
end
|
118
125
|
end
|
119
126
|
|
120
|
-
def
|
121
|
-
return [] unless File.directory?(
|
127
|
+
def symlinks_to_file_paths(dir_path)
|
128
|
+
return [] unless File.directory?(dir_path)
|
122
129
|
|
123
|
-
Dir.entries(
|
124
|
-
File.symlink?(File.join(
|
130
|
+
Dir.entries(dir_path).select do |name|
|
131
|
+
File.symlink?(File.join(dir_path, name))
|
125
132
|
end.map do |name|
|
126
133
|
File.expand_path(
|
127
|
-
File.readlink(File.join(
|
128
|
-
|
134
|
+
File.readlink(File.join(dir_path, name)),
|
135
|
+
dir_path
|
129
136
|
)
|
130
137
|
end.select do |file_path|
|
131
138
|
File.file?(file_path)
|
132
|
-
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def files_to_view
|
143
|
+
symlinks_to_file_paths(files_to_view_folder)
|
144
|
+
end
|
145
|
+
|
146
|
+
def files_to_watch
|
147
|
+
symlinks_to_file_paths(files_to_watch_folder)
|
133
148
|
end
|
134
149
|
|
135
150
|
def urls_to_view
|
@@ -165,6 +180,10 @@ protected
|
|
165
180
|
File.join(active_service_folder, 'runit-man', 'files-to-view')
|
166
181
|
end
|
167
182
|
|
183
|
+
def files_to_watch_folder
|
184
|
+
File.join(active_service_folder, 'runit-man', 'files-to-watch')
|
185
|
+
end
|
186
|
+
|
168
187
|
def urls_to_view_folder
|
169
188
|
File.join(active_service_folder, 'runit-man', 'urls-to-view')
|
170
189
|
end
|
@@ -1,43 +1,58 @@
|
|
1
|
+
# Represents service status in daemontools supervise format.
|
2
|
+
# @ note see runit's sv.c source code for details.
|
1
3
|
class ServiceStatus
|
4
|
+
# Size of status data in bytes
|
2
5
|
STATUS_SIZE = 20
|
3
|
-
#
|
6
|
+
# Service is down.
|
4
7
|
S_DOWN = 0
|
8
|
+
# Service is running.
|
5
9
|
S_RUN = 1
|
10
|
+
# Service is finishing.
|
6
11
|
S_FINISH = 2
|
7
12
|
|
13
|
+
# Initializes serice status by binary data.
|
14
|
+
# @param [String] data Binary data of service status in daemontools supervise format.
|
8
15
|
def initialize(data)
|
9
|
-
# status in daemontools supervise format
|
10
|
-
# look at runit's sv.c for details
|
11
16
|
data = (!data.nil? && data.length == STATUS_SIZE) ? data : nil
|
12
17
|
|
13
18
|
@raw = data.nil? ? nil : data.unpack('NNxxxxVxa1CC')
|
14
19
|
end
|
15
20
|
|
21
|
+
# Is service inactive?
|
16
22
|
def inactive?
|
17
23
|
@raw.nil?
|
18
24
|
end
|
19
25
|
|
26
|
+
# Is service down?
|
20
27
|
def down?
|
21
28
|
status_byte == S_DOWN
|
22
29
|
end
|
23
30
|
|
31
|
+
# Is service running?
|
24
32
|
def run?
|
25
33
|
status_byte == S_RUN
|
26
34
|
end
|
27
35
|
|
36
|
+
# Is service finishing?
|
28
37
|
def finish?
|
29
38
|
status_byte == S_FINISH
|
30
39
|
end
|
31
40
|
|
41
|
+
# Gets service process id.
|
42
|
+
# @return [Fixnum] Process id.
|
32
43
|
def pid
|
33
44
|
@pid ||= down? ? nil : @raw[2]
|
34
45
|
end
|
35
46
|
|
47
|
+
# Gets service start time.
|
48
|
+
# @return [Time] Service start time.
|
36
49
|
def started_at
|
37
50
|
# from TAI to Unix
|
38
51
|
@started_at ||= @raw ? Time.at((@raw[0] << 32) + @raw[1] - 4611686018427387914) : nil
|
39
52
|
end
|
40
53
|
|
54
|
+
# Gets service uptime in seconds.
|
55
|
+
# @return [Float] Service uptime in seconds if running; otherwise nil.
|
41
56
|
def uptime
|
42
57
|
@uptime ||= down? ? nil : Time.now - started_at
|
43
58
|
end
|
data/lib/runit-man/version.rb
CHANGED
data/public/css/runit-man.css
CHANGED
data/views/_service_info.haml
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
- need_second_row = !service_info.files_to_view.empty? || !service_info.urls_to_view.empty?
|
2
2
|
%tr{:class=> even_or_odd ? 'even' : 'odd'}
|
3
3
|
%td{:rowspan=> need_second_row ? 2 : 1}= h(service_info.pid)
|
4
|
-
%th{:scope=>"row"}
|
4
|
+
%th{:scope=>"row"}
|
5
|
+
%span{:class=>service_info.restart_dangerous? ? "danger" : "ok"}
|
6
|
+
= h(service_info.name)
|
5
7
|
%td= service_info.started_at ? service_info.started_at.utc : ''
|
6
8
|
%td= service_info.uptime ? ('%.2f' % service_info.uptime) : ''
|
7
9
|
%td= stat_subst(service_info.stat)
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runit-man
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
5
|
-
prerelease:
|
4
|
+
version: 2.4.1a1
|
5
|
+
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Akzhan Abdulin
|
@@ -13,7 +13,7 @@ date: 2012-04-12 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yajl-ruby
|
16
|
-
requirement: &
|
16
|
+
requirement: &2160877420 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2160877420
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: haml
|
27
|
-
requirement: &
|
27
|
+
requirement: &2160876900 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2160876900
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sinatra
|
38
|
-
requirement: &
|
38
|
+
requirement: &2160876320 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '1.3'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2160876320
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sinatra-content-for2
|
49
|
-
requirement: &
|
49
|
+
requirement: &2160875660 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.2.4
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2160875660
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: i18n
|
60
|
-
requirement: &
|
60
|
+
requirement: &2160875100 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0.5'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2160875100
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: file-tail
|
71
|
-
requirement: &
|
71
|
+
requirement: &2160874360 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.0.7
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2160874360
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rake
|
82
|
-
requirement: &
|
82
|
+
requirement: &2160872720 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -90,10 +90,10 @@ dependencies:
|
|
90
90
|
version: 0.9.0
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
|
-
version_requirements: *
|
93
|
+
version_requirements: *2160872720
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: rspec-core
|
96
|
-
requirement: &
|
96
|
+
requirement: &2160872000 !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
99
|
- - ! '>='
|
@@ -101,10 +101,10 @@ dependencies:
|
|
101
101
|
version: '0'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
|
-
version_requirements: *
|
104
|
+
version_requirements: *2160872000
|
105
105
|
- !ruby/object:Gem::Dependency
|
106
106
|
name: rspec-expectations
|
107
|
-
requirement: &
|
107
|
+
requirement: &2160871240 !ruby/object:Gem::Requirement
|
108
108
|
none: false
|
109
109
|
requirements:
|
110
110
|
- - ! '>='
|
@@ -112,10 +112,10 @@ dependencies:
|
|
112
112
|
version: '0'
|
113
113
|
type: :development
|
114
114
|
prerelease: false
|
115
|
-
version_requirements: *
|
115
|
+
version_requirements: *2160871240
|
116
116
|
- !ruby/object:Gem::Dependency
|
117
117
|
name: rr
|
118
|
-
requirement: &
|
118
|
+
requirement: &2160870740 !ruby/object:Gem::Requirement
|
119
119
|
none: false
|
120
120
|
requirements:
|
121
121
|
- - ! '>='
|
@@ -123,10 +123,10 @@ dependencies:
|
|
123
123
|
version: '0'
|
124
124
|
type: :development
|
125
125
|
prerelease: false
|
126
|
-
version_requirements: *
|
126
|
+
version_requirements: *2160870740
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: rack-test
|
129
|
-
requirement: &
|
129
|
+
requirement: &2160870100 !ruby/object:Gem::Requirement
|
130
130
|
none: false
|
131
131
|
requirements:
|
132
132
|
- - ! '>='
|
@@ -134,10 +134,10 @@ dependencies:
|
|
134
134
|
version: '0'
|
135
135
|
type: :development
|
136
136
|
prerelease: false
|
137
|
-
version_requirements: *
|
137
|
+
version_requirements: *2160870100
|
138
138
|
- !ruby/object:Gem::Dependency
|
139
139
|
name: bundler
|
140
|
-
requirement: &
|
140
|
+
requirement: &2160869460 !ruby/object:Gem::Requirement
|
141
141
|
none: false
|
142
142
|
requirements:
|
143
143
|
- - ~>
|
@@ -148,10 +148,10 @@ dependencies:
|
|
148
148
|
version: 1.0.10
|
149
149
|
type: :development
|
150
150
|
prerelease: false
|
151
|
-
version_requirements: *
|
151
|
+
version_requirements: *2160869460
|
152
152
|
- !ruby/object:Gem::Dependency
|
153
153
|
name: yard
|
154
|
-
requirement: &
|
154
|
+
requirement: &2160868120 !ruby/object:Gem::Requirement
|
155
155
|
none: false
|
156
156
|
requirements:
|
157
157
|
- - ~>
|
@@ -159,10 +159,10 @@ dependencies:
|
|
159
159
|
version: 0.7.5
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
|
-
version_requirements: *
|
162
|
+
version_requirements: *2160868120
|
163
163
|
- !ruby/object:Gem::Dependency
|
164
164
|
name: redcarpet
|
165
|
-
requirement: &
|
165
|
+
requirement: &2160866780 !ruby/object:Gem::Requirement
|
166
166
|
none: false
|
167
167
|
requirements:
|
168
168
|
- - ~>
|
@@ -170,7 +170,7 @@ dependencies:
|
|
170
170
|
version: 1.17.2
|
171
171
|
type: :development
|
172
172
|
prerelease: false
|
173
|
-
version_requirements: *
|
173
|
+
version_requirements: *2160866780
|
174
174
|
description: ! 'Simple runit (http://smarden.org/runit/) web management tool with
|
175
175
|
i18n.
|
176
176
|
|
@@ -265,16 +265,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
265
265
|
version: '0'
|
266
266
|
segments:
|
267
267
|
- 0
|
268
|
-
hash:
|
268
|
+
hash: 706955117803235190
|
269
269
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
270
270
|
none: false
|
271
271
|
requirements:
|
272
|
-
- - ! '
|
272
|
+
- - ! '>'
|
273
273
|
- !ruby/object:Gem::Version
|
274
|
-
version:
|
275
|
-
segments:
|
276
|
-
- 0
|
277
|
-
hash: -2528648994926986438
|
274
|
+
version: 1.3.1
|
278
275
|
requirements:
|
279
276
|
- none
|
280
277
|
rubyforge_project:
|