Module: Sufia::GenericFile::Audit::ClassMethods

Defined in:
lib/sufia/models/generic_file/audit.rb

Instance Method Summary collapse

Instance Method Details

#audit(version, force = false) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/sufia/models/generic_file/audit.rb', line 61

def audit(version, force = false)
  latest_audit = self.find(version.pid).logs(version.dsid).first
  unless force
    return latest_audit unless ::GenericFile.needs_audit?(version, latest_audit)
  end
  #  Resque.enqueue(AuditJob, version.pid, version.dsid, version.versionID)
  Sufia.queue.push(AuditJob.new(version.pid, version.dsid, version.versionID))

  # run the find just incase the job has finished already
  latest_audit = self.find(version.pid).logs(version.dsid).first
  latest_audit = ChecksumAuditLog.new(:pass=>NO_RUNS, :pid=>version.pid, :dsid=>version.dsid, :version=>version.versionID) unless latest_audit
  return latest_audit
end

#audit!(version) ⇒ Object



57
58
59
# File 'lib/sufia/models/generic_file/audit.rb', line 57

def audit!(version)
  ::GenericFile.audit(version, true)
end

#audit_everything(force = false) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/sufia/models/generic_file/audit.rb', line 91

def audit_everything(force = false)
  ::GenericFile.find_each do |gf|
    gf.per_version do |ver|
      ::GenericFile.audit(ver, force)
    end
  end
end

#audit_everything!Object



99
100
101
# File 'lib/sufia/models/generic_file/audit.rb', line 99

def audit_everything!
  ::GenericFile.audit_everything(true)
end

#needs_audit?(version, latest_audit) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/sufia/models/generic_file/audit.rb', line 75

def needs_audit?(version, latest_audit)
  if latest_audit and latest_audit.updated_at
    #logger.debug "***AUDIT*** last audit = #{latest_audit.updated_at.to_date}"
    days_since_last_audit = (DateTime.now - latest_audit.updated_at.to_date).to_i
    #logger.debug "***AUDIT*** days since last audit: #{days_since_last_audit}"
    if days_since_last_audit < Sufia.config.max_days_between_audits
      #logger.debug "***AUDIT*** No audit needed for #{version.pid} #{version.versionID} (#{latest_audit.updated_at})"
      return false
    end
  else
    logger.warn "***AUDIT*** problem with audit log!  Latest Audit is not nil, but updated_at is not set #{latest_audit}"  unless latest_audit.nil?
  end
  #logger.info "***AUDIT*** Audit needed for #{version.pid} #{version.versionID}"
  return true
end

#run_audit(version) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/sufia/models/generic_file/audit.rb', line 103

def run_audit(version)
  if version.dsChecksumValid
    #logger.info "***AUDIT*** Audit passed for #{version.pid} #{version.versionID}"
    passing = 1
    ChecksumAuditLog.prune_history(version)
  else
    logger.warn "***AUDIT*** Audit failed for #{version.pid} #{version.versionID}"
    passing = 0
  end
  check = ChecksumAuditLog.create!(:pass=>passing, :pid=>version.pid,
                                   :dsid=>version.dsid, :version=>version.versionID)
  return check
end