Project

General

Profile

Download (4.54 KB) Statistics
| Branch: | Tag: | Revision:
module AuditsHelper

MainObjects = %w(Host Hostgroup User Operatingsystem Environment Puppetclass Parameter Architecture ComputeResource ConfigTemplate ComputeProfile ComputeAttribute)

# lookup the Model representing the numerical id and return its label
def id_to_label name, change
return _("N/A") if change.nil?
case name
when "ancestry"
change.blank? ? "" : change.split('/').map { |i| Hostgroup.find(i).name rescue _("NA") }.join('/')
when 'last_login_on'
change.to_s(:short)
when /.*_id$/
name.humanize.constantize.find(change).to_label
else
change.to_s
end.truncate(50)
rescue
_("N/A")
end

def audit_title audit
type_name = audited_type audit
case type_name
when 'Puppet Class'
"#{id_to_label audit.audited_changes.keys[0], audit.audited_changes.values[0]}"
else
name = audit.auditable_name.blank? ? audit.revision.to_label : audit.auditable_name
name += " / #{audit.associated_name}" if audit.associated_id and !audit.associated_name.blank?
name
end
rescue
""
end

def details audit
if audit.action == 'update'
Array.wrap(audit.audited_changes).map do |name, change|
next if change.nil? or change.to_s.empty?
if name == 'template'
(_("Provisioning Template content changed %s") % (link_to 'view diff', audit_path(audit))).html_safe if audit_template? audit
elsif name == "owner_id" || name == "owner_type"
_("Owner changed to %s") % (audit.revision.owner rescue _('N/A'))
else
_("%{name} changed from %{label1} to %{label2}") % { :name => name.humanize, :label1 => id_to_label(name, change[0]), :label2 => id_to_label(name, change[1]) }
end
end
elsif !main_object? audit
["#{audit_action_name(audit).humanize} #{id_to_label audit.audited_changes.keys[0], audit.audited_changes.values[0]}
#{audit_action_name(audit)=="removed" ? "from" : "to"} #{id_to_label audit.audited_changes.keys[1], audit.audited_changes.values[1]}"]
else
[]
end
end

def audit_template? audit
audit.auditable_type == "ConfigTemplate" && audit.action == 'update' && audit.audited_changes["template"] &&
audit.audited_changes["template"][0] != audit.audited_changes["template"][1]
end

def audit_login? audit
name = audit.audited_changes.keys[0] rescue ''
name == 'last_login_on'
end

def audit_action_name audit
return audit.action == 'destroy' ? 'destroyed' : "#{audit.action}d" if main_object? audit

case audit.action
when 'create'
'added'
when 'destroy'
'removed'
else
'updated'
end
end

def audit_user audit
return if audit.username.nil?
login = audit.user.login rescue nil # aliasing the user method sometimes yields strings
link_to(icon_text('user', audit.username.gsub(_('User'), '')), hash_for_audits_path(:search => login ? "user = #{login}" : "username = \"#{audit.username}\""))
end

def audit_time audit
content_tag :span, _("%s ago") % time_ago_in_words(audit.created_at),
{ :'data-original-title' => audit.created_at.to_s(:long), :rel => 'twipsy' }
end

def audited_icon audit
style = 'label-info'
style = case audit.action
when 'create'
'label-success'
when 'update'
'label-info'
when 'destroy'
'label-danger'
else
''
end if main_object? audit
style += " label"

type = audited_type(audit)
symbol = case type
when "Host"
'hdd'
when "Hostgroup"
'tasks'
when "User"
'user'
else
'cog'
end
content_tag(:b, icon_text(symbol, type, :class => 'icon-white'), :class => style)
end

def audited_type audit
type_name = case audit.auditable_type
when 'HostClass'
'Puppet Class'
when 'Parameter'
"#{audit.associated_type || 'Global'}-#{type_name}"
else
audit.auditable_type
end
type_name.underscore.titleize
end

def audit_remote_address audit
return if audit.remote_address.empty?
content_tag :span, :style => 'color:#999;' do
"(" + audit.remote_address + ")"
end
end

private
def main_object? audit
type = audit.auditable_type.split("::").last rescue ''
MainObjects.include?(type)
end

end
(2-2/35)