runit-man 2.3.6 → 2.3.7
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/.gitignore +3 -0
- data/CHANGELOG.markdown +230 -0
- data/DESCRIPTION +5 -0
- data/Gemfile +10 -0
- data/INSTALL +33 -0
- data/LICENSE +21 -0
- data/README.markdown +91 -0
- data/README_ru.markdown +93 -0
- data/Rakefile +31 -0
- data/lib/runit-man/app.rb +4 -7
- data/lib/runit-man/config.ru +1 -1
- data/lib/runit-man/runner.rb +10 -5
- data/lib/runit-man/service_info.rb +3 -3
- data/lib/runit-man/version.rb +1 -1
- data/local-run.rb +6 -0
- data/runit-man.gemspec +34 -0
- data/script/console +7 -0
- data/spec/functional/runit-man_spec.rb +19 -0
- data/spec/spec_helper.rb +16 -0
- data/sv/run.erb +1 -1
- metadata +27 -12
data/.gitignore
ADDED
data/CHANGELOG.markdown
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
## Changes
|
|
2
|
+
|
|
3
|
+
### Version 2.3.7
|
|
4
|
+
|
|
5
|
+
* '--rackup' option now takes in care all specified options (earlier it takes in care only preceding options).
|
|
6
|
+
* Registration option now takes in care '--rackup' option.
|
|
7
|
+
* Minor refactoring.
|
|
8
|
+
|
|
9
|
+
### Version 2.3.6
|
|
10
|
+
* Internationalization of system information page.
|
|
11
|
+
* favicon added.
|
|
12
|
+
|
|
13
|
+
### Version 2.3.5
|
|
14
|
+
* Added /info (system information page).
|
|
15
|
+
|
|
16
|
+
### Version 2.3.4
|
|
17
|
+
* Rack::File used to serve static files in old Sinatra releases (Sinatra 1.3.0 have this functionality built-in). Requires Rack 1.3.0 or higher.
|
|
18
|
+
* rainbows configuration now uses sendfile gem if it's available to decrease CPU usage on serving large files.
|
|
19
|
+
|
|
20
|
+
### Version 2.3.3
|
|
21
|
+
* Typo (very old one).
|
|
22
|
+
|
|
23
|
+
### Version 2.3.2
|
|
24
|
+
* Thread safety.
|
|
25
|
+
* rainbows.conf file provided aside config.ru to optimize running under rainbows application server.
|
|
26
|
+
|
|
27
|
+
### Version 2.3.1
|
|
28
|
+
* New --rackup option to start runit-man using any Rack-compatible server (like unicorn/rainbows).
|
|
29
|
+
|
|
30
|
+
### Version 2.2.9
|
|
31
|
+
* Fix runit-man service registration (bug introduced in 2.2.6).
|
|
32
|
+
* Upgrade jQuery to 1.6.1.
|
|
33
|
+
|
|
34
|
+
### Version 2.2.8
|
|
35
|
+
* Encodings handling has been fixed (ruby 1.9 was affected) - prepor
|
|
36
|
+
|
|
37
|
+
### Version 2.2.7
|
|
38
|
+
* Yet another fix for logger applied when no current log file exists.
|
|
39
|
+
|
|
40
|
+
### Version 2.2.6
|
|
41
|
+
* Use standalone ERB instead of Erubis because we now not depend on erubis gem (registration broken in 2.1.1 when erubis is not installed).
|
|
42
|
+
* runit run scripts are fixed to use bash instead of any sh (thanks to hackru).
|
|
43
|
+
|
|
44
|
+
### Version 2.2.5
|
|
45
|
+
* Try to show human readable error message when file cannot be parsed in UTF-8 encoding.
|
|
46
|
+
|
|
47
|
+
### Version 2.2.4
|
|
48
|
+
* Fix haml options for ruby 1.8 (bug introduced in yanked 2.2.2)
|
|
49
|
+
* Try to show human readable error message when file cannot be parsed in UTF-8 encoding.
|
|
50
|
+
|
|
51
|
+
### Version 2.2.3 (yanked)
|
|
52
|
+
* Upgrade jQuery to 1.6.
|
|
53
|
+
* Fix jslint errors and warnings.
|
|
54
|
+
* Spawning of tail command replaced with file-tail gem.
|
|
55
|
+
* Force UTF-8 encoding on file contents in ruby 1.9.
|
|
56
|
+
|
|
57
|
+
### Version 2.1.2
|
|
58
|
+
* Sometimes we have no current log file in logger (no records in current day). Test for it.
|
|
59
|
+
* Updated logic of calculation of log file times.
|
|
60
|
+
|
|
61
|
+
### Version 2.1.1
|
|
62
|
+
* erubis replaced with haml (because newest erubis breaks rendering of page).
|
|
63
|
+
* CSS updated.
|
|
64
|
+
|
|
65
|
+
### Version 2.0.9
|
|
66
|
+
* English locale fixed (broken in 2.0.0).
|
|
67
|
+
* Caching fixed (broken in 2.0.7).
|
|
68
|
+
|
|
69
|
+
### Version 2.0.7
|
|
70
|
+
* Caching of logger log locations removed, other caching was shortened.
|
|
71
|
+
|
|
72
|
+
### Version 2.0.6
|
|
73
|
+
* Support for gzipped logs.
|
|
74
|
+
|
|
75
|
+
### Version 2.0.2
|
|
76
|
+
* Fix log link hint, that's broken from 1.11.x (thanks to verm666).
|
|
77
|
+
|
|
78
|
+
### Version 2.0.1
|
|
79
|
+
* Use Bundler to simplify development tasks.
|
|
80
|
+
* Fix registration of -l option.
|
|
81
|
+
|
|
82
|
+
### Version 2.0.0
|
|
83
|
+
* Support for logger utility in addition to svlogd utility
|
|
84
|
+
* jQuery upgraded to version 1.5.2.
|
|
85
|
+
|
|
86
|
+
### Version 1.11.6
|
|
87
|
+
* New column (started_at) has been added.
|
|
88
|
+
|
|
89
|
+
### Version 1.11.4
|
|
90
|
+
* jQuery upgraded to version 1.5.1.
|
|
91
|
+
* Fixed i18n for en locale in log view (bug introduced in 1.11.0).
|
|
92
|
+
* Minor typo in ru locale.
|
|
93
|
+
|
|
94
|
+
### Version 1.11.3
|
|
95
|
+
* Fixed i18n for file view (bug introduced in 1.11.0).
|
|
96
|
+
|
|
97
|
+
### Version 1.11.0
|
|
98
|
+
* Switched from sinatra-r18n gem to i18n gem due to various aperiodic translation problems.
|
|
99
|
+
|
|
100
|
+
### Version 1.10.3
|
|
101
|
+
* All time information in "Log downloads" section now represented in UTC.
|
|
102
|
+
* Downloaded file names for logs now include host name.
|
|
103
|
+
* Minor update of visual appearance of "Log downloads" section.
|
|
104
|
+
|
|
105
|
+
### Version 1.10.2
|
|
106
|
+
* Log naming schema in "Log downloads" section has been changed to be more friendly.
|
|
107
|
+
* Special svlogd "state" and "newstate" files are skipped in Downloads section.
|
|
108
|
+
* Minor fix for ruby 1.9.2 in Rakefile (was broken in 1.10.1).
|
|
109
|
+
|
|
110
|
+
### Version 1.10.1
|
|
111
|
+
* X-Powered-By and X-Version response headers added (to simplify management of installations).
|
|
112
|
+
|
|
113
|
+
### Version 1.10.0
|
|
114
|
+
* Ability to download log files of concrete service.
|
|
115
|
+
|
|
116
|
+
### Version 1.9.8
|
|
117
|
+
* jQuery upgraded to version 1.5.0.
|
|
118
|
+
|
|
119
|
+
### Version 1.9.7
|
|
120
|
+
* Useless json gem compatibility layer has been removed.
|
|
121
|
+
|
|
122
|
+
### Version 1.9.6
|
|
123
|
+
* Home has been moved to https://github.com/Undev/runit-man.
|
|
124
|
+
|
|
125
|
+
### Version 1.9.5
|
|
126
|
+
* Support for Ruby 1.9.2.
|
|
127
|
+
* Use native Erubis support of Sinatra.
|
|
128
|
+
* Switch from sinatra-content-for gem to sinatra-content-for2 gem.
|
|
129
|
+
|
|
130
|
+
### Version 1.9.4
|
|
131
|
+
* Use RSpec 2.
|
|
132
|
+
|
|
133
|
+
### Version 1.9.3
|
|
134
|
+
* jQuery upgraded from version 1.4.2 to version 1.4.4.
|
|
135
|
+
* Switch from json gem to yajl-ruby gem.
|
|
136
|
+
|
|
137
|
+
### Versions 1.9.0 up to 1.9.2
|
|
138
|
+
* BasicAuth supported by -u user:password option (multiple occurences allowed).
|
|
139
|
+
|
|
140
|
+
### Version 1.8.4
|
|
141
|
+
* Now status of services read from status file instead of both status and stat.
|
|
142
|
+
|
|
143
|
+
### Version 1.8.3
|
|
144
|
+
* Fix view of files that have extension like '.json', '.html' etc.
|
|
145
|
+
|
|
146
|
+
### Versions 1.8.1 up to 1.8.2
|
|
147
|
+
* Minor visual improvements.
|
|
148
|
+
|
|
149
|
+
### Version 1.8.0
|
|
150
|
+
* Allow to send custom signal through Web interface
|
|
151
|
+
if these specified in SV/runit-man/allowed-signals folder.
|
|
152
|
+
|
|
153
|
+
### Versions 1.7.0 up to 1.7.4
|
|
154
|
+
* Uptime and pid now retrieved from daemontools-compatible status.
|
|
155
|
+
* Files are cached.
|
|
156
|
+
* Uptime is shown.
|
|
157
|
+
|
|
158
|
+
### Version 1.6.4
|
|
159
|
+
* Fix for new versions of json gem.
|
|
160
|
+
|
|
161
|
+
### Versions 1.6.0 up to 1.6.3
|
|
162
|
+
* Ability to view files and urls associated with service.
|
|
163
|
+
* Small fixes.
|
|
164
|
+
|
|
165
|
+
### Version 1.5.4
|
|
166
|
+
* More correct way to register itself as runit service.
|
|
167
|
+
|
|
168
|
+
### Version 1.5.3
|
|
169
|
+
* Fix link to view file as text/plain.
|
|
170
|
+
|
|
171
|
+
### Version 1.5.2
|
|
172
|
+
* Fix reregistration as runit service.
|
|
173
|
+
|
|
174
|
+
### Version 1.5.1
|
|
175
|
+
* Fix registration as runit service.
|
|
176
|
+
|
|
177
|
+
### Version 1.5.0
|
|
178
|
+
* We can view files in predefined locations (see command line options).
|
|
179
|
+
|
|
180
|
+
### Version 1.4.9
|
|
181
|
+
* More readable description for rubygems.
|
|
182
|
+
|
|
183
|
+
### Version 1.4.8
|
|
184
|
+
* runit-man now supports sending of any signals through API.
|
|
185
|
+
|
|
186
|
+
### Version 1.4.7
|
|
187
|
+
* runit-man now supports output of logs in raw text/plain format.
|
|
188
|
+
|
|
189
|
+
### Version 1.4.6
|
|
190
|
+
* runit-man now can show custom count of lines per log.
|
|
191
|
+
|
|
192
|
+
### Version 1.4.5
|
|
193
|
+
* Fix error when ran on machine when it's name cannot be resolved by DNS.
|
|
194
|
+
* /services.json added to provide automation API.
|
|
195
|
+
|
|
196
|
+
### Version 1.4.3
|
|
197
|
+
* Add dependency to nearest r18n library that run on ruby 1.8.6
|
|
198
|
+
* Script renamed to runit-man without extension.
|
|
199
|
+
|
|
200
|
+
### Version 1.4.1
|
|
201
|
+
* Workaround for rubygems behavior (sometimes it doesn't update binaries).
|
|
202
|
+
|
|
203
|
+
### Version 1.4
|
|
204
|
+
* Automated registration with given options.
|
|
205
|
+
|
|
206
|
+
### Version 1.3
|
|
207
|
+
* Automated registration as runit service (-r option).
|
|
208
|
+
|
|
209
|
+
### Version 1.2
|
|
210
|
+
* First public release
|
|
211
|
+
* Some wrong installed services cannot be switched because installed
|
|
212
|
+
as directories instead of symlinks.
|
|
213
|
+
|
|
214
|
+
### Version 1.1
|
|
215
|
+
* After sending of actions state was retrieved from server too often.
|
|
216
|
+
* Performed actions now logged.
|
|
217
|
+
* Services now can be activated and deactivated.
|
|
218
|
+
* Refactoring of LogLocationCache.
|
|
219
|
+
* Locations of runit folders now can be set through command line.
|
|
220
|
+
|
|
221
|
+
### Version 1.0
|
|
222
|
+
* Packaged into gem.
|
|
223
|
+
* I18n (en and ru locales added).
|
|
224
|
+
* Visual improvements.
|
|
225
|
+
|
|
226
|
+
### Version 0.2
|
|
227
|
+
* Visual improvements.
|
|
228
|
+
|
|
229
|
+
### Version 0.1
|
|
230
|
+
* First working release
|
data/DESCRIPTION
ADDED
data/Gemfile
ADDED
data/INSTALL
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
You need ruby 1.8.6 or above and rubygems installed.
|
|
2
|
+
|
|
3
|
+
Use following command to install runit-man:
|
|
4
|
+
gem install runit-man
|
|
5
|
+
|
|
6
|
+
Take a look at runit-man script options:
|
|
7
|
+
|
|
8
|
+
-p - Port to listen (4567 by default)
|
|
9
|
+
-b - IP Address to bind (0.0.0.0 by default)
|
|
10
|
+
-a - Directory of activated services (/etc/service by default)
|
|
11
|
+
-f - Directory of all known services (/etc/sv by default)
|
|
12
|
+
-u - User and password delimited by ':' for HTTP authentication (disabled by default)
|
|
13
|
+
-r - Register runit-man as runit service (as defined by other options)
|
|
14
|
+
--rackup='command' - Runs specified command in folder where is runit'man's config.ru located.
|
|
15
|
+
|
|
16
|
+
Usually you need thin gem to run runit-man effectively.
|
|
17
|
+
gem install thin
|
|
18
|
+
|
|
19
|
+
When You need to handle large files (logs etc.) by runit-man script You need another setup:
|
|
20
|
+
* Install rainbows gem (it prevents memory consumption).
|
|
21
|
+
* Upgrade rack gem to version 1.3 or higher and install sendfile gem if possible (It decreases CPU usage in combination with rainbows).
|
|
22
|
+
* Run runit-man as:
|
|
23
|
+
|
|
24
|
+
runit-man --rackup='rainbows -E production -c rainbows.conf -p <PORT>'
|
|
25
|
+
|
|
26
|
+
Any localization can be done by editing of ./i18n/*.yml locale files.
|
|
27
|
+
Contributions are welcome.
|
|
28
|
+
|
|
29
|
+
runit home page: http://smarden.org/runit/
|
|
30
|
+
runit-man home page: https://github.com/Undev/runit-man
|
|
31
|
+
|
|
32
|
+
Yours sincerely,
|
|
33
|
+
Akzhan.
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Copyright (c) 2010 Akzhan Abdulin
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
+
|
data/README.markdown
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
|
|
3
|
+
Simple [runit](http://smarden.org/runit/ "runit home page") web management tool with internationalization support.
|
|
4
|
+
|
|
5
|
+
Server will run by **runit-man** script. Take a note that **runit-man** must have privileges like **runsvdir** process ones.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Usually You should install both **runit-man** and **thin** gems to run this tool fine.
|
|
10
|
+
`gem install runit-man thin`
|
|
11
|
+
|
|
12
|
+
Pragmatic approach is to setup runit-man as runit service like this:
|
|
13
|
+
`runit-man -p 14500 -r`
|
|
14
|
+
|
|
15
|
+
This command installs runit-man as runit service (using default folders */etc/sv/* and */etc/service/*).
|
|
16
|
+
|
|
17
|
+
Look at INSTALL for details.
|
|
18
|
+
|
|
19
|
+
### rackup configuration
|
|
20
|
+
|
|
21
|
+
Take a note that runit-man gem also provides config.ru rackup configuration file.
|
|
22
|
+
It's useful for running under unicorn/rainbows etc. `runit-man --rackup=command` option does `cd config.ru directory && set environment && exec command`.
|
|
23
|
+
|
|
24
|
+
## Customization
|
|
25
|
+
|
|
26
|
+
This tool can provide additional information or actions through it's Web page.
|
|
27
|
+
|
|
28
|
+
### View names and content of files that related to concrete service
|
|
29
|
+
|
|
30
|
+
For each known runit service this tool looks for **./runit-man/files-to-view/** folder.
|
|
31
|
+
Every symlink here will be shown as link to view target file content.
|
|
32
|
+
|
|
33
|
+
### Show links that related to concrete service
|
|
34
|
+
|
|
35
|
+
For each known runit service this tool looks for **./runit-man/urls-to-view/** folder.
|
|
36
|
+
Every file ended with .url will be shown as link to view target location (location should be written as content of this file).
|
|
37
|
+
|
|
38
|
+
### Show buttons that send signals to concrete service
|
|
39
|
+
|
|
40
|
+
For each known runit service this tool looks for **./runit-man/allowed-signals/** folder.
|
|
41
|
+
Each one-letter-named file declares that signal button should be shown in Web UI.
|
|
42
|
+
|
|
43
|
+
Signal letters listed below in REST API section.
|
|
44
|
+
|
|
45
|
+
## REST API
|
|
46
|
+
|
|
47
|
+
### Get state
|
|
48
|
+
|
|
49
|
+
You can read current state of services in [JSON format](http://www.json.org/ "JSON home page") using
|
|
50
|
+
`GET /services.json`
|
|
51
|
+
|
|
52
|
+
### Management
|
|
53
|
+
|
|
54
|
+
You can manage your services using
|
|
55
|
+
`POST /<service name>/<command>`
|
|
56
|
+
|
|
57
|
+
Supported commands: *up*, *down*, *restart*, *switch_up* (activates service), *switch_down* (deactivates service).
|
|
58
|
+
|
|
59
|
+
You can also send any signal to service using
|
|
60
|
+
`POST /<service name>/signal/<signal>`
|
|
61
|
+
|
|
62
|
+
Supported signals and their's meaning:
|
|
63
|
+
|
|
64
|
+
* t: TERM
|
|
65
|
+
* k: KILL
|
|
66
|
+
* i: INT
|
|
67
|
+
* 1: USR1
|
|
68
|
+
* 2: USR2
|
|
69
|
+
* a: ALARM
|
|
70
|
+
* q: QUIT
|
|
71
|
+
* x: EXIT
|
|
72
|
+
* p: PAUSE
|
|
73
|
+
* c: CONT
|
|
74
|
+
* h: HUP
|
|
75
|
+
* o: ONCE
|
|
76
|
+
|
|
77
|
+
### Read logs
|
|
78
|
+
|
|
79
|
+
#### svlogd
|
|
80
|
+
|
|
81
|
+
You can read tail of service log using
|
|
82
|
+
`GET /<service name>/log/<count of tailing lines>.txt`
|
|
83
|
+
|
|
84
|
+
Note that to use this feature You must do logging using
|
|
85
|
+
`exec svlogd options log_directory_location`
|
|
86
|
+
|
|
87
|
+
#### logger
|
|
88
|
+
Use logger like:
|
|
89
|
+
`exec logger -i -t "runit-man" -p local1.info`
|
|
90
|
+
and use option -l "logger:/var/log/" where base logs directory shown after period.
|
|
91
|
+
|
data/README_ru.markdown
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
## Описание
|
|
2
|
+
|
|
3
|
+
Простая утилита для управления сервисами [runit](http://smarden.org/runit/ "Домашняя страница runit") через Web-интерфейс, с поддержкой интернационализации.
|
|
4
|
+
|
|
5
|
+
Сервер запускается скриптом **runit-man**. Примите во внимание, что **runit-man** обязан иметь привилегии, аналогичные привилегиям процесса **runsvdir**.
|
|
6
|
+
|
|
7
|
+
## Инсталляция
|
|
8
|
+
|
|
9
|
+
Обычно вам нужно поставить гемы **runit-man** и **thin** совместно, чтобы эта утилита работала эффективно.
|
|
10
|
+
`gem install runit-man thin`
|
|
11
|
+
|
|
12
|
+
Прагматично установить runit-man как один из сервисов runit, например, так:
|
|
13
|
+
`runit-man -p 14500 -r`
|
|
14
|
+
|
|
15
|
+
Эта команда создаёт сервис runit-man, как один из обычных активных сервисов runit (используя каталоги */etc/sv/* and */etc/service/* по умолчанию).
|
|
16
|
+
|
|
17
|
+
Подробнее смотрите файл INSTALL.
|
|
18
|
+
|
|
19
|
+
### Конфигурирование под Rack
|
|
20
|
+
|
|
21
|
+
Обратите внимание, что гем runit-man gem также предоставляет файл конфигурации Rack config.ru.
|
|
22
|
+
Он полезен для запуска runit-man под такими серверами, как unicorn, rainbows и другими. Опция `runit-man --rackup=command` выполняет команду `cd каталог, где лежит config.ru && set environment && exec command`.
|
|
23
|
+
|
|
24
|
+
## Кастомизация
|
|
25
|
+
|
|
26
|
+
Эта утилита способна предоставлять дополнительную информацию или действия на своей Web-странице.
|
|
27
|
+
|
|
28
|
+
### Просмотр имён и содержимого файлов, относящихся к конкретному сервису
|
|
29
|
+
|
|
30
|
+
Для каждого известного сервиса runit эта утилита просматривает каталог **./runit-man/files-to-view/**.
|
|
31
|
+
Каждый симлинк в этом каталоге будет показан как ссылка на просмотр содержимого целевого файла.
|
|
32
|
+
|
|
33
|
+
### Показ ссылок, относящихся к конкретному сервису
|
|
34
|
+
|
|
35
|
+
Для каждого известного сервиса runit эта утилита просматривает каталог **./runit-man/urls-to-view/**.
|
|
36
|
+
Каждый файл, имеющий расширение .url, будет показан, как сылка на просмотр целевой локации (которая берётся как содержимое файла).
|
|
37
|
+
|
|
38
|
+
### Показ кнопок, которые посылают сигналы выбранному процессу
|
|
39
|
+
|
|
40
|
+
Для каждого известного сервиса runit эта утилита просматривает каталог **./runit-man/allowed-signals/**.
|
|
41
|
+
Каждый однобуквенно-именованный файл определяет, что кнопка для сигнала должна появиться в пользовательском интерфейсе.
|
|
42
|
+
|
|
43
|
+
Соответствия между буквами и сигналами перечислены ниже, в секции REST API.
|
|
44
|
+
|
|
45
|
+
## REST API
|
|
46
|
+
|
|
47
|
+
### Получение состояния
|
|
48
|
+
|
|
49
|
+
Вы можете получить текущее состояние сервисов в [формате JSON](http://www.json.org/ "Домашняя страница JSON"), используя
|
|
50
|
+
`GET /services.json`
|
|
51
|
+
|
|
52
|
+
### Управление
|
|
53
|
+
|
|
54
|
+
Вы можете управлять вашими сервисами, используя
|
|
55
|
+
`POST /<service name>/<command>`
|
|
56
|
+
|
|
57
|
+
Поддерживаемые команды: *up*, *down*, *restart*, *switch_up* (активация сервиса), *switch_down* (деактивация сервиса).
|
|
58
|
+
|
|
59
|
+
Вы можете также посылать любые сигналы сервису, используя
|
|
60
|
+
`POST /<service name>/signal/<signal>`
|
|
61
|
+
|
|
62
|
+
Поддерживаемые сигналы и их значения:
|
|
63
|
+
|
|
64
|
+
* t: TERM
|
|
65
|
+
* k: KILL
|
|
66
|
+
* i: INT
|
|
67
|
+
* 1: USR1
|
|
68
|
+
* 2: USR2
|
|
69
|
+
* a: ALARM
|
|
70
|
+
* q: QUIT
|
|
71
|
+
* x: EXIT
|
|
72
|
+
* p: PAUSE
|
|
73
|
+
* c: CONT
|
|
74
|
+
* h: HUP
|
|
75
|
+
* o: ONCE
|
|
76
|
+
|
|
77
|
+
### Чтение логов
|
|
78
|
+
|
|
79
|
+
#### svlogd
|
|
80
|
+
|
|
81
|
+
Вы можете читать хвост лога сервиса, используя
|
|
82
|
+
`GET /<service name>/log/<count of tailing lines>.txt`
|
|
83
|
+
|
|
84
|
+
Учитывайте, что этот функционал работает, только если Вы логгируете сервис с использованием команды вида
|
|
85
|
+
`exec svlogd options log_directory_location`
|
|
86
|
+
|
|
87
|
+
#### logger
|
|
88
|
+
|
|
89
|
+
Если Вы предпочитаете logger, используйте его вот так:
|
|
90
|
+
`exec logger -i -t "runit-man" -p local1.info`
|
|
91
|
+
|
|
92
|
+
При этом нужно использовать опцию -l "logger:/var/log/", где после двоеточия надо указывать базовый каталог логов.
|
|
93
|
+
|
data/Rakefile
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
$LOAD_PATH.unshift('./lib')
|
|
5
|
+
|
|
6
|
+
require 'runit-man/version'
|
|
7
|
+
|
|
8
|
+
begin
|
|
9
|
+
require 'rspec/core/rake_task'
|
|
10
|
+
|
|
11
|
+
RSpec::Core::RakeTask.new do |t|
|
|
12
|
+
t.rspec_opts = ["-c", "-f progress"]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
RSpec::Core::RakeTask.new(:rcov) do |t|
|
|
16
|
+
t.rcov = true
|
|
17
|
+
t.ruby_opts = '-w'
|
|
18
|
+
t.rspec_opts = ["-c", "-f progress"]
|
|
19
|
+
t.rcov_opts = %q[-Ilib --exclude "spec/*,gems/*"]
|
|
20
|
+
end
|
|
21
|
+
rescue LoadError
|
|
22
|
+
$stderr.puts "RSpec not available. Install it with: gem install rspec-core rspec-expectations"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
begin
|
|
26
|
+
require 'bundler'
|
|
27
|
+
Bundler::GemHelper.install_tasks
|
|
28
|
+
rescue LoadError
|
|
29
|
+
$stderr.puts "Bundler not available. Install it with: gem install bundler"
|
|
30
|
+
end
|
|
31
|
+
|
data/lib/runit-man/app.rb
CHANGED
|
@@ -274,7 +274,7 @@ class RunitMan < Sinatra::Base
|
|
|
274
274
|
def exec_rackup(command)
|
|
275
275
|
ENV['RUNIT_ALL_SERVICES_DIR'] = RunitMan.all_services_directory
|
|
276
276
|
ENV['RUNIT_ACTIVE_SERVICES_DIR'] = RunitMan.active_services_directory
|
|
277
|
-
ENV['RUNIT_LOGGER'] = RunitMan.
|
|
277
|
+
ENV['RUNIT_LOGGER'] = RunitMan.runit_logger
|
|
278
278
|
ENV['RUNIT_MAN_VIEW_FILES'] = RunitMan.files_to_view.join(',')
|
|
279
279
|
ENV['RUNIT_MAN_CREDENTIALS'] = RunitMan.allowed_users.keys.map { |user| "#{user}:#{RunitMan.allowed_users[user]}" }.join(',')
|
|
280
280
|
|
|
@@ -316,10 +316,6 @@ class RunitMan < Sinatra::Base
|
|
|
316
316
|
@allowed_users ||= {}
|
|
317
317
|
end
|
|
318
318
|
|
|
319
|
-
def logger
|
|
320
|
-
settings.logger_option
|
|
321
|
-
end
|
|
322
|
-
|
|
323
319
|
def prepare_to_run
|
|
324
320
|
unless allowed_users.empty?
|
|
325
321
|
use Rack::Auth::Basic, 'runit-man' do |username, password|
|
|
@@ -339,8 +335,9 @@ class RunitMan < Sinatra::Base
|
|
|
339
335
|
bind = RunitMan.respond_to?(:bind) ? RunitMan.bind : nil
|
|
340
336
|
server = RunitMan.server
|
|
341
337
|
files_to_view = RunitMan.files_to_view
|
|
342
|
-
logger = RunitMan.
|
|
338
|
+
logger = RunitMan.runit_logger
|
|
343
339
|
auth = RunitMan.allowed_users
|
|
340
|
+
rackup_command_line = RunitMan.rackup_command_line
|
|
344
341
|
File.open(script_name, 'w') do |script_source|
|
|
345
342
|
script_source.print ERB.new(IO.read(template_name)).result(binding())
|
|
346
343
|
end
|
|
@@ -351,7 +348,7 @@ class RunitMan < Sinatra::Base
|
|
|
351
348
|
require 'erb'
|
|
352
349
|
script_name = File.join(dir, 'log', 'run')
|
|
353
350
|
template_name = File.join(GEM_FOLDER, 'sv', 'log', 'run.erb')
|
|
354
|
-
logger = RunitMan.
|
|
351
|
+
logger = RunitMan.runit_logger
|
|
355
352
|
File.open(script_name, 'w') do |script_source|
|
|
356
353
|
script_source.print ERB.new(IO.read(template_name)).result(binding())
|
|
357
354
|
end
|
data/lib/runit-man/config.ru
CHANGED
|
@@ -4,7 +4,7 @@ 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 :
|
|
7
|
+
RunitMan.set :runit_logger, ENV['RUNIT_LOGGER'] || RunitMan::DEFAULT_LOGGER
|
|
8
8
|
|
|
9
9
|
if ENV['RUNIT_MAN_VIEW_FILES']
|
|
10
10
|
ENV['RUNIT_MAN_VIEW_FILES'].split(/\s*\,\s*/).each do |floc|
|
data/lib/runit-man/runner.rb
CHANGED
|
@@ -3,7 +3,8 @@ require 'runit-man/app'
|
|
|
3
3
|
|
|
4
4
|
RunitMan.set :active_services_directory, RunitMan::DEFAULT_ACTIVE_SERVICES_DIR
|
|
5
5
|
RunitMan.set :all_services_directory, RunitMan::DEFAULT_ALL_SERVICES_DIR
|
|
6
|
-
RunitMan.set :
|
|
6
|
+
RunitMan.set :runit_logger, RunitMan::DEFAULT_LOGGER
|
|
7
|
+
RunitMan.set :rackup_command_line, false
|
|
7
8
|
|
|
8
9
|
OptionParser.new { |op|
|
|
9
10
|
op.banner = 'Usage: runit-man <options>'
|
|
@@ -15,14 +16,14 @@ OptionParser.new { |op|
|
|
|
15
16
|
op.separator 'runit options:'
|
|
16
17
|
op.on('-a active_services_directory (/etc/service by default)') { |val| RunitMan.set :active_services_directory, val }
|
|
17
18
|
op.on('-f all_services_directory (/etc/sv by default)') { |val| RunitMan.set :all_services_directory, val }
|
|
18
|
-
op.separator '
|
|
19
|
-
op.on('-l logger application[:base folder[:priority]] (svlogd by default)') { |val| RunitMan.set :
|
|
19
|
+
op.separator 'runit logger options (now svlogd and logger supported only):'
|
|
20
|
+
op.on('-l runit logger application[:base folder[:priority]] (svlogd by default)') { |val| RunitMan.set :runit_logger, val }
|
|
20
21
|
op.separator 'View options:'
|
|
21
22
|
op.on('-v file_location', 'Enables view of specified file through runit-man') { |val| RunitMan.enable_view_of(val) }
|
|
22
23
|
op.on('-u user:password', 'Requires user name with given password to auth') { |val| RunitMan.add_user(*(val.split(':', 2))) }
|
|
23
24
|
op.separator 'Configuration options:'
|
|
24
|
-
op.
|
|
25
|
-
RunitMan.
|
|
25
|
+
op.on('--rackup command_line', 'Change directory to config.ru location, set environment by options and execute specified command_line') do |command_line|
|
|
26
|
+
RunitMan.set :rackup_command_line, command_line
|
|
26
27
|
end
|
|
27
28
|
op.on_tail('-r', '--register', 'Register as runit service') do
|
|
28
29
|
RunitMan.register_as_runit_service
|
|
@@ -30,6 +31,10 @@ OptionParser.new { |op|
|
|
|
30
31
|
end
|
|
31
32
|
}.parse!(ARGV.dup)
|
|
32
33
|
|
|
34
|
+
if RunitMan.rackup_command_line
|
|
35
|
+
RunitMan.exec_rackup(RunitMan.rackup_command_line)
|
|
36
|
+
end
|
|
37
|
+
|
|
33
38
|
RunitMan.prepare_to_run
|
|
34
39
|
|
|
35
40
|
RunitMan.run!
|
|
@@ -120,7 +120,7 @@ class ServiceInfo
|
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
def log_file_path(file_name)
|
|
123
|
-
case RunitMan.
|
|
123
|
+
case RunitMan.runit_logger
|
|
124
124
|
when RunitMan::DEFAULT_LOGGER then svlogd_log_file_path(file_name)
|
|
125
125
|
when /^logger(?:\:.+)?/ then logger_log_file_path(file_name)
|
|
126
126
|
else nil
|
|
@@ -185,7 +185,7 @@ class ServiceInfo
|
|
|
185
185
|
end
|
|
186
186
|
|
|
187
187
|
def log_files
|
|
188
|
-
case RunitMan.
|
|
188
|
+
case RunitMan.runit_logger
|
|
189
189
|
when RunitMan::DEFAULT_LOGGER then svlogd_log_files
|
|
190
190
|
when /^logger(?:\:.+)?/ then logger_log_files
|
|
191
191
|
else []
|
|
@@ -286,7 +286,7 @@ private
|
|
|
286
286
|
end
|
|
287
287
|
|
|
288
288
|
def log_location_cache
|
|
289
|
-
@log_location_cache ||= LogLocationCache.new(RunitMan.
|
|
289
|
+
@log_location_cache ||= LogLocationCache.new(RunitMan.runit_logger)
|
|
290
290
|
end
|
|
291
291
|
|
|
292
292
|
def real_data_from_file(file_name)
|
data/lib/runit-man/version.rb
CHANGED
data/local-run.rb
ADDED
data/runit-man.gemspec
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('./lib', File.dirname(__FILE__))
|
|
2
|
+
require 'runit-man/version'
|
|
3
|
+
|
|
4
|
+
spec = Gem::Specification.new do |s|
|
|
5
|
+
s.platform = Gem::Platform::RUBY
|
|
6
|
+
s.summary = "Runit web management tool."
|
|
7
|
+
s.name = 'runit-man'
|
|
8
|
+
s.author = 'Akzhan Abdulin'
|
|
9
|
+
s.email = 'akzhan.abdulin@gmail.com'
|
|
10
|
+
s.date = Time.now.strftime('%Y-%m-%d')
|
|
11
|
+
s.homepage = 'https://github.com/Undev/runit-man'
|
|
12
|
+
s.version = RunitManVersion::VERSION.dup
|
|
13
|
+
s.requirements << 'none'
|
|
14
|
+
s.require_path = 'lib'
|
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
|
16
|
+
s.extra_rdoc_files = [
|
|
17
|
+
"README.markdown"
|
|
18
|
+
]
|
|
19
|
+
s.files = `git ls-files`.split("\n")
|
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
21
|
+
s.add_dependency 'yajl-ruby', '>= 0.7.8'
|
|
22
|
+
s.add_dependency 'haml', '>= 3.0'
|
|
23
|
+
s.add_dependency 'sinatra', '>= 1.1'
|
|
24
|
+
s.add_dependency 'sinatra-content-for2', '>= 0.2.4'
|
|
25
|
+
s.add_dependency 'i18n', '>= 0.5.0'
|
|
26
|
+
s.add_dependency 'file-tail', '>= 1.0.5'
|
|
27
|
+
s.add_development_dependency 'rspec-core'
|
|
28
|
+
s.add_development_dependency 'rspec-expectations'
|
|
29
|
+
s.add_development_dependency 'rr'
|
|
30
|
+
s.add_development_dependency 'rack-test'
|
|
31
|
+
s.add_development_dependency 'bundler', '>= 1.0.10'
|
|
32
|
+
s.description = File.open(File.join(File.dirname(__FILE__), 'DESCRIPTION')).read
|
|
33
|
+
end
|
|
34
|
+
|
data/script/console
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
SINATRA_ROOT = File.expand_path('..', File.dirname(__FILE__))
|
|
4
|
+
|
|
5
|
+
irb = (RUBY_PLATFORM =~ /(:?mswin|mingw)/) ? 'irb.bat' : 'irb'
|
|
6
|
+
|
|
7
|
+
exec("#{irb} --readline -I #{SINATRA_ROOT}/lib -r irb/completion --prompt-mode simple -r rubygems -r runit-man/app")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RunitMan do
|
|
4
|
+
def app
|
|
5
|
+
RunitMan
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should respond to /" do
|
|
9
|
+
get '/'
|
|
10
|
+
last_response.should be_ok
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should respond to /services" do
|
|
14
|
+
stub(ServiceInfo).all { [] }
|
|
15
|
+
|
|
16
|
+
get '/services'
|
|
17
|
+
last_response.should be_ok
|
|
18
|
+
end
|
|
19
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'runit-man', 'app')
|
|
2
|
+
|
|
3
|
+
require 'rack/test'
|
|
4
|
+
require 'rspec'
|
|
5
|
+
|
|
6
|
+
class RunitMan
|
|
7
|
+
# set test environment
|
|
8
|
+
set :environment, :test
|
|
9
|
+
set :raise_errors, true
|
|
10
|
+
set :logging, false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
RSpec.configure do |conf|
|
|
14
|
+
conf.mock_with :rr
|
|
15
|
+
conf.include Rack::Test::Methods
|
|
16
|
+
end
|
data/sv/run.erb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
exec 2>&1
|
|
3
|
-
exec runit-man<% 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}\"" : '' %>
|
|
3
|
+
exec runit-man<% 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
|
|
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: 13
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 2
|
|
8
8
|
- 3
|
|
9
|
-
-
|
|
10
|
-
version: 2.3.
|
|
9
|
+
- 7
|
|
10
|
+
version: 2.3.7
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Akzhan Abdulin
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-06-
|
|
18
|
+
date: 2011-06-23 00:00:00 +04:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
@@ -196,10 +196,21 @@ executables:
|
|
|
196
196
|
- runit-man
|
|
197
197
|
extensions: []
|
|
198
198
|
|
|
199
|
-
extra_rdoc_files:
|
|
200
|
-
|
|
199
|
+
extra_rdoc_files:
|
|
200
|
+
- README.markdown
|
|
201
201
|
files:
|
|
202
|
+
- .gitignore
|
|
203
|
+
- CHANGELOG.markdown
|
|
204
|
+
- DESCRIPTION
|
|
205
|
+
- Gemfile
|
|
206
|
+
- INSTALL
|
|
207
|
+
- LICENSE
|
|
208
|
+
- README.markdown
|
|
209
|
+
- README_ru.markdown
|
|
210
|
+
- Rakefile
|
|
202
211
|
- bin/runit-man
|
|
212
|
+
- i18n/en.yml
|
|
213
|
+
- i18n/ru.yml
|
|
203
214
|
- lib/runit-man/app.rb
|
|
204
215
|
- lib/runit-man/config.ru
|
|
205
216
|
- lib/runit-man/helpers.rb
|
|
@@ -211,6 +222,7 @@ files:
|
|
|
211
222
|
- lib/runit-man/service_status.rb
|
|
212
223
|
- lib/runit-man/utils.rb
|
|
213
224
|
- lib/runit-man/version.rb
|
|
225
|
+
- local-run.rb
|
|
214
226
|
- public/css/runit-man.css
|
|
215
227
|
- public/css/tripoli.simple.css
|
|
216
228
|
- public/css/tripoli.simple.ie.css
|
|
@@ -219,6 +231,12 @@ files:
|
|
|
219
231
|
- public/favicon.ico
|
|
220
232
|
- public/js/jquery-1.6.1.min.js
|
|
221
233
|
- public/js/runit-man.js
|
|
234
|
+
- runit-man.gemspec
|
|
235
|
+
- script/console
|
|
236
|
+
- spec/functional/runit-man_spec.rb
|
|
237
|
+
- spec/spec_helper.rb
|
|
238
|
+
- sv/log/run.erb
|
|
239
|
+
- sv/run.erb
|
|
222
240
|
- views/_service_action.haml
|
|
223
241
|
- views/_service_info.haml
|
|
224
242
|
- views/_service_signal.haml
|
|
@@ -229,10 +247,6 @@ files:
|
|
|
229
247
|
- views/log.haml
|
|
230
248
|
- views/log_downloads.haml
|
|
231
249
|
- views/view_file.haml
|
|
232
|
-
- i18n/en.yml
|
|
233
|
-
- i18n/ru.yml
|
|
234
|
-
- sv/log/run.erb
|
|
235
|
-
- sv/run.erb
|
|
236
250
|
has_rdoc: true
|
|
237
251
|
homepage: https://github.com/Undev/runit-man
|
|
238
252
|
licenses: []
|
|
@@ -267,5 +281,6 @@ rubygems_version: 1.5.2
|
|
|
267
281
|
signing_key:
|
|
268
282
|
specification_version: 3
|
|
269
283
|
summary: Runit web management tool.
|
|
270
|
-
test_files:
|
|
271
|
-
|
|
284
|
+
test_files:
|
|
285
|
+
- spec/functional/runit-man_spec.rb
|
|
286
|
+
- spec/spec_helper.rb
|