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

Defined in:
app/models/concerns/sufia/generic_file/audit.rb

Instance Method Summary collapse

Instance Method Details

#audit(version, force = false) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 59

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
  latest_audit
end

#audit!(version) ⇒ Object



55
56
57
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 55

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

#audit_everything(force = false) ⇒ Object



85
86
87
88
89
90
91
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 85

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



93
94
95
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 93

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

#needs_audit?(version, latest_audit) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
76
77
78
79
80
81
82
83
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 73

def needs_audit?(version, latest_audit)
  if latest_audit and latest_audit.updated_at
    days_since_last_audit = (DateTime.now - latest_audit.updated_at.to_date).to_i
    if days_since_last_audit < Sufia.config.max_days_between_audits
      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
  true
end

#run_audit(version) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 97

def run_audit(version)
  if version.dsChecksumValid
    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)
  check
end