runit-man 2.3.21 → 2.4.0a1
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/lib/runit-man/app.rb +47 -17
 - data/lib/runit-man/helpers.rb +5 -0
 - data/lib/runit-man/log_location_cache/base.rb +19 -7
 - data/lib/runit-man/log_location_cache/logger.rb +7 -3
 - data/lib/runit-man/log_location_cache/svlogd.rb +4 -1
 - data/lib/runit-man/service_info/base.rb +22 -10
 - data/lib/runit-man/service_info/logger.rb +30 -24
 - data/lib/runit-man/service_info/svlogd.rb +1 -4
 - data/lib/runit-man/service_status.rb +9 -7
 - data/lib/runit-man/utils.rb +1 -0
 - data/lib/runit-man/version.rb +1 -1
 - metadata +14 -10
 
    
        data/lib/runit-man/app.rb
    CHANGED
    
    | 
         @@ -53,17 +53,21 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
              def self.setup_i18n_files
         
     | 
| 
       55 
55 
     | 
    
         
             
                files = []
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
       56 
57 
     | 
    
         
             
                Dir.glob("#{i18n_location}/*.yml") do |full_path|
         
     | 
| 
       57 
     | 
    
         
            -
                  next 
     | 
| 
      
 58 
     | 
    
         
            +
                  next  unless File.file?(full_path)
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       58 
60 
     | 
    
         
             
                  files << full_path
         
     | 
| 
       59 
61 
     | 
    
         
             
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       60 
63 
     | 
    
         
             
                I18n.load_path = files
         
     | 
| 
       61 
64 
     | 
    
         
             
                I18n.reload!
         
     | 
| 
       62 
     | 
    
         
            -
                nil 
     | 
| 
      
 65 
     | 
    
         
            +
                nil
         
     | 
| 
       63 
66 
     | 
    
         
             
              end
         
     | 
| 
       64 
67 
     | 
    
         | 
| 
       65 
68 
     | 
    
         
             
              configure do
         
     | 
| 
       66 
69 
     | 
    
         
             
                RunitMan::App.setup_i18n_files
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
       67 
71 
     | 
    
         
             
                haml_options = { :ugly => true }
         
     | 
| 
       68 
72 
     | 
    
         
             
                haml_options[:encoding] = 'utf-8' if defined?(Encoding)
         
     | 
| 
       69 
73 
     | 
    
         
             
                set :haml, haml_options
         
     | 
| 
         @@ -76,16 +80,20 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       76 
80 
     | 
    
         
             
                else
         
     | 
| 
       77 
81 
     | 
    
         
             
                  ServiceInfo.klass = ServiceInfo::Logger
         
     | 
| 
       78 
82 
     | 
    
         
             
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
       79 
84 
     | 
    
         
             
                @read_write_mode = RunitMan::App.read_write_mode
         
     | 
| 
       80 
85 
     | 
    
         
             
                @scripts = []
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
       81 
87 
     | 
    
         
             
                base_content_type = CONTENT_TYPES.keys.detect do |t|
         
     | 
| 
       82 
88 
     | 
    
         
             
                  request.env['REQUEST_URI'] =~ /\.#{Regexp.escape(t.to_s)}$/
         
     | 
| 
       83 
89 
     | 
    
         
             
                end || :html
         
     | 
| 
       84 
90 
     | 
    
         
             
                content_type CONTENT_TYPES[base_content_type], :charset => 'utf-8'
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
       85 
92 
     | 
    
         
             
                headers({
         
     | 
| 
       86 
93 
     | 
    
         
             
                  'X-Powered-By' => 'runit-man',
         
     | 
| 
       87 
94 
     | 
    
         
             
                  'X-Version' => RunitMan::VERSION
         
     | 
| 
       88 
95 
     | 
    
         
             
                })
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
       89 
97 
     | 
    
         
             
                parse_language(request.env['HTTP_ACCEPT_LANGUAGE'])
         
     | 
| 
       90 
98 
     | 
    
         
             
              end
         
     | 
| 
       91 
99 
     | 
    
         | 
| 
         @@ -100,6 +108,7 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       100 
108 
     | 
    
         | 
| 
       101 
109 
     | 
    
         
             
              def parse_language(header)
         
     | 
| 
       102 
110 
     | 
    
         
             
                weighted_locales = []
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
       103 
112 
     | 
    
         
             
                if header
         
     | 
| 
       104 
113 
     | 
    
         
             
                  header.split(',').each do |s|
         
     | 
| 
       105 
114 
     | 
    
         
             
                    if s =~ /^(.+)\;q\=(\d(?:\.\d)?)$/
         
     | 
| 
         @@ -109,12 +118,15 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       109 
118 
     | 
    
         
             
                    end
         
     | 
| 
       110 
119 
     | 
    
         
             
                  end
         
     | 
| 
       111 
120 
     | 
    
         
             
                end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
       112 
122 
     | 
    
         
             
                weighted_locales << { :locale => :en, :weight => 0.0 }
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
       113 
124 
     | 
    
         
             
                if weighted_locales.length >= 2
         
     | 
| 
       114 
125 
     | 
    
         
             
                  weighted_locales.sort! do |a, b|
         
     | 
| 
       115 
126 
     | 
    
         
             
                    b[:weight] <=> a[:weight]
         
     | 
| 
       116 
127 
     | 
    
         
             
                  end
         
     | 
| 
       117 
128 
     | 
    
         
             
                end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
       118 
130 
     | 
    
         
             
                locales = weighted_locales.map { |wl| wl[:locale] }
         
     | 
| 
       119 
131 
     | 
    
         
             
                setup_i18n(locales)
         
     | 
| 
       120 
132 
     | 
    
         
             
              end
         
     | 
| 
         @@ -146,7 +158,8 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       146 
158 
     | 
    
         
             
                count = MIN_TAIL if count < MIN_TAIL
         
     | 
| 
       147 
159 
     | 
    
         
             
                count = MAX_TAIL if count > MAX_TAIL
         
     | 
| 
       148 
160 
     | 
    
         
             
                srv   = ServiceInfo.klass[name]
         
     | 
| 
       149 
     | 
    
         
            -
                return nil 
     | 
| 
      
 161 
     | 
    
         
            +
                return nil  if srv.nil? || !srv.logged?
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
       150 
163 
     | 
    
         
             
                text = ''
         
     | 
