class Egi::Fedcloud::Cloudhound::GocdbSite

Constants

INVALID_RANGES

Attributes

contact_email[R]
csirt_email[R]
ip_ranges[R]
name[R]
ngi[R]

Public Class Methods

extract_ranges(text_ranges, site_name) click to toggle source
# File lib/egi/fedcloud/cloudhound/gocdb_site.rb, line 47
def extract_ranges(text_ranges, site_name)
  ranges = text_ranges.split(/[,;]/).reject { |el| el.blank? || !el.include?('/') || INVALID_RANGES.include?(el) }

  Egi::Fedcloud::Cloudhound::Log.debug "[#{self}] -- Ranges: #{ranges.inspect}"
  ranges.map! do |range|
    begin
      IPAddr.new(range)
    rescue
      Egi::Fedcloud::Cloudhound::Log.warn "[#{self}] Invalid IP range #{range.inspect} " \
                                          "for site #{site_name}"
      nil
    end
  end
  ranges.compact!

  ranges
end
extract_text(element) click to toggle source
# File lib/egi/fedcloud/cloudhound/gocdb_site.rb, line 66
def extract_text(element)
  (element && element.first) ? element.first.text : ''
end
new(element) click to toggle source
# File lib/egi/fedcloud/cloudhound/gocdb_site.rb, line 11
def initialize(element)
  Egi::Fedcloud::Cloudhound::Log.debug "[#{self.class}] Initializing with #{element.inspect}"
  @name = self.class.extract_text(element.locate('SHORT_NAME'))
  @csirt_email = self.class.extract_text(element.locate('CSIRT_EMAIL'))
  @contact_email = self.class.extract_text(element.locate('CONTACT_EMAIL'))
  @ngi = self.class.extract_text(element.locate('ROC'))

  Egi::Fedcloud::Cloudhound::Log.debug "[#{self.class}] Extracting IP ranges for site #{@name}"
  @ip_ranges = self.class.extract_ranges(self.class.extract_text(element.locate('SITE_IP')), @name)
end

Public Instance Methods

contacts() click to toggle source
# File lib/egi/fedcloud/cloudhound/gocdb_site.rb, line 35
def contacts
  {
    name: name,
    type: nil,
    status: nil,
    csirt: csirt_email,
    ngi: ngi
  }
end
in_range?(ip) click to toggle source
# File lib/egi/fedcloud/cloudhound/gocdb_site.rb, line 23
def in_range?(ip)
  ip = ip.to_s if ip.kind_of?(IPAddr)

  Egi::Fedcloud::Cloudhound::Log.debug "[#{self.class}] Checking #{ip.inspect} against #{name}'s ranges"
  ip_ranges.each do |my_range|
    Egi::Fedcloud::Cloudhound::Log.debug "[#{self.class}] -- #{my_range.inspect}"
    return true if my_range.include?(ip)
  end
  false
end