Module: Sufia::GenericFile::Audit

Extended by:
ActiveSupport::Concern
Included in:
Sufia::GenericFile
Defined in:
app/models/concerns/sufia/generic_file/audit.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

NO_RUNS =
999

Instance Method Summary collapse

Instance Method Details

#audit(force = false) ⇒ Object



8
9
10
11
12
13
14
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 8

def audit(force = false)
  logs = []
  self.per_version do |ver|
    logs << audit_each(ver, force)
  end
  logs
end

#audit!Object



29
30
31
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 29

def audit!
  audit(true)
end

#audit_each(version, force = false) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 54

def audit_each(version, force = false)
  latest_audit = logs(version.dsid).first
  return latest_audit unless force || ::GenericFile.needs_audit?(version, latest_audit)

  #  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 = 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_stat(force = false) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 37

def audit_stat(force = false)
  logs = audit(force)
  audit_results = logs.collect { |result| result["pass"] }

  # check how many non runs we had
  non_runs = audit_results.reduce(0) { |sum, value| value == NO_RUNS ? sum += 1 : sum }
  if non_runs == 0
    result = audit_results.reduce(true) { |sum, value| sum && value }
    return result
  elsif non_runs < audit_results.length
    result = audit_results.reduce(true) { |sum, value| value == NO_RUNS ? sum : sum && value }
    return 'Some audits have not been run, but the ones run were '+ ((result)? 'passing' : 'failing') + '.'
  else
    return 'Audits have not yet been run on this file.'
  end
end

#audit_stat!Object



33
34
35
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 33

def audit_stat!
  audit_stat(true)
end

#logs(dsid) ⇒ Object



25
26
27
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 25

def logs(dsid)
  ChecksumAuditLog.where(dsid: dsid, pid: self.pid).order('created_at desc, id desc')
end

#per_version(&block) ⇒ Object



16
17
18
19
20
21
22
23
# File 'app/models/concerns/sufia/generic_file/audit.rb', line 16

def per_version(&block)
  self.datastreams.each do |dsid, ds|
    next if ds == full_text
    ds.versions.each do |ver|
      block.call(ver)
    end
  end
end