app/models/patch.rb
class Patch < ApplicationRecord
belongs_to :vm_or_template
belongs_to :host
virtual_column :v_install_date, :type => :string
def self.add_elements(vm, xmlNode)
add_missing_elements(vm, xmlNode, "software/patches")
end
def self.add_missing_elements(vm, xmlNode, findPath)
hashes = xml_to_hashes(xmlNode, findPath)
process_array(vm, hashes)
end
def self.refresh_patches(host, hashes)
process_array(host, hashes)
end
def self.process_array(parent, hashes)
EmsRefresh.save_patches_inventory(parent, hashes) if hashes.present?
end
def self.highest_patch_level
levels = all.pluck(:name).collect { |name| name.split("-").last.to_i }
(levels.max || 0).to_s
end
def self.xml_to_hashes(xmlNode, findPath)
el = XmlFind.findElement(findPath, xmlNode.root)
return nil unless MiqXml.isXmlElement?(el)
result = []
el.each_element do |e|
nh = e.attributes.to_h
nh[:is_valid] = nh.delete(:valid)
result << nh
end
result
end
def v_install_date
# Windows install dates do not include times, so only display YYYY-MM-DD format
installed_on.strftime("%Y-%m-%d") unless installed_on.nil?
end
end