normalize

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