blob: 557e1f8052eef78f28dafd194f5b19062c9e9d87 [file] [log] [blame]
#
# Monitor status of public json directory
#
require 'fileutils'
def Monitor.public_json(previous_status)
danger_period = 86_400 # one day
warning_period = 5400 # 1.5 hours
logs = File.expand_path('../../www/logs/public-*.log')
status = {}
Dir[logs].each do |log|
name = File.basename(log).sub('public-', '')
begin
status[name] = {
href: "../logs/#{File.basename(log)}",
mtime: File.mtime(log)
}
contents = File.read(log, encoding: Encoding::UTF_8)
# Ignore Wunderbar logging for normal messages (may occur multiple times)
contents.gsub! /^(_INFO|_DEBUG) .*?\n+/, ''
# diff -u output:
if contents.gsub! /^--- .*?\n(\n|\Z)/m, ''
status[name].merge! level: 'info', title: 'updated'
end
# Wunderbar warning
warnings = contents.scan(/^_WARN (.*?)\n+/)
if warnings.length == 1
contents.sub! /^_WARN (.*?)\n+/, ''
status[name].merge! level: 'warning', data: $1
elsif warnings.length > 0
contents.gsub! /^_WARN (.*?)\n+/, ''
status[name].merge! level: 'warning', data: warnings.flatten,
title: "#{warnings.length} warnings"
end
# Check to see if the log has been updated recently
if Time.now - File.mtime(log) > warning_period
status[name].merge! level: 'warning',
data: "Last updated: #{File.mtime(log).to_s} (more than 1.5 hours old)"
end
# Check to see if the log has been updated recently
if Time.now - File.mtime(log) > danger_period
status[name].merge! level: 'danger',
data: "Last updated: #{File.mtime(log).to_s} (more than 24 hours old)"
end
# Treat everything left as an error to be reported
unless contents.empty?
status[name].merge! level: 'danger', data: contents.split("\n")
end
rescue Exception => e
status[name] = {
level: 'danger',
data: {
exception: {
level: 'danger',
text: e.inspect,
data: e.backtrace
}
}
}
end
if status[name][:level]
FileUtils.copy log, log.sub /\.log$/, '.' + status[name][:level],
preserve: true
end
end
{data: status}
end