| 
       151 
164 
     | 
    
         
             
                File::Tail::Logfile.open(srv.log_file_location, :backward => count, :return_if_eof => true) do |log|
         
     | 
| 
       152 
165 
     | 
    
         
             
                  log.tail do |line|
         
     | 
| 
         @@ -171,8 +184,10 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       171 
184 
     | 
    
         
             
                if !request.GET.has_key?('file')
         
     | 
| 
       172 
185 
     | 
    
         
             
                  return nil
         
     | 
| 
       173 
186 
     | 
    
         
             
                end
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
       174 
188 
     | 
    
         
             
                file_path = request.GET['file']
         
     | 
| 
       175 
     | 
    
         
            -
                return nil 
     | 
| 
      
 189 
     | 
    
         
            +
                return nil  unless all_files_to_view.include?(file_path)
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
       176 
191 
     | 
    
         
             
                text = IO.read(file_path)
         
     | 
| 
       177 
192 
     | 
    
         
             
                {
         
     | 
| 
       178 
193 
     | 
    
         
             
                   :name => file_path,
         
     | 
| 
         @@ -182,7 +197,8 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       182 
197 
     | 
    
         | 
| 
       183 
198 
     | 
    
         
             
              get %r[^/([^/]+)/log(?:/(\d+))?/?$] do |name, count|
         
     | 
| 
       184 
199 
     | 
    
         
             
                data = log_of_service(name, count, nil)
         
     | 
| 
       185 
     | 
    
         
            -
                return not_found 
     | 
| 
      
 200 
     | 
    
         
            +
                return not_found  if data.nil?
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
       186 
202 
     | 
    
         
             
                @title = t('runit.services.log.title', :name => name, :host => host_name, :count => count)
         
     | 
| 
       187 
203 
     | 
    
         
             
                haml :log, :locals => data
         
     | 
| 
       188 
204 
     | 
    
         
             
              end
         
     | 
| 
         @@ -193,15 +209,19 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       193 
209 
     | 
    
         
             
                else
         
     | 
| 
       194 
210 
     | 
    
         
             
                  count, no = nil, d1
         
     | 
| 
       195 
211 
     | 
    
         
             
                end
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
       196 
213 
     | 
    
         
             
                no = no.to_i
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
       197 
215 
     | 
    
         
             
                data = log_of_service(name, count, no)
         
     | 
| 
       198 
     | 
    
         
            -
                return not_found 
     | 
| 
      
 216 
     | 
    
         
            +
                return not_found  if data.nil?
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
       199 
218 
     | 
    
         
             
                data[:logs][no][:text]
         
     | 
| 
       200 
219 
     | 
    
         
             
              end
         
     | 
| 
       201 
220 
     | 
    
         | 
| 
       202 
221 
     | 
    
         
             
              get %r[^/([^/]+)/log\-downloads/?$] do |name|
         
     | 
| 
       203 
222 
     | 
    
         
             
                srv = ServiceInfo.klass[name]
         
     | 
| 
       204 
     | 
    
         
            -
                return not_found 
     | 
| 
      
 223 
     | 
    
         
            +
                return not_found  if srv.nil? || !srv.logged?
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
       205 
225 
     | 
    
         
             
                haml :log_downloads, :locals => {
         
     | 
| 
       206 
226 
     | 
    
         
             
                  :name  => name,
         
     | 
| 
       207 
227 
     | 
    
         
             
                  :files => srv.log_files
         
     | 
| 
         @@ -210,17 +230,18 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       210 
230 
     | 
    
         | 
| 
       211 
231 
     | 
    
         
             
              get %r[^/([^/]+)/log\-download/(.+)$] do |name, file_name|
         
     | 
| 
       212 
232 
     | 
    
         
             
                srv = ServiceInfo.klass[name]
         
     | 
| 
       213 
     | 
    
         
            -
                return not_found 
     | 
| 
      
 233 
     | 
    
         
            +
                return not_found  if srv.nil? || !srv.logged?
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
       214 
235 
     | 
    
         
             
                f = srv.log_files.detect { |f| f[:name] == file_name }
         
     | 
| 
       215 
     | 
    
         
            -
                return not_found 
     | 
| 
      
 236 
     | 
    
         
            +
                return not_found  unless f
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
       216 
238 
     | 
    
         
             
                send_file(srv.log_file_path(file_name), :type => 'text/plain', :disposition => 'attachment', :filename => f[:label], :last_modified => f[:modified].httpdate)
         
     | 
| 
       217 
239 
     | 
    
         
             
              end
         
     | 
| 
       218 
240 
     | 
    
         | 
| 
       219 
241 
     | 
    
         
             
              get '/view' do
         
     | 
| 
       220 
242 
     | 
    
         
             
                data = data_of_file_view(request)
         
     | 
| 
       221 
     | 
    
         
            -
                if data.nil?
         
     | 
| 
       222 
     | 
    
         
            -
             
     | 
| 
       223 
     | 
    
         
            -
                end
         
     | 
| 
      
 243 
     | 
    
         
            +
                return not_found  if data.nil?
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
       224 
245 
     | 
    
         
             
                @title = t('runit.view_file.title', :file => data[:name], :host => host_name)
         
     | 
| 
       225 
246 
     | 
    
         
             
                content_type CONTENT_TYPES[:html], :charset => 'utf-8'
         
     | 
| 
       226 
247 
     | 
    
         
             
                haml :view_file, :locals => data 
         
     | 
| 
         @@ -228,9 +249,8 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       228 
249 
     | 
    
         | 
| 
       229 
250 
     | 
    
         
             
              get '/view.txt' do
         
     | 
| 
       230 
251 
     | 
    
         
             
                data = data_of_file_view(request)
         
     | 
| 
       231 
     | 
    
         
            -
                if data.nil?
         
     | 
| 
       232 
     | 
    
         
            -
             
     | 
| 
       233 
     | 
    
         
            -
                end
         
     | 
| 
      
 252 
     | 
    
         
            +
                return not_found  if data.nil?
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
       234 
254 
     | 
    
         
             
                content_type CONTENT_TYPES[:txt], :charset => 'utf-8'
         
     | 
| 
       235 
255 
     | 
    
         
             
                data[:text]
         
     | 
| 
       236 
256 
     | 
    
         
             
              end
         
     | 
| 
         @@ -248,7 +268,8 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       248 
268 
     | 
    
         
             
              post '/:name/signal/:signal' do |name, signal|
         
     | 
| 
       249 
269 
     | 
    
         
             
                unless readonly?
         
     | 
| 
       250 
270 
     | 
    
         
             
                  service = ServiceInfo.klass[name]
         
     | 
| 
       251 
     | 
    
         
            -
                  return not_found 
     | 
| 
      
 271 
     | 
    
         
            +
                  return not_found  if service.nil?
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
       252 
273 
     | 
    
         
             
                  service.send_signal(signal)
         
     | 
| 
       253 
274 
     | 
    
         
             
                  log_action(name, "send signal \"#{signal}\"")
         
     | 
| 
       254 
275 
     | 
    
         
             
                else
         
     | 
| 
         @@ -261,7 +282,8 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       261 
282 
     | 
    
         
             
                unless readonly?
         
     | 
| 
       262 
283 
     | 
    
         
             
                  service = ServiceInfo.klass[name]
         
     | 
| 
       263 
284 
     | 
    
         
             
                  action = "#{action}!".to_sym
         
     | 
| 
       264 
     | 
    
         
            -
                  return not_found 
     | 
| 
      
 285 
     | 
    
         
            +
                  return not_found  if service.nil? || !service.respond_to?(action)
         
     | 
| 
      
 286 
     | 
    
         
            +
             
     | 
| 
       265 
287 
     | 
    
         
             
                  service.send(action)
         
     | 
| 
       266 
288 
     | 
    
         
             
                  log_action(name, action)
         
     | 
| 
       267 
289 
     | 
    
         
             
                else
         
     | 
| 
         @@ -288,14 +310,18 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       288 
310 
     | 
    
         
             
                  active_r_dir = File.join(RunitMan::App.active_services_directory, 'runit-man')
         
     | 
| 
       289 
311 
     | 
    
         
             
                  my_dir       = File.join(GEM_FOLDER, 'sv')
         
     | 
| 
       290 
312 
     | 
    
         
             
                  log_dir      = File.join(all_r_dir, 'log')
         
     | 
| 
      
 313 
     | 
    
         
            +
             
     | 
| 
       291 
314 
     | 
    
         
             
                  if File.symlink?(all_r_dir)
         
     | 
| 
       292 
315 
     | 
    
         
             
                    File.unlink(all_r_dir)
         
     | 
| 
       293 
316 
     | 
    
         
             
                  end
         
     | 
| 
      
 317 
     | 
    
         
            +
             
     | 
| 
       294 
318 
     | 
    
         
             
                  unless File.directory?(all_r_dir)
         
     | 
| 
       295 
319 
     | 
    
         
             
                    FileUtils.mkdir_p(log_dir)
         
     | 
| 
       296 
320 
     | 
    
         
             
                    create_log_run_script(all_r_dir)
         
     | 
| 
       297 
321 
     | 
    
         
             
                  end
         
     | 
| 
      
 322 
     | 
    
         
            +
             
     | 
| 
       298 
323 
     | 
    
         
             
                  create_run_script(all_r_dir)
         
     | 
| 
      
 324 
     | 
    
         
            +
             
     | 
| 
       299 
325 
     | 
    
         
             
                  unless File.symlink?(active_r_dir)
         
     | 
| 
       300 
326 
     | 
    
         
             
                    File.symlink(all_r_dir, active_r_dir)
         
     | 
| 
       301 
327 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -340,9 +366,11 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       340 
366 
     | 
    
         
             
                  auth                      = RunitMan::App.allowed_users
         
     | 
| 
       341 
367 
     | 
    
         
             
                  rackup_command_line       = RunitMan::App.rackup_command_line
         
     | 
| 
       342 
368 
     | 
    
         
             
                  read_write_mode           = RunitMan::App.read_write_mode.to_s
         
     | 
| 
      
 369 
     | 
    
         
            +
             
     | 
| 
       343 
370 
     | 
    
         
             
                  File.open(script_name, 'w') do |script_source|
         
     | 
| 
       344 
371 
     | 
    
         
             
                    script_source.print ERB.new(IO.read(template_name)).result(binding())
         
     | 
| 
       345 
372 
     | 
    
         
             
                  end
         
     | 
| 
      
 373 
     | 
    
         
            +
             
     | 
| 
       346 
374 
     | 
    
         
             
                  File.chmod(0755, script_name)
         
     | 
| 
       347 
375 
     | 
    
         
             
                end
         
     | 
| 
       348 
376 
     | 
    
         | 
| 
         @@ -351,9 +379,11 @@ class RunitMan::App < Sinatra::Base 
     | 
|
| 
       351 
379 
     | 
    
         
             
                  script_name   = File.join(dir, 'log', 'run')
         
     | 
| 
       352 
380 
     | 
    
         
             
                  template_name = File.join(GEM_FOLDER, 'sv', 'log', 'run.erb')
         
     | 
| 
       353 
381 
     | 
    
         
             
                  logger        = RunitMan::App.runit_logger
         
     | 
| 
      
 382 
     | 
    
         
            +
             
     | 
| 
       354 
383 
     | 
    
         
             
                  File.open(script_name, 'w') do |script_source|
         
     | 
| 
       355 
384 
     | 
    
         
             
                    script_source.print ERB.new(IO.read(template_name)).result(binding())
         
     | 
| 
       356 
385 
     | 
    
         
             
                  end
         
     | 
| 
      
 386 
     | 
    
         
            +
             
     | 
| 
       357 
387 
     | 
    
         
             
                  File.chmod(0755, script_name)
         
     | 
| 
       358 
388 
     | 
    
         
             
                end
         
     | 
| 
       359 
389 
     | 
    
         
             
              end
         
     | 
    
        data/lib/runit-man/helpers.rb
    CHANGED
    
    | 
         @@ -72,6 +72,7 @@ module Helpers 
     | 
|
| 
       72 
72 
     | 
    
         
             
                id    = options[:id] || false
         
     | 
| 
       73 
73 
     | 
    
         
             
                hint  = " title=\"#{h(hint)}\"" unless hint.empty?
         
     | 
| 
       74 
74 
     | 
    
         
             
                blank = blank ? ' target="_blank"' : ''
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
       75 
76 
     | 
    
         
             
                "<a#{hint}#{blank} href=\"/#{name}/log#{ (count != 100) ? "/#{count}" : '' }#{ id ? "/#{id}" : ''  }#{ raw ? '.txt' : '' }#footer\">#{h(title)}</a>"
         
     | 
| 
       76 
77 
     | 
    
         
             
              end
         
     | 
| 
       77 
78 
     | 
    
         | 
| 
         @@ -92,6 +93,7 @@ module Helpers 
     | 
|
| 
       92 
93 
     | 
    
         
             
                sign = (bytes >= 0) ? '' : '-'
         
     | 
| 
       93 
94 
     | 
    
         
             
                suffix = 'b'
         
     | 
| 
       94 
95 
     | 
    
         
             
                bytes = bytes.abs.to_f
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
       95 
97 
     | 
    
         
             
                if bytes > GIGABYTE
         
     | 
| 
       96 
98 
     | 
    
         
             
                  bytes /= GIGABYTE
         
     | 
| 
       97 
99 
     | 
    
         
             
                  suffix = 'Gb'
         
     | 
| 
         @@ -102,7 +104,9 @@ module Helpers 
     | 
|
| 
       102 
104 
     | 
    
         
             
                  bytes /= KILOBYTE
         
     | 
| 
       103 
105 
     | 
    
         
             
                  suffix = 'Kb'
         
     | 
| 
       104 
106 
     | 
    
         
             
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
       105 
108 
     | 
    
         
             
                bytes = ((bytes * 100 + 0.5).to_i.to_f / 100)
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
       106 
110 
     | 
    
         
             
                "#{sign}#{bytes}#{t("runit.services.log.#{suffix}")}"
         
     | 
| 
       107 
111 
     | 
    
         
             
              end
         
     | 
| 
       108 
112 
     | 
    
         | 
| 
         @@ -110,6 +114,7 @@ module Helpers 
     | 
|
| 
       110 
114 
     | 
    
         
             
                s.split(/\s/).map do |s|
         
     | 
| 
       111 
115 
     | 
    
         
             
                  if s =~ /(\w+)/
         
     | 
| 
       112 
116 
     | 
    
         
             
                    word = $1
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
       113 
118 
     | 
    
         
             
                    if t("runit.services.table.subst.#{word}") !~ /translation missing/
         
     | 
| 
       114 
119 
     | 
    
         
             
                      s.sub(word, t("runit.services.table.subst.#{word}"))
         
     | 
| 
       115 
120 
     | 
    
         
             
                    else
         
     | 
| 
         @@ -13,12 +13,15 @@ class LogLocationCache::Base 
     | 
|
| 
       13 
13 
     | 
    
         
             
              def [](pid)
         
     | 
| 
       14 
14 
     | 
    
         
             
                pid = pid.to_i
         
     | 
| 
       15 
15 
     | 
    
         
             
                loc = nil
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       16 
17 
     | 
    
         
             
                unless pids.include?(pid)
         
     | 
| 
       17 
18 
     | 
    
         
             
                  loc = get_pid_location(pid)
         
     | 
| 
       18 
19 
     | 
    
         
             
                  set_pid_log_location(pid, loc)
         
     | 
| 
       19 
20 
     | 
    
         
             
                end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                return  
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                return loc  unless loc.nil?
         
     | 
| 
      
 23 
     | 
    
         
            +
                return nil  unless pids.include?(pid)
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       22 
25 
     | 
    
         
             
                pids[pid][:value]
         
     | 
| 
       23 
26 
     | 
    
         
             
              end
         
     | 
| 
       24 
27 
     | 
    
         | 
| 
         @@ -40,6 +43,7 @@ protected 
     | 
|
| 
       40 
43 
     | 
    
         
             
                  self.query_counter = 0
         
     | 
| 
       41 
44 
     | 
    
         
             
                  self.pids = {}
         
     | 
| 
       42 
45 
     | 
    
         
             
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
       43 
47 
     | 
    
         
             
                self
         
     | 
| 
       44 
48 
     | 
    
         
             
              end
         
     | 
| 
       45 
49 
     | 
    
         | 
| 
         @@ -49,21 +53,26 @@ protected 
     | 
|
| 
       49 
53 
     | 
    
         
             
                  if query_counter < 10
         
     | 
| 
       50 
54 
     | 
    
         
             
                    return
         
     | 
| 
       51 
55 
     | 
    
         
             
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
       52 
57 
     | 
    
         
             
                  self.query_counter = 0
         
     | 
| 
       53 
58 
     | 
    
         
             
                  limit = Time.now - TIME_LIMIT
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       54 
60 
     | 
    
         
             
                  pids.keys.each do |pid|
         
     | 
| 
       55 
61 
     | 
    
         
             
                    if pids[pid][:time] < limit
         
     | 
| 
       56 
62 
     | 
    
         
             
                      pids.delete(pid)
         
     | 
| 
       57 
63 
     | 
    
         
             
                    end
         
     | 
| 
       58 
64 
     | 
    
         
             
                  end
         
     | 
| 
       59 
65 
     | 
    
         
             
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
       60 
67 
     | 
    
         
             
                self
         
     | 
| 
       61 
68 
     | 
    
         
             
              end
         
     | 
| 
       62 
69 
     | 
    
         | 
| 
       63 
70 
     | 
    
         
             
              def log_command(lpid)
         
     | 
| 
       64 
     | 
    
         
            -
                return nil 
     | 
| 
      
 71 
     | 
    
         
            +
                return nil  if lpid.nil?
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
       65 
73 
     | 
    
         
             
                ps_output = `ps -o args -p #{lpid} 2>&1`.split("\n")
         
     | 
| 
       66 
     | 
    
         
            -
                return nil 
     | 
| 
      
 74 
     | 
    
         
            +
                return nil  if ps_output.length < 2
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
       67 
76 
     | 
    
         
             
                cmd = ps_output[1].chomp
         
     | 
| 
       68 
77 
     | 
    
         
             
                cmd != '' ? cmd : nil
         
     | 
| 
       69 
78 
     | 
    
         
             
              end
         
     | 
| 
         @@ -74,15 +83,18 @@ protected 
     | 
|
| 
       74 
83 
     | 
    
         | 
| 
       75 
84 
     | 
    
         
             
              def log_command_args(lpid)
         
     | 
| 
       76 
85 
     | 
    
         
             
                cmd = log_command(lpid)
         
     | 
| 
       77 
     | 
    
         
            -
                return nil 
     | 
| 
      
 86 
     | 
    
         
            +
                return nil  if cmd.nil?
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
       78 
88 
     | 
    
         
             
                args = cmd.split(/\s+/).select { |arg| arg !~ /^\-/ }
         
     | 
| 
       79 
     | 
    
         
            -
                return nil 
     | 
| 
      
 89 
     | 
    
         
            +
                return nil  if args.shift !~ /#{Regexp.escape(logger_name)}/
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       80 
91 
     | 
    
         
             
                args
         
     | 
| 
       81 
92 
     | 
    
         
             
              end
         
     | 
| 
       82 
93 
     | 
    
         | 
| 
       83 
94 
     | 
    
         
             
              def log_folder_base_name(lpid)
         
     | 
| 
       84 
95 
     | 
    
         
             
                args = log_command_args(lpid)
         
     | 
| 
       85 
     | 
    
         
            -
                return nil 
     | 
| 
      
 96 
     | 
    
         
            +
                return nil  if args.nil?
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
       86 
98 
     | 
    
         
             
                result = args.first
         
     | 
| 
       87 
99 
     | 
    
         
             
                result
         
     | 
| 
       88 
100 
     | 
    
         
             
              end
         
     | 
| 
         @@ -11,12 +11,14 @@ protected 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              def get_pid_location(lpid)
         
     | 
| 
       13 
13 
     | 
    
         
             
                folder = log_folder(lpid)
         
     | 
| 
       14 
     | 
    
         
            -
                return 
     | 
| 
      
 14 
     | 
    
         
            +
                return  nil if folder.nil?
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       15 
16 
     | 
    
         
             
                loc = File.join(folder, Time.now.strftime('%Y-%m-%d'), "#{log_folder_base_name(lpid)}.log")
         
     | 
| 
       16 
17 
     | 
    
         
             
                unless File.exists?(loc)
         
     | 
| 
       17 
18 
     | 
    
         
             
                  loc = "#{loc}.gz"
         
     | 
| 
       18 
     | 
    
         
            -
                  loc = nil 
     | 
| 
      
 19 
     | 
    
         
            +
                  loc = nil  unless File.exists?(loc)
         
     | 
| 
       19 
20 
     | 
    
         
             
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
       20 
22 
     | 
    
         
             
                loc
         
     | 
| 
       21 
23 
     | 
    
         
             
              end
         
     | 
| 
       22 
24 
     | 
    
         | 
| 
         @@ -44,8 +46,10 @@ protected 
     | 
|
| 
       44 
46 
     | 
    
         | 
| 
       45 
47 
     | 
    
         
             
              def log_folder_base_name(lpid)
         
     | 
| 
       46 
48 
     | 
    
         
             
                result = super(lpid)
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
       47 
50 
     | 
    
         
             
                # we should remove : from the end of the line for logger installations.
         
     | 
| 
       48 
     | 
    
         
            -
                result = $1  
     | 
| 
      
 51 
     | 
    
         
            +
                result = $1  if result =~ /^(.+)\:$/
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
       49 
53 
     | 
    
         
             
                result
         
     | 
| 
       50 
54 
     | 
    
         
             
              end
         
     | 
| 
       51 
55 
     | 
    
         
             
            end
         
     | 
| 
         @@ -5,7 +5,8 @@ class LogLocationCache::Svlogd < LogLocationCache::Base 
     | 
|
| 
       5 
5 
     | 
    
         
             
            protected
         
     | 
| 
       6 
6 
     | 
    
         
             
              def get_pid_location(lpid)
         
     | 
| 
       7 
7 
     | 
    
         
             
                folder = log_folder(lpid)
         
     | 
| 
       8 
     | 
    
         
            -
                return nil 
     | 
| 
      
 8 
     | 
    
         
            +
                return nil  if folder.nil?
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       9 
10 
     | 
    
         
             
                File.join(folder, 'current')
         
     | 
| 
       10 
11 
     | 
    
         
             
              end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
         @@ -19,12 +20,14 @@ protected 
     | 
|
| 
       19 
20 
     | 
    
         | 
| 
       20 
21 
     | 
    
         
             
              def set_pid_log_location(pid, log_location)
         
     | 
| 
       21 
22 
     | 
    
         
             
                remove_old_values
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       22 
24 
     | 
    
         
             
                monitor.synchronize do
         
     | 
| 
       23 
25 
     | 
    
         
             
                  pids[pid.to_i] = {
         
     | 
| 
       24 
26 
     | 
    
         
             
                    :value => log_location,
         
     | 
| 
       25 
27 
     | 
    
         
             
                    :time  => Time.now
         
     | 
| 
       26 
28 
     | 
    
         
             
                  }
         
     | 
| 
       27 
29 
     | 
    
         
             
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       28 
31 
     | 
    
         
             
                self
         
     | 
| 
       29 
32 
     | 
    
         
             
              end
         
     | 
| 
       30 
33 
     | 
    
         
             
            end
         
     | 
| 
         @@ -101,7 +101,8 @@ class ServiceInfo::Base 
     | 
|
| 
       101 
101 
     | 
    
         | 
| 
       102 
102 
     | 
    
         
             
              def log_file_location
         
     | 
| 
       103 
103 
     | 
    
         
             
                rel_path = ServiceInfo.klass.log_location_cache[log_pid]
         
     | 
| 
       104 
     | 
    
         
            -
                return nil 
     | 
| 
      
 104 
     | 
    
         
            +
                return nil  if rel_path.nil?
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
       105 
106 
     | 
    
         
             
                File.expand_path(rel_path, log_run_folder)
         
     | 
| 
       106 
107 
     | 
    
         
             
              end
         
     | 
| 
       107 
108 
     | 
    
         | 
| 
         @@ -114,14 +115,16 @@ class ServiceInfo::Base 
     | 
|
| 
       114 
115 
     | 
    
         
             
              end
         
     | 
| 
       115 
116 
     | 
    
         | 
| 
       116 
117 
     | 
    
         
             
              def send_signal(signal)
         
     | 
| 
       117 
     | 
    
         
            -
                return 
     | 
| 
      
 118 
     | 
    
         
            +
                return  unless supervise?
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
       118 
120 
     | 
    
         
             
                File.open(File.join(supervise_folder, 'control'), 'w') do |f|
         
     | 
| 
       119 
121 
     | 
    
         
             
                  f.print signal.to_s
         
     | 
| 
       120 
122 
     | 
    
         
             
                end
         
     | 
| 
       121 
123 
     | 
    
         
             
              end
         
     | 
| 
       122 
124 
     | 
    
         | 
| 
       123 
125 
     | 
    
         
             
              def files_to_view
         
     | 
| 
       124 
     | 
    
         
            -
                return [] 
     | 
| 
      
 126 
     | 
    
         
            +
                return []  unless File.directory?(files_to_view_folder)
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
       125 
128 
     | 
    
         
             
                Dir.entries(files_to_view_folder).select do |name|
         
     | 
| 
       126 
129 
     | 
    
         
             
                  File.symlink?(File.join(files_to_view_folder, name))
         
     | 
| 
       127 
130 
     | 
    
         
             
                end.map do |name|
         
     | 
| 
         @@ -135,7 +138,8 @@ class ServiceInfo::Base 
     | 
|
| 
       135 
138 
     | 
    
         
             
              end
         
     | 
| 
       136 
139 
     | 
    
         | 
| 
       137 
140 
     | 
    
         
             
              def urls_to_view
         
     | 
| 
       138 
     | 
    
         
            -
                return [] 
     | 
| 
      
 141 
     | 
    
         
            +
                return []  unless File.directory?(urls_to_view_folder)
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
       139 
143 
     | 
    
         
             
                Dir.entries(urls_to_view_folder).select do |name|
         
     | 
| 
       140 
144 
     | 
    
         
             
                  name =~ /\.url$/ && File.file?(File.join(urls_to_view_folder, name))
         
     | 
| 
       141 
145 
     | 
    
         
             
                end.map do |name|
         
     | 
| 
         @@ -146,7 +150,8 @@ class ServiceInfo::Base 
     | 
|
| 
       146 
150 
     | 
    
         
             
              end
         
     | 
| 
       147 
151 
     | 
    
         | 
| 
       148 
152 
     | 
    
         
             
              def allowed_signals
         
     | 
| 
       149 
     | 
    
         
            -
                return [] 
     | 
| 
      
 153 
     | 
    
         
            +
                return []  unless File.directory?(allowed_signals_folder)
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
       150 
155 
     | 
    
         
             
                Dir.entries(allowed_signals_folder).reject do |name|
         
     | 
| 
       151 
156 
     | 
    
         
             
                  ServiceInfo::Base.itself_or_parent?(name)
         
     | 
| 
       152 
157 
     | 
    
         
             
                end
         
     | 
| 
         @@ -190,12 +195,14 @@ protected 
     | 
|
| 
       190 
195 
     | 
    
         
             
              end
         
     | 
| 
       191 
196 
     | 
    
         | 
| 
       192 
197 
     | 
    
         
             
              def data_from_file(file_name)
         
     | 
| 
       193 
     | 
    
         
            -
                return @files[file_name] 
     | 
| 
      
 198 
     | 
    
         
            +
                return @files[file_name]  if @files.include?(file_name)
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
       194 
200 
     | 
    
         
             
                @files[file_name] = ServiceInfo::Base.real_data_from_file(file_name)
         
     | 
| 
       195 
201 
     | 
    
         
             
              end
         
     | 
| 
       196 
202 
     | 
    
         | 
| 
       197 
203 
     | 
    
         
             
              def sorted_log_files(log_files)
         
     | 
| 
       198 
204 
     | 
    
         
             
                return log_files  if log_files.length < 2
         
     | 
| 
      
 205 
     | 
    
         
            +
             
     | 
| 
       199 
206 
     | 
    
         
             
                log_files.sort { |a, b| a[:created] <=> b[:created] }
         
     | 
| 
       200 
207 
     | 
    
         
             
              end
         
     | 
| 
       201 
208 
     | 
    
         | 
| 
         @@ -211,13 +218,15 @@ protected 
     | 
|
| 
       211 
218 
     | 
    
         
             
                end
         
     | 
| 
       212 
219 
     | 
    
         | 
| 
       213 
220 
     | 
    
         
             
                def real_data_from_file(file_name)
         
     | 
| 
       214 
     | 
    
         
            -
                  return nil 
     | 
| 
      
 221 
     | 
    
         
            +
                  return nil  unless File.readable?(file_name)
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
       215 
223 
     | 
    
         
             
                  if RUBY_VERSION >= '1.9'
         
     | 
| 
       216 
224 
     | 
    
         
             
                    data = IO.read(file_name, :external_encoding => 'ASCII-8BIT')
         
     | 
| 
       217 
225 
     | 
    
         
             
                  else
         
     | 
| 
       218 
226 
     | 
    
         
             
                    data = IO.read(file_name)
         
     | 
| 
       219 
227 
     | 
    
         
             
                  end
         
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
      
 228 
     | 
    
         
            +
             
     | 
| 
      
 229 
     | 
    
         
            +
                  data.chomp!  unless data.nil?
         
     | 
| 
       221 
230 
     | 
    
         
             
                  data.empty? ? nil : data
         
     | 
| 
       222 
231 
     | 
    
         
             
                end
         
     | 
| 
       223 
232 
     | 
    
         | 
| 
         @@ -227,7 +236,8 @@ protected 
     | 
|
| 
       227 
236 
     | 
    
         | 
| 
       228 
237 
     | 
    
         
             
              private
         
     | 
| 
       229 
238 
     | 
    
         
             
                def active_service_names
         
     | 
| 
       230 
     | 
    
         
            -
                  return [] 
     | 
| 
      
 239 
     | 
    
         
            +
                  return []  unless File.directory?(RunitMan::App.active_services_directory)
         
     | 
| 
      
 240 
     | 
    
         
            +
             
     | 
| 
       231 
241 
     | 
    
         
             
                  Dir.entries(RunitMan::App.active_services_directory).reject do |name|
         
     | 
| 
       232 
242 
     | 
    
         
             
                    full_name = File.join(RunitMan::App.active_services_directory, name)
         
     | 
| 
       233 
243 
     | 
    
         
             
                    itself_or_parent?(name) || (!File.symlink?(full_name) && !File.directory?(full_name))
         
     | 
| 
         @@ -235,8 +245,10 @@ protected 
     | 
|
| 
       235 
245 
     | 
    
         
             
                end
         
     | 
| 
       236 
246 
     | 
    
         | 
| 
       237 
247 
     | 
    
         
             
                def inactive_service_names
         
     | 
| 
       238 
     | 
    
         
            -
                  return [] 
     | 
| 
      
 248 
     | 
    
         
            +
                  return []  unless File.directory?(RunitMan::App.all_services_directory)
         
     | 
| 
      
 249 
     | 
    
         
            +
             
     | 
| 
       239 
250 
     | 
    
         
             
                  actives = active_service_names
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
       240 
252 
     | 
    
         
             
                  Dir.entries(RunitMan::App.all_services_directory).reject do |name|
         
     | 
| 
       241 
253 
     | 
    
         
             
                    full_name = File.join(RunitMan::App.all_services_directory, name)
         
     | 
| 
       242 
254 
     | 
    
         
             
                    itself_or_parent?(name) || !File.directory?(full_name) || actives.include?(name)
         
     | 
| 
         @@ -5,37 +5,44 @@ class ServiceInfo::Logger < ServiceInfo::Base 
     | 
|
| 
       5 
5 
     | 
    
         
             
              def log_file_path(file_name)
         
     | 
| 
       6 
6 
     | 
    
         
             
                dir_name = File.dirname(File.dirname(log_file_location))
         
     | 
| 
       7 
7 
     | 
    
         
             
                loc = File.expand_path(File.join(file_name, "#{name}.log"), dir_name)
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                loc =  
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                loc = "#{loc}.gz"  unless File.exists?(loc)
         
     | 
| 
      
 10 
     | 
    
         
            +
                loc = nil  unless File.exists?(loc)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       10 
12 
     | 
    
         
             
                loc
         
     | 
| 
       11 
13 
     | 
    
         
             
              end
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
15 
     | 
    
         
             
              def log_files
         
     | 
| 
       14 
16 
     | 
    
         
             
                lfloc = log_file_location
         
     | 
| 
       15 
17 
     | 
    
         
             
                return []  if lfloc.nil?
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                dir_name = File.expand_path(File.dirname(File.dirname(lfloc)))
         
     | 
| 
      
 20 
     | 
    
         
            +
                return []  unless File.directory?(dir_name)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
       16 
22 
     | 
    
         
             
                r = []
         
     | 
| 
       17 
     | 
    
         
            -
                dir_name  
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                   
     | 
| 
       20 
     | 
    
         
            -
                   
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                     
     | 
| 
       26 
     | 
    
         
            -
                     
     | 
| 
      
 23 
     | 
    
         
            +
                Dir.foreach(dir_name) do |subdirname|
         
     | 
| 
      
 24 
     | 
    
         
            +
                  next  if ServiceInfo::Base.itself_or_parent?(subdirname)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  subdirpath = File.expand_path(subdirname, dir_name)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  next  unless File.directory?(subdirpath)
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  Dir.foreach(subdirpath) do |filename|
         
     | 
| 
      
 29 
     | 
    
         
            +
                    next  if ServiceInfo::Base.itself_or_parent?(filename)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    filepath = File.expand_path(filename, subdirpath)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    label = "#{Utils.host_name}-#{filename}"
         
     | 
| 
      
 32 
     | 
    
         
            +
                    next  unless File.file?(filepath) && File.readable?(filepath)
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    stats = File.stat(file_name)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    stat_times = [stats.ctime.utc, stats.atime.utc, stats.mtime.utc]
         
     | 
| 
      
 36 
     | 
    
         
            +
                    min_time, max_time = stat_times.min, stat_times.max
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    r << {
         
     | 
| 
      
 39 
     | 
    
         
            +
                      :name     => name,
         
     | 
| 
      
 40 
     | 
    
         
            +
                      :label    => label,
         
     | 
| 
      
 41 
     | 
    
         
            +
                      :size     => stats.size,
         
     | 
| 
      
 42 
     | 
    
         
            +
                      :created  => min_time,
         
     | 
| 
      
 43 
     | 
    
         
            +
                      :modified => max_time
         
     | 
| 
      
 44 
     | 
    
         
            +
                    }
         
     | 
| 
       27 
45 
     | 
    
         
             
                  end
         
     | 
| 
       28 
     | 
    
         
            -
                  stats = File.stat(file_name)
         
     | 
| 
       29 
     | 
    
         
            -
                  stat_times = [stats.ctime.utc, stats.atime.utc, stats.mtime.utc]
         
     | 
| 
       30 
     | 
    
         
            -
                  min_time, max_time = stat_times.min, stat_times.max
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                  r << {
         
     | 
| 
       33 
     | 
    
         
            -
                    :name     => name,
         
     | 
| 
       34 
     | 
    
         
            -
                    :label    => label,
         
     | 
| 
       35 
     | 
    
         
            -
                    :size     => stats.size,
         
     | 
| 
       36 
     | 
    
         
            -
                    :created  => min_time,
         
     | 
| 
       37 
     | 
    
         
            -
                    :modified => max_time
         
     | 
| 
       38 
     | 
    
         
            -
                  }
         
     | 
| 
       39 
46 
     | 
    
         
             
                end
         
     | 
| 
       40 
47 
     | 
    
         
             
                sorted_log_files(r)
         
     | 
| 
       41 
48 
     | 
    
         
             
              end
         
     | 
| 
         @@ -45,6 +52,5 @@ class ServiceInfo::Logger < ServiceInfo::Base 
     | 
|
| 
       45 
52 
     | 
    
         
             
                  @log_location_cache ||= LogLocationCache::Logger.new(RunitMan::App.runit_logger)
         
     | 
| 
       46 
53 
     | 
    
         
             
                end
         
     | 
| 
       47 
54 
     | 
    
         
             
              end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
55 
     | 
    
         
             
            end
         
     | 
| 
       50 
56 
     | 
    
         | 
| 
         @@ -14,6 +14,7 @@ class ServiceInfo::Svlogd < ServiceInfo::Base 
     | 
|
| 
       14 
14 
     | 
    
         
             
                Dir.foreach(dir_name) do |name|
         
     | 
| 
       15 
15 
     | 
    
         
             
                  next  if ServiceInfo::Base.itself_or_parent?(name)
         
     | 
| 
       16 
16 
     | 
    
         
             
                  next  if SPECIAL_LOG_FILES.include?(name)
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       17 
18 
     | 
    
         
             
                  full_name = File.expand_path(name, dir_name)
         
     | 
| 
       18 
19 
     | 
    
         
             
                  stats = File.stat(full_name)
         
     | 
| 
       19 
20 
     | 
    
         
             
                  stat_times = [stats.ctime.utc, stats.atime.utc, stats.mtime.utc]
         
     | 
| 
         @@ -33,13 +34,9 @@ class ServiceInfo::Svlogd < ServiceInfo::Base 
     | 
|
| 
       33 
34 
     | 
    
         
             
              end
         
     | 
| 
       34 
35 
     | 
    
         | 
| 
       35 
36 
     | 
    
         
             
              class << self
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
37 
     | 
    
         
             
                def log_location_cache
         
     | 
| 
       38 
38 
     | 
    
         
             
                  @log_location_cache ||= LogLocationCache::Svlogd.new
         
     | 
| 
       39 
39 
     | 
    
         
             
                end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
40 
     | 
    
         
             
              end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
41 
     | 
    
         
             
            end
         
     | 
| 
       45 
42 
     | 
    
         | 
| 
         @@ -9,6 +9,7 @@ class ServiceStatus 
     | 
|
| 
       9 
9 
     | 
    
         
             
                # status in daemontools supervise format
         
     | 
| 
       10 
10 
     | 
    
         
             
                # look at runit's sv.c for details
         
     | 
| 
       11 
11 
     | 
    
         
             
                data = (!data.nil? && data.length == STATUS_SIZE) ? data : nil
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       12 
13 
     | 
    
         
             
                @raw = data.nil? ? nil : data.unpack('NNxxxxVxa1CC')
         
     | 
| 
       13 
14 
     | 
    
         
             
              end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
         @@ -54,12 +55,13 @@ class ServiceStatus 
     | 
|
| 
       54 
55 
     | 
    
         
             
              end
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
              def to_s
         
     | 
| 
       57 
     | 
    
         
            -
                return 'inactive' 
     | 
| 
      
 58 
     | 
    
         
            +
                return 'inactive'  if inactive?
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       58 
60 
     | 
    
         
             
                # try to mimics stat behaviour to minimize readings
         
     | 
| 
       59 
61 
     | 
    
         
             
                result = status_string
         
     | 
| 
       60 
     | 
    
         
            -
                result += ', got TERM' 
     | 
| 
       61 
     | 
    
         
            -
                result += ', want down' 
     | 
| 
       62 
     | 
    
         
            -
                result += ', want up' 
     | 
| 
      
 62 
     | 
    
         
            +
                result += ', got TERM'  if got_term?
         
     | 
| 
      
 63 
     | 
    
         
            +
                result += ', want down'  if want_down?
         
     | 
| 
      
 64 
     | 
    
         
            +
                result += ', want up'  if want_up?
         
     | 
| 
       63 
65 
     | 
    
         
             
                result 
         
     | 
| 
       64 
66 
     | 
    
         
             
              end
         
     | 
| 
       65 
67 
     | 
    
         | 
| 
         @@ -70,9 +72,9 @@ private 
     | 
|
| 
       70 
72 
     | 
    
         | 
| 
       71 
73 
     | 
    
         
             
              def status_string
         
     | 
| 
       72 
74 
     | 
    
         
             
                case status_byte
         
     | 
| 
       73 
     | 
    
         
            -
                  when S_DOWN  
     | 
| 
       74 
     | 
    
         
            -
                  when S_RUN  
     | 
| 
       75 
     | 
    
         
            -
                  when S_FINISH  
     | 
| 
      
 75 
     | 
    
         
            +
                  when S_DOWN; 'down'
         
     | 
| 
      
 76 
     | 
    
         
            +
                  when S_RUN; 'run'
         
     | 
| 
      
 77 
     | 
    
         
            +
                  when S_FINISH; 'finish'
         
     | 
| 
       76 
78 
     | 
    
         
             
                end
         
     | 
| 
       77 
79 
     | 
    
         
             
              end
         
     | 
| 
       78 
80 
     | 
    
         
             
            end
         
     | 
    
        data/lib/runit-man/utils.rb
    CHANGED
    
    
    
        data/lib/runit-man/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: runit-man
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
       5 
     | 
    
         
            -
              prerelease: 
         
     | 
| 
      
 4 
     | 
    
         
            +
              hash: -3194798914
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: 5
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 2
         
     | 
| 
       8 
     | 
    
         
            -
              -  
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
               
     | 
| 
      
 8 
     | 
    
         
            +
              - 4
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 10 
     | 
    
         
            +
              - a
         
     | 
| 
      
 11 
     | 
    
         
            +
              - 1
         
     | 
| 
      
 12 
     | 
    
         
            +
              version: 2.4.0a1
         
     | 
| 
       11 
13 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
14 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
15 
     | 
    
         
             
            - Akzhan Abdulin
         
     | 
| 
         @@ -15,7 +17,7 @@ autorequire: 
     | 
|
| 
       15 
17 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
18 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
19 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2012-03 
     | 
| 
      
 20 
     | 
    
         
            +
            date: 2012-04-03 00:00:00 +04:00
         
     | 
| 
       19 
21 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       20 
22 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       21 
23 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -311,12 +313,14 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       311 
313 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
       312 
314 
     | 
    
         
             
              none: false
         
     | 
| 
       313 
315 
     | 
    
         
             
              requirements: 
         
     | 
| 
       314 
     | 
    
         
            -
              - - " 
     | 
| 
      
 316 
     | 
    
         
            +
              - - ">"
         
     | 
| 
       315 
317 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
       316 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 318 
     | 
    
         
            +
                  hash: 25
         
     | 
| 
       317 
319 
     | 
    
         
             
                  segments: 
         
     | 
| 
       318 
     | 
    
         
            -
                  -  
     | 
| 
       319 
     | 
    
         
            -
                   
     | 
| 
      
 320 
     | 
    
         
            +
                  - 1
         
     | 
| 
      
 321 
     | 
    
         
            +
                  - 3
         
     | 
| 
      
 322 
     | 
    
         
            +
                  - 1
         
     | 
| 
      
 323 
     | 
    
         
            +
                  version: 1.3.1
         
     | 
| 
       320 
324 
     | 
    
         
             
            requirements: 
         
     | 
| 
       321 
325 
     | 
    
         
             
            - none
         
     | 
| 
       322 
326 
     | 
    
         
             
            rubyforge_project: 
         
     |