in www/status/monitor.rb [148:211]
def normalize(status)
if status.instance_of? String or status.instance_of? Array
status = {data: status}
end
if status[:data].instance_of? Hash
status[:data].values.each {|value| normalize(value)}
elsif not status[:data] and not status[:mtime]
status[:data] = 'missing'
status[:level] ||= 'danger'
end
if status[:mtime].instance_of? Time
status[:mtime] = status[:mtime].gmtime.iso8601
end
if status[:level]
if not LEVELS.include? status[:level]
status[:title] ||= "invalid status: #{status[:level].inspect}"
status[:level] = 'fatal'
end
else
if status[:data].instance_of? Hash
highest = status[:data].
group_by {|key, value| LEVELS.index(value[:level]) || 9}.max ||
[9, []]
status[:level] = LEVELS[highest.first] || 'fatal'
group = highest.last
if group.length != 1
status[:title] = "#{group.length} #{ISSUE_TYPE[status[:level]]}"
if group.length <= 4
status[:title] += ': ' + group.map(&:first).join(', ')
end
else
key, value = group.first
if value[:title]
status[:title] ||= "#{key} #{value[:title]}"
else
status[:title] ||= "#{key} #{value[:data].inspect}"
end
end
else
status[:level] ||= 'success'
end
end
status
end