| # |
| # Monitor status of site-scan |
| # |
| |
| =begin |
| The code checks the site-scan log file |
| |
| Possible status level responses: |
| Danger - log contains unexpected content |
| Warning - log hasn't been updated within a day |
| Info - log is recent and contains only expected content |
| |
| =end |
| |
| require 'time' |
| |
| def Monitor.site_scan(previous_status) |
| logdir = File.expand_path('../../www/logs') |
| logfile = File.join(logdir, 'site-scan') |
| log = File.read(logfile) |
| |
| log.gsub! /^([-\w]+ )*https?:\S+ \w+\n/, '' |
| |
| danger_period = 86_400 # one day |
| |
| if not log.empty? |
| # Archive the log file |
| require 'fileutils' |
| archive = File.join(logdir,'archive') |
| FileUtils.mkdir(archive) unless File.directory?(archive) |
| file = File.basename(logfile) |
| FileUtils.copy logfile, File.join(archive, file + '.danger'), preserve: true |
| level = 'danger' |
| level = 'warning' if log.gsub(/.* error\n/, '').empty? |
| { |
| level: level, |
| data: log.split("\n"), |
| href: '../logs/site-scan' |
| } |
| elsif Time.now - File.mtime(logfile) > danger_period |
| { |
| level: 'warning', |
| data: "Last updated: #{File.mtime(logfile)}", |
| href: '../logs/site-scan' |
| } |
| else |
| {mtime: File.mtime(logfile).gmtime.iso8601, level: 'success'} |
| end |
| end |
| |
| # for debugging purposes |
| if __FILE__ == $0 |
| require_relative 'unit_test' |
| runtest('site_scan') # must agree with method name above |
| end |