runit-man 1.9.8 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/i18n/en.yml +9 -0
- data/i18n/ru.yml +9 -0
- data/lib/runit-man/app.rb +20 -2
- data/lib/runit-man/helpers.rb +26 -0
- data/lib/runit-man/service_info.rb +26 -0
- data/views/_service_info.erubis +1 -0
- data/views/layout.erubis +2 -0
- data/views/log.erubis +3 -1
- data/views/log_downloads.erubis +24 -0
- metadata +8 -17
data/i18n/en.yml
CHANGED
@@ -53,6 +53,15 @@ runit:
|
|
53
53
|
updated: "Page updated at %1"
|
54
54
|
reload: Reload
|
55
55
|
raw: Raw
|
56
|
+
downloads: Log downloads
|
57
|
+
download: Download
|
58
|
+
modified: Last modified
|
59
|
+
file_name: File name
|
60
|
+
file_size: File size
|
61
|
+
b: b
|
62
|
+
Kb: Kb
|
63
|
+
Mb: Mb
|
64
|
+
Gb: Gb
|
56
65
|
view_file:
|
57
66
|
raw: Raw
|
58
67
|
title: 'File %1 on %2'
|
data/i18n/ru.yml
CHANGED
@@ -55,6 +55,15 @@ runit:
|
|
55
55
|
updated: "Страница обновлена %1"
|
56
56
|
reload: Обновить страницу
|
57
57
|
raw: Текст
|
58
|
+
downloads: Загрузка логов
|
59
|
+
download: Скачать
|
60
|
+
modified: Последнее изменение
|
61
|
+
file_name: Имя файла
|
62
|
+
file_size: Размер файла
|
63
|
+
b: б
|
64
|
+
Kb: Кб
|
65
|
+
Mb: Мб
|
66
|
+
Gb: Гб
|
58
67
|
view_file:
|
59
68
|
raw: Текст
|
60
69
|
title: 'Файл %1 на %2'
|
data/lib/runit-man/app.rb
CHANGED
@@ -33,6 +33,7 @@ class RunitMan < Sinatra::Base
|
|
33
33
|
end
|
34
34
|
|
35
35
|
before do
|
36
|
+
@scripts = []
|
36
37
|
base_content_type = CONTENT_TYPES.keys.detect do |t|
|
37
38
|
request.env['REQUEST_URI'] =~ /\.#{Regexp.escape(t.to_s)}$/
|
38
39
|
end || :html
|
@@ -70,11 +71,29 @@ class RunitMan < Sinatra::Base
|
|
70
71
|
get %r[^/([^/]+)/log(?:/(\d+))?/?$] do |name, count|
|
71
72
|
data = log_of_service(name, count)
|
72
73
|
return not_found if data.nil?
|
73
|
-
@scripts = []
|
74
74
|
@title = t.runit.services.log.title(h(name), h(host_name), h(count), h(data[:log_location]))
|
75
75
|
erubis :log, :locals => data
|
76
76
|
end
|
77
77
|
|
78
|
+
get %r[^/([^/]+)/log\-downloads/?$] do |name|
|
79
|
+
srv = ServiceInfo[name]
|
80
|
+
return not_found if srv.nil? || !srv.logged?
|
81
|
+
erubis :log_downloads, :locals => {
|
82
|
+
:name => name,
|
83
|
+
:files => srv.log_files
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
get %r[^/([^/]+)/log\-download/(.+)$] do |name, file_name|
|
88
|
+
srv = ServiceInfo[name]
|
89
|
+
return not_found if srv.nil? || !srv.logged?
|
90
|
+
f = srv.log_files.detect { |f| f[:name] == file_name }
|
91
|
+
return not_found unless f
|
92
|
+
send_file(srv.log_file_path(file_name), :type => 'text/plain', :disposition => 'attachment', :filename => "#{name}-#{file_name}.txt", :last_modified => f[:modified].httpdate)
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
|
78
97
|
get %r[^/([^/]+)/log(?:/(\d+))?\.txt$] do |name, count|
|
79
98
|
data = log_of_service(name, count)
|
80
99
|
return not_found if data.nil?
|
@@ -98,7 +117,6 @@ class RunitMan < Sinatra::Base
|
|
98
117
|
if data.nil?
|
99
118
|
return not_found
|
100
119
|
end
|
101
|
-
@scripts = []
|
102
120
|
@title = t.runit.view_file.title(h(data[:name]), h(host_name))
|
103
121
|
content_type CONTENT_TYPES[:html], :charset => 'utf-8'
|
104
122
|
erubis :view_file, :locals => data
|
data/lib/runit-man/helpers.rb
CHANGED
@@ -68,11 +68,37 @@ module Helpers
|
|
68
68
|
"<a#{hint}#{blank} href=\"/#{h(name)}/log#{ (count != 100) ? "/#{count}" : '' }#{ raw ? '.txt' : '' }#footer\">#{h(title)}</a>"
|
69
69
|
end
|
70
70
|
|
71
|
+
def log_downloads_link(name)
|
72
|
+
"<a target=\"_blank\" href=\"/#{h(name)}/log-downloads\/\">#{h(t.runit.services.log.downloads)}…</a>"
|
73
|
+
end
|
74
|
+
|
71
75
|
def even_or_odd
|
72
76
|
self.even_or_odd_state = !even_or_odd_state
|
73
77
|
even_or_odd_state
|
74
78
|
end
|
75
79
|
|
80
|
+
KILOBYTE = 1024
|
81
|
+
MEGABYTE = 1024 * KILOBYTE
|
82
|
+
GIGABYTE = 1024 * MEGABYTE
|
83
|
+
|
84
|
+
def human_bytes(bytes)
|
85
|
+
sign = (bytes >= 0) ? '' : '-'
|
86
|
+
suffix = 'b'
|
87
|
+
bytes = bytes.abs.to_f
|
88
|
+
if bytes > GIGABYTE
|
89
|
+
bytes /= GIGABYTE
|
90
|
+
suffix = 'Gb'
|
91
|
+
elsif bytes > MEGABYTE
|
92
|
+
bytes /= MEGABYTE
|
93
|
+
suffix = 'Mb'
|
94
|
+
elsif bytes > KILOBYTE
|
95
|
+
bytes /= KILOBYTE
|
96
|
+
suffix = 'Kb'
|
97
|
+
end
|
98
|
+
bytes = ((bytes * 100 + 0.5).to_i.to_f / 100)
|
99
|
+
"#{sign}#{bytes}#{t.runit.services.log[suffix]}"
|
100
|
+
end
|
101
|
+
|
76
102
|
def stat_subst(s)
|
77
103
|
s.split(/\s/).map do |s|
|
78
104
|
if s =~ /(\w+)/ && t.runit.services.table.subst[$1].translated?
|
@@ -2,6 +2,8 @@ require 'runit-man/log_location_cache'
|
|
2
2
|
require 'runit-man/service_status'
|
3
3
|
|
4
4
|
class ServiceInfo
|
5
|
+
SPECIAL_LOG_FILES = %w(lock config).freeze
|
6
|
+
|
5
7
|
attr_reader :name
|
6
8
|
|
7
9
|
def initialize(a_name)
|
@@ -99,6 +101,30 @@ class ServiceInfo
|
|
99
101
|
File.expand_path(rel_path, log_run_folder)
|
100
102
|
end
|
101
103
|
|
104
|
+
def log_file_path(file_name)
|
105
|
+
dir_name = File.dirname(log_file_location)
|
106
|
+
File.expand_path(file_name, dir_name)
|
107
|
+
end
|
108
|
+
|
109
|
+
def log_files
|
110
|
+
r = []
|
111
|
+
dir_name = File.dirname(log_file_location)
|
112
|
+
Dir.foreach(dir_name) do |name|
|
113
|
+
next if ServiceInfo.itself_or_parent?(name)
|
114
|
+
next if SPECIAL_LOG_FILES.include?(name)
|
115
|
+
full_name = File.expand_path(name, dir_name)
|
116
|
+
r << {
|
117
|
+
:name => name,
|
118
|
+
:size => File.size(full_name),
|
119
|
+
:modified => File.mtime(full_name)
|
120
|
+
}
|
121
|
+
end
|
122
|
+
if r.length >= 2
|
123
|
+
r.sort! { |a, b| a[:modified] <=> b[:modified] }
|
124
|
+
end
|
125
|
+
r
|
126
|
+
end
|
127
|
+
|
102
128
|
def send_signal(signal)
|
103
129
|
return unless supervise?
|
104
130
|
File.open(File.join(supervise_folder, 'control'), 'w') do |f|
|
data/views/_service_info.erubis
CHANGED
@@ -28,6 +28,7 @@ need_second_row = !service_info.files_to_view.empty? || !service_info.urls_to_vi
|
|
28
28
|
<td>
|
29
29
|
<% if service_info.logged? %>
|
30
30
|
<%= log_link(service_info.name, :hint => t.runit.services.table.values.log_hint(service_info.name), :blank => true, :title => service_info.log_file_location) %>
|
31
|
+
<%= log_downloads_link(service_info.name) %>
|
31
32
|
<% else %>
|
32
33
|
<%= t.runit.services.table.values.log_absent %>
|
33
34
|
<% end %>
|
data/views/layout.erubis
CHANGED
data/views/log.erubis
CHANGED
@@ -2,7 +2,9 @@
|
|
2
2
|
<%= t.runit.services.log.header(h(name), h(host_name), h(count), h(log_location)) %> | <%= log_link(name, :count => count, :title => t.runit.services.log.raw, :raw => true) %>
|
3
3
|
|
4
4
|
<p>
|
5
|
-
|
5
|
+
<%= t.runit.services.log.counts([100, 250, 500, 1000, 5000].map { |n| log_link(name, :count => n, :title => n) }.join(' ')) %>
|
6
|
+
<%= log_downloads_link(name) %>
|
7
|
+
|
6
8
|
</p>
|
7
9
|
<pre><%= h(text) %></pre>
|
8
10
|
<% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<% content_for :content do %>
|
2
|
+
<h2><%= h(name) %></h2>
|
3
|
+
<h3><%= h(t.runit.services.log.downloads) %></h3>
|
4
|
+
<table>
|
5
|
+
<caption><%= h(name + ': ' + t.runit.services.log.downloads) %></caption>
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th><%= h(t.runit.services.log.modified) %></th>
|
9
|
+
<th><%= h(t.runit.services.log.file_name) %></th>
|
10
|
+
<th><%= h(t.runit.services.log.file_size) %></th>
|
11
|
+
<th></th>
|
12
|
+
</tr>
|
13
|
+
</thead>
|
14
|
+
<tbody>
|
15
|
+
<% files.each do |f| %>
|
16
|
+
<tr class="<%= even_or_odd ? 'even' : 'odd' %>">
|
17
|
+
<td title="<%= h(l(f[:modified], :full)) %>"><%= h(l(f[:modified], :human)) %></td>
|
18
|
+
<td><%= h(f[:name]) %></td>
|
19
|
+
<td title="<%= h(f[:size]) %>"><%= h(human_bytes(f[:size])) %></td>
|
20
|
+
<td><a href="/<%= h(name) %>/log-download/<%= h(f[:name]) %>"><%= h(t.runit.services.log.download) %>…</a></td>
|
21
|
+
</tr>
|
22
|
+
<% end %>
|
23
|
+
</tbody>
|
24
|
+
<% end %>
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runit-man
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 35
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
7
|
+
- 10
|
8
|
+
- 0
|
9
|
+
version: 1.10.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Akzhan Abdulin
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-02-
|
17
|
+
date: 2011-02-07 00:00:00 +03:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
@@ -40,7 +38,6 @@ dependencies:
|
|
40
38
|
requirements:
|
41
39
|
- - ">="
|
42
40
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
41
|
segments:
|
45
42
|
- 0
|
46
43
|
version: "0"
|
@@ -54,7 +51,6 @@ dependencies:
|
|
54
51
|
requirements:
|
55
52
|
- - ">="
|
56
53
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 13
|
58
54
|
segments:
|
59
55
|
- 1
|
60
56
|
- 1
|
@@ -69,10 +65,11 @@ dependencies:
|
|
69
65
|
requirements:
|
70
66
|
- - ">="
|
71
67
|
- !ruby/object:Gem::Version
|
72
|
-
hash: 3
|
73
68
|
segments:
|
74
69
|
- 0
|
75
|
-
|
70
|
+
- 2
|
71
|
+
- 4
|
72
|
+
version: 0.2.4
|
76
73
|
type: :runtime
|
77
74
|
version_requirements: *id004
|
78
75
|
- !ruby/object:Gem::Dependency
|
@@ -83,7 +80,6 @@ dependencies:
|
|
83
80
|
requirements:
|
84
81
|
- - ">="
|
85
82
|
- !ruby/object:Gem::Version
|
86
|
-
hash: 11
|
87
83
|
segments:
|
88
84
|
- 0
|
89
85
|
- 4
|
@@ -99,7 +95,6 @@ dependencies:
|
|
99
95
|
requirements:
|
100
96
|
- - ">="
|
101
97
|
- !ruby/object:Gem::Version
|
102
|
-
hash: 3
|
103
98
|
segments:
|
104
99
|
- 0
|
105
100
|
version: "0"
|
@@ -113,7 +108,6 @@ dependencies:
|
|
113
108
|
requirements:
|
114
109
|
- - ">="
|
115
110
|
- !ruby/object:Gem::Version
|
116
|
-
hash: 3
|
117
111
|
segments:
|
118
112
|
- 0
|
119
113
|
version: "0"
|
@@ -127,7 +121,6 @@ dependencies:
|
|
127
121
|
requirements:
|
128
122
|
- - ">="
|
129
123
|
- !ruby/object:Gem::Version
|
130
|
-
hash: 3
|
131
124
|
segments:
|
132
125
|
- 0
|
133
126
|
version: "0"
|
@@ -141,7 +134,6 @@ dependencies:
|
|
141
134
|
requirements:
|
142
135
|
- - ">="
|
143
136
|
- !ruby/object:Gem::Version
|
144
|
-
hash: 3
|
145
137
|
segments:
|
146
138
|
- 0
|
147
139
|
version: "0"
|
@@ -184,6 +176,7 @@ files:
|
|
184
176
|
- views/index.erubis
|
185
177
|
- views/layout.erubis
|
186
178
|
- views/log.erubis
|
179
|
+
- views/log_downloads.erubis
|
187
180
|
- views/view_file.erubis
|
188
181
|
- i18n/en.yml
|
189
182
|
- i18n/ru.yml
|
@@ -203,7 +196,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
203
196
|
requirements:
|
204
197
|
- - ">="
|
205
198
|
- !ruby/object:Gem::Version
|
206
|
-
hash: 3
|
207
199
|
segments:
|
208
200
|
- 0
|
209
201
|
version: "0"
|
@@ -212,7 +204,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
204
|
requirements:
|
213
205
|
- - ">="
|
214
206
|
- !ruby/object:Gem::Version
|
215
|
-
hash: 3
|
216
207
|
segments:
|
217
208
|
- 0
|
218
209
|
version: "0"
|