runit-man 2.3.8 → 2.3.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
![Screenshot](https://github.com/Undev/runit-man/raw/master/runit-man-screenshot.gif "Screenshot")
|
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
|
+
![Скриншот](https://github.com/Undev/runit-man/raw/master/runit-man-screenshot.gif "Скриншот")
|
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
|