runit-man 2.3.8 → 2.3.9
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/CHANGELOG.markdown +5 -0
- data/Gemfile.lock +19 -17
- data/README.markdown +4 -0
- data/README_ru.markdown +4 -0
- data/i18n/en.yml +1 -0
- data/i18n/ru.yml +1 -0
- data/lib/runit-man/app.rb +31 -12
- data/lib/runit-man/config.ru +2 -1
- data/lib/runit-man/helpers.rb +9 -0
- data/lib/runit-man/runner.rb +2 -0
- data/lib/runit-man/version.rb +1 -1
- data/runit-man-screenshot.gif +0 -0
- data/sv/run.erb +1 -1
- data/views/_service_info.haml +14 -11
- metadata +29 -28
data/CHANGELOG.markdown
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## Changes
|
2
2
|
|
3
|
+
### Version 2.3.8
|
4
|
+
|
5
|
+
* Minor update of handling logger log directories (we should remove last character from log directory name if it's equal to ':').
|
6
|
+
* Enabling of using 'bundle exec rake ...' command.
|
7
|
+
|
3
8
|
### Version 2.3.7
|
4
9
|
|
5
10
|
* '--rackup' option now takes in care all specified options (earlier it takes in care only preceding options).
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
runit-man (2.3.
|
4
|
+
runit-man (2.3.9)
|
5
5
|
file-tail (>= 1.0.5)
|
6
6
|
haml (>= 3.0)
|
7
7
|
i18n (>= 0.5.0)
|
@@ -12,21 +12,22 @@ PATH
|
|
12
12
|
GEM
|
13
13
|
remote: http://rubygems.org/
|
14
14
|
specs:
|
15
|
-
diff-lcs (1.1.
|
16
|
-
file-tail (1.0.
|
17
|
-
spruz (
|
15
|
+
diff-lcs (1.1.3)
|
16
|
+
file-tail (1.0.6)
|
17
|
+
spruz (~> 0.2)
|
18
18
|
haml (3.1.2)
|
19
19
|
i18n (0.6.0)
|
20
|
-
kgio (2.
|
21
|
-
rack (1.3.
|
22
|
-
rack-test (0.6.
|
20
|
+
kgio (2.6.0)
|
21
|
+
rack (1.3.2)
|
22
|
+
rack-test (0.6.1)
|
23
23
|
rack (>= 1.0)
|
24
|
-
rainbows (3.
|
25
|
-
kgio (~> 2.
|
24
|
+
rainbows (4.3.1)
|
25
|
+
kgio (~> 2.5)
|
26
26
|
rack (~> 1.1)
|
27
|
-
unicorn (~>
|
28
|
-
|
29
|
-
|
27
|
+
unicorn (~> 4.1)
|
28
|
+
raindrops (0.7.0)
|
29
|
+
rake (0.9.2)
|
30
|
+
rr (1.0.4)
|
30
31
|
rspec-core (2.6.4)
|
31
32
|
rspec-expectations (2.6.0)
|
32
33
|
diff-lcs (~> 1.1.2)
|
@@ -36,12 +37,13 @@ GEM
|
|
36
37
|
tilt (>= 1.2.2, < 2.0)
|
37
38
|
sinatra-content-for2 (0.2.4)
|
38
39
|
sinatra
|
39
|
-
spruz (0.2.
|
40
|
-
tilt (1.3.
|
41
|
-
unicorn (
|
42
|
-
kgio (~> 2.
|
40
|
+
spruz (0.2.13)
|
41
|
+
tilt (1.3.3)
|
42
|
+
unicorn (4.1.1)
|
43
|
+
kgio (~> 2.4)
|
43
44
|
rack
|
44
|
-
|
45
|
+
raindrops (~> 0.6)
|
46
|
+
yajl-ruby (0.8.3)
|
45
47
|
|
46
48
|
PLATFORMS
|
47
49
|
ruby
|
data/README.markdown
CHANGED
@@ -4,6 +4,10 @@ Simple [runit](http://smarden.org/runit/ "runit home page") web management tool
|
|
4
4
|
|
5
5
|
Server will run by **runit-man** script. Take a note that **runit-man** must have privileges like **runsvdir** process ones.
|
6
6
|
|
7
|
+
## Screenshot
|
8
|
+
|
9
|
+

|
10
|
+
|
7
11
|
## Installation
|
8
12
|
|
9
13
|
Usually You should install both **runit-man** and **thin** gems to run this tool fine.
|
data/README_ru.markdown
CHANGED
@@ -4,6 +4,10 @@
|
|
4
4
|
|
5
5
|
Сервер запускается скриптом **runit-man**. Примите во внимание, что **runit-man** обязан иметь привилегии, аналогичные привилегиям процесса **runsvdir**.
|
6
6
|
|
7
|
+
## Скриншот
|
8
|
+
|
9
|
+

|
10
|
+
|
7
11
|
## Инсталляция
|
8
12
|
|
9
13
|
Обычно вам нужно поставить гемы **runit-man** и **thin** совместно, чтобы эта утилита работала эффективно.
|
data/i18n/en.yml
CHANGED
data/i18n/ru.yml
CHANGED
data/lib/runit-man/app.rb
CHANGED
@@ -73,6 +73,11 @@ class RunitMan < Sinatra::Base
|
|
73
73
|
|
74
74
|
helpers do
|
75
75
|
include Helpers
|
76
|
+
|
77
|
+
def readonly?
|
78
|
+
@read_write_mode == :readonly
|
79
|
+
end
|
80
|
+
|
76
81
|
end
|
77
82
|
|
78
83
|
def self.i18n_location
|
@@ -98,6 +103,7 @@ class RunitMan < Sinatra::Base
|
|
98
103
|
end
|
99
104
|
|
100
105
|
before do
|
106
|
+
@read_write_mode = RunitMan.read_write_mode
|
101
107
|
@scripts = []
|
102
108
|
base_content_type = CONTENT_TYPES.keys.detect do |t|
|
103
109
|
request.env['REQUEST_URI'] =~ /\.#{Regexp.escape(t.to_s)}$/
|
@@ -248,25 +254,36 @@ class RunitMan < Sinatra::Base
|
|
248
254
|
|
249
255
|
def log_action(name, text)
|
250
256
|
env = request.env
|
251
|
-
addr
|
252
|
-
|
253
|
-
|
257
|
+
log "#{addr} - - [#{Time.now}] \"Do #{text} on #{name}\""
|
258
|
+
end
|
259
|
+
|
260
|
+
def log_denied_action(name, text)
|
261
|
+
env = request.env
|
262
|
+
log "#{addr} - - [#{Time.now}] \"Receive #{text} for #{name}. Denied.\""
|
254
263
|
end
|
255
264
|
|
256
265
|
post '/:name/signal/:signal' do |name, signal|
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
266
|
+
unless readonly?
|
267
|
+
service = ServiceInfo[name]
|
268
|
+
return not_found if service.nil?
|
269
|
+
service.send_signal(signal)
|
270
|
+
log_action(name, "send signal \"#{signal}\"")
|
271
|
+
else
|
272
|
+
log_denied_action(name, "signal \"#{signal}\"")
|
273
|
+
end
|
261
274
|
''
|
262
275
|
end
|
263
276
|
|
264
277
|
post '/:name/:action' do |name, action|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
278
|
+
unless readonly?
|
279
|
+
service = ServiceInfo[name]
|
280
|
+
action = "#{action}!".to_sym
|
281
|
+
return not_found if service.nil? || !service.respond_to?(action)
|
282
|
+
service.send(action)
|
283
|
+
log_action(name, action)
|
284
|
+
else
|
285
|
+
log_denied_action(name, action)
|
286
|
+
end
|
270
287
|
''
|
271
288
|
end
|
272
289
|
|
@@ -277,6 +294,7 @@ class RunitMan < Sinatra::Base
|
|
277
294
|
ENV['RUNIT_LOGGER'] = RunitMan.runit_logger
|
278
295
|
ENV['RUNIT_MAN_VIEW_FILES'] = RunitMan.files_to_view.join(',')
|
279
296
|
ENV['RUNIT_MAN_CREDENTIALS'] = RunitMan.allowed_users.keys.map { |user| "#{user}:#{RunitMan.allowed_users[user]}" }.join(',')
|
297
|
+
ENV['RUNIT_MAN_READWRITE_MODE'] = RunitMan.read_write_mode.to_s
|
280
298
|
|
281
299
|
Dir.chdir(File.dirname(__FILE__))
|
282
300
|
exec(command)
|
@@ -338,6 +356,7 @@ class RunitMan < Sinatra::Base
|
|
338
356
|
logger = RunitMan.runit_logger
|
339
357
|
auth = RunitMan.allowed_users
|
340
358
|
rackup_command_line = RunitMan.rackup_command_line
|
359
|
+
read_write_mode = RunitMan.read_write_mode.to_s
|
341
360
|
File.open(script_name, 'w') do |script_source|
|
342
361
|
script_source.print ERB.new(IO.read(template_name)).result(binding())
|
343
362
|
end
|
data/lib/runit-man/config.ru
CHANGED
@@ -4,7 +4,8 @@ require 'runit-man/app'
|
|
4
4
|
|
5
5
|
RunitMan.set :active_services_directory, ENV['RUNIT_ACTIVE_SERVICES_DIR'] || RunitMan::DEFAULT_ACTIVE_SERVICES_DIR
|
6
6
|
RunitMan.set :all_services_directory, ENV['RUNIT_ALL_SERVICES_DIR'] || RunitMan::DEFAULT_ALL_SERVICES_DIR
|
7
|
-
RunitMan.set :runit_logger,
|
7
|
+
RunitMan.set :runit_logger, ENV['RUNIT_LOGGER'] || RunitMan::DEFAULT_LOGGER
|
8
|
+
RunitMan.set :read_write_mode, (ENV['RUNIT_READWRITE_MODE'] || 'rw').to_sym
|
8
9
|
|
9
10
|
if ENV['RUNIT_MAN_VIEW_FILES']
|
10
11
|
ENV['RUNIT_MAN_VIEW_FILES'].split(/\s*\,\s*/).each do |floc|
|
data/lib/runit-man/helpers.rb
CHANGED
@@ -12,6 +12,15 @@ module Helpers
|
|
12
12
|
|
13
13
|
attr_accessor :even_or_odd_state
|
14
14
|
|
15
|
+
def addr
|
16
|
+
env.include?('X_REAL_IP') ? env['X_REAL_IP'] : env['REMOTE_ADDR']
|
17
|
+
end
|
18
|
+
|
19
|
+
def log(s)
|
20
|
+
$stdout.puts s
|
21
|
+
$stdout.flush
|
22
|
+
end
|
23
|
+
|
15
24
|
def host_name
|
16
25
|
Utils.host_name
|
17
26
|
end
|
data/lib/runit-man/runner.rb
CHANGED
@@ -5,6 +5,7 @@ RunitMan.set :active_services_directory, RunitMan::DEFAULT_ACTIVE_SERVICES_DIR
|
|
5
5
|
RunitMan.set :all_services_directory, RunitMan::DEFAULT_ALL_SERVICES_DIR
|
6
6
|
RunitMan.set :runit_logger, RunitMan::DEFAULT_LOGGER
|
7
7
|
RunitMan.set :rackup_command_line, false
|
8
|
+
RunitMan.set :read_write_mode, :readwrite
|
8
9
|
|
9
10
|
OptionParser.new { |op|
|
10
11
|
op.banner = 'Usage: runit-man <options>'
|
@@ -13,6 +14,7 @@ OptionParser.new { |op|
|
|
13
14
|
op.on('-s server') { |val| RunitMan.set :server, val }
|
14
15
|
op.on('-p port') { |val| RunitMan.set :port, val.to_i }
|
15
16
|
op.on('-b addr') { |val| RunitMan.set :bind, val } if RunitMan.respond_to?(:bind)
|
17
|
+
op.on('-m mode (rw by default)') { |val| RunitMan.set(:read_write_mode, :readonly) if val =~ /^read\-only|readonly|ro$/ }
|
16
18
|
op.separator 'runit options:'
|
17
19
|
op.on('-a active_services_directory (/etc/service by default)') { |val| RunitMan.set :active_services_directory, val }
|
18
20
|
op.on('-f all_services_directory (/etc/sv by default)') { |val| RunitMan.set :all_services_directory, val }
|
data/lib/runit-man/version.rb
CHANGED
Binary file
|
data/sv/run.erb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
exec 2>&1
|
3
|
-
exec runit-man
|
3
|
+
exec runit-man -m <%= read_write_mode.to_s %><% if server.kind_of?(String) %> -s "<%= server %>"<% end %><% if bind %> -b <%= bind %><% end %> -p <%= port %> -a "<%= active_services_directory %>" -f "<%= all_services_directory %>"<% files_to_view.each do |f| %> -v "<%= f %>"<% end %><% auth.each_pair do |name, password| %> -u <%= name %>:<%= password %><% end %><%= logger ? " -l \"#{logger}\"" : '' %><% if rackup_command_line %> --rackup '<%= rackup_command_line %>'<% end %>
|
4
4
|
|
data/views/_service_info.haml
CHANGED
@@ -6,18 +6,21 @@
|
|
6
6
|
%td= service_info.uptime ? ('%.2f' % service_info.uptime) : ''
|
7
7
|
%td= stat_subst(service_info.stat)
|
8
8
|
%td
|
9
|
-
- if
|
10
|
-
=
|
11
|
-
= service_action service_info.name, :down, t('runit.services.table.actions.stop'), !service_info.down?
|
12
|
-
= service_action service_info.name, :up, t('runit.services.table.actions.start'), service_info.down?
|
13
|
-
- unless service_info.down?
|
14
|
-
- service_info.allowed_signals.each do |signal|
|
15
|
-
= service_signal service_info.name, signal, t("runit.services.table.signals.#{signal}")
|
16
|
-
- if service_info.switchable?
|
17
|
-
= service_action service_info.name, :switch_down, t('runit.services.table.actions.switch_down')
|
9
|
+
- if readonly?
|
10
|
+
%strong= t('runit.services.readonly')
|
18
11
|
- else
|
19
|
-
- if service_info.
|
20
|
-
= service_action service_info.name, :
|
12
|
+
- if service_info.active?
|
13
|
+
= service_action service_info.name, :restart, t('runit.services.table.actions.restart'), !service_info.down?
|
14
|
+
= service_action service_info.name, :down, t('runit.services.table.actions.stop'), !service_info.down?
|
15
|
+
= service_action service_info.name, :up, t('runit.services.table.actions.start'), service_info.down?
|
16
|
+
- unless service_info.down?
|
17
|
+
- service_info.allowed_signals.each do |signal|
|
18
|
+
= service_signal service_info.name, signal, t("runit.services.table.signals.#{signal}")
|
19
|
+
- if service_info.switchable?
|
20
|
+
= service_action service_info.name, :switch_down, t('runit.services.table.actions.switch_down')
|
21
|
+
- else
|
22
|
+
- if service_info.switchable?
|
23
|
+
= service_action service_info.name, :switch_up, t('runit.services.table.actions.switch_up')
|
21
24
|
%td
|
22
25
|
- if service_info.logged?
|
23
26
|
= log_link(service_info.name, :hint => t('runit.services.table.values.log_hint', :name => service_info.name), :blank => true, :title => service_info.log_file_location)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runit-man
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 2.3.
|
9
|
+
- 9
|
10
|
+
version: 2.3.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Akzhan Abdulin
|
@@ -15,10 +15,12 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-09-05 00:00:00 +04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
+
name: yajl-ruby
|
23
|
+
prerelease: false
|
22
24
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
25
|
none: false
|
24
26
|
requirements:
|
@@ -30,11 +32,11 @@ dependencies:
|
|
30
32
|
- 7
|
31
33
|
- 8
|
32
34
|
version: 0.7.8
|
33
|
-
name: yajl-ruby
|
34
35
|
type: :runtime
|
35
|
-
prerelease: false
|
36
36
|
requirement: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
+
name: haml
|
39
|
+
prerelease: false
|
38
40
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
41
|
none: false
|
40
42
|
requirements:
|
@@ -45,11 +47,11 @@ dependencies:
|
|
45
47
|
- 3
|
46
48
|
- 0
|
47
49
|
version: "3.0"
|
48
|
-
name: haml
|
49
50
|
type: :runtime
|
50
|
-
prerelease: false
|
51
51
|
requirement: *id002
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
|
+
name: sinatra
|
54
|
+
prerelease: false
|
53
55
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
56
|
none: false
|
55
57
|
requirements:
|
@@ -60,11 +62,11 @@ dependencies:
|
|
60
62
|
- 1
|
61
63
|
- 1
|
62
64
|
version: "1.1"
|
63
|
-
name: sinatra
|
64
65
|
type: :runtime
|
65
|
-
prerelease: false
|
66
66
|
requirement: *id003
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
|
+
name: sinatra-content-for2
|
69
|
+
prerelease: false
|
68
70
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
69
71
|
none: false
|
70
72
|
requirements:
|
@@ -76,11 +78,11 @@ dependencies:
|
|
76
78
|
- 2
|
77
79
|
- 4
|
78
80
|
version: 0.2.4
|
79
|
-
name: sinatra-content-for2
|
80
81
|
type: :runtime
|
81
|
-
prerelease: false
|
82
82
|
requirement: *id004
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
+
name: i18n
|
85
|
+
prerelease: false
|
84
86
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
85
87
|
none: false
|
86
88
|
requirements:
|
@@ -92,11 +94,11 @@ dependencies:
|
|
92
94
|
- 5
|
93
95
|
- 0
|
94
96
|
version: 0.5.0
|
95
|
-
name: i18n
|
96
97
|
type: :runtime
|
97
|
-
prerelease: false
|
98
98
|
requirement: *id005
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
|
+
name: file-tail
|
101
|
+
prerelease: false
|
100
102
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
101
103
|
none: false
|
102
104
|
requirements:
|
@@ -108,11 +110,11 @@ dependencies:
|
|
108
110
|
- 0
|
109
111
|
- 5
|
110
112
|
version: 1.0.5
|
111
|
-
name: file-tail
|
112
113
|
type: :runtime
|
113
|
-
prerelease: false
|
114
114
|
requirement: *id006
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
|
+
name: rake
|
117
|
+
prerelease: false
|
116
118
|
version_requirements: &id007 !ruby/object:Gem::Requirement
|
117
119
|
none: false
|
118
120
|
requirements:
|
@@ -124,11 +126,11 @@ dependencies:
|
|
124
126
|
- 9
|
125
127
|
- 0
|
126
128
|
version: 0.9.0
|
127
|
-
name: rake
|
128
129
|
type: :development
|
129
|
-
prerelease: false
|
130
130
|
requirement: *id007
|
131
131
|
- !ruby/object:Gem::Dependency
|
132
|
+
name: rspec-core
|
133
|
+
prerelease: false
|
132
134
|
version_requirements: &id008 !ruby/object:Gem::Requirement
|
133
135
|
none: false
|
134
136
|
requirements:
|
@@ -138,11 +140,11 @@ dependencies:
|
|
138
140
|
segments:
|
139
141
|
- 0
|
140
142
|
version: "0"
|
141
|
-
name: rspec-core
|
142
143
|
type: :development
|
143
|
-
prerelease: false
|
144
144
|
requirement: *id008
|
145
145
|
- !ruby/object:Gem::Dependency
|
146
|
+
name: rspec-expectations
|
147
|
+
prerelease: false
|
146
148
|
version_requirements: &id009 !ruby/object:Gem::Requirement
|
147
149
|
none: false
|
148
150
|
requirements:
|
@@ -152,11 +154,11 @@ dependencies:
|
|
152
154
|
segments:
|
153
155
|
- 0
|
154
156
|
version: "0"
|
155
|
-
name: rspec-expectations
|
156
157
|
type: :development
|
157
|
-
prerelease: false
|
158
158
|
requirement: *id009
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
|
+
name: rr
|
161
|
+
prerelease: false
|
160
162
|
version_requirements: &id010 !ruby/object:Gem::Requirement
|
161
163
|
none: false
|
162
164
|
requirements:
|
@@ -166,11 +168,11 @@ dependencies:
|
|
166
168
|
segments:
|
167
169
|
- 0
|
168
170
|
version: "0"
|
169
|
-
name: rr
|
170
171
|
type: :development
|
171
|
-
prerelease: false
|
172
172
|
requirement: *id010
|
173
173
|
- !ruby/object:Gem::Dependency
|
174
|
+
name: rack-test
|
175
|
+
prerelease: false
|
174
176
|
version_requirements: &id011 !ruby/object:Gem::Requirement
|
175
177
|
none: false
|
176
178
|
requirements:
|
@@ -180,11 +182,11 @@ dependencies:
|
|
180
182
|
segments:
|
181
183
|
- 0
|
182
184
|
version: "0"
|
183
|
-
name: rack-test
|
184
185
|
type: :development
|
185
|
-
prerelease: false
|
186
186
|
requirement: *id011
|
187
187
|
- !ruby/object:Gem::Dependency
|
188
|
+
name: bundler
|
189
|
+
prerelease: false
|
188
190
|
version_requirements: &id012 !ruby/object:Gem::Requirement
|
189
191
|
none: false
|
190
192
|
requirements:
|
@@ -196,9 +198,7 @@ dependencies:
|
|
196
198
|
- 0
|
197
199
|
- 10
|
198
200
|
version: 1.0.10
|
199
|
-
name: bundler
|
200
201
|
type: :development
|
201
|
-
prerelease: false
|
202
202
|
requirement: *id012
|
203
203
|
description: |
|
204
204
|
Simple runit (http://smarden.org/runit/) web management tool with i18n.
|
@@ -248,6 +248,7 @@ files:
|
|
248
248
|
- public/favicon.ico
|
249
249
|
- public/js/jquery-1.6.1.min.js
|
250
250
|
- public/js/runit-man.js
|
251
|
+
- runit-man-screenshot.gif
|
251
252
|
- runit-man.gemspec
|
252
253
|
- script/console
|
253
254
|
- spec/functional/runit-man_spec.rb
|