sufia-models 4.0.0.beta2 → 4.0.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/actors/sufia/generic_file/actor.rb +118 -0
- data/app/models/batch.rb +3 -3
- data/app/models/checksum_audit_log.rb +3 -3
- data/app/models/collection.rb +41 -0
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file.rb +33 -43
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/accessible_attributes.rb +3 -3
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/audit.rb +12 -18
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/characterization.rb +1 -8
- data/app/models/concerns/sufia/generic_file/derivatives.rb +26 -0
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/export.rb +13 -13
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/featured.rb +0 -0
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/metadata.rb +0 -0
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/mime_types.rb +15 -1
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/permissions.rb +5 -1
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/reload_on_save.rb +0 -0
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/trophies.rb +0 -0
- data/app/models/concerns/sufia/generic_file/versions.rb +16 -0
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/virus_check.rb +2 -3
- data/{lib/sufia/models → app/models/concerns/sufia}/generic_file/web_form.rb +9 -2
- data/app/models/concerns/sufia/properties_datastream_behavior.rb +3 -4
- data/app/models/concerns/sufia/user.rb +2 -2
- data/app/models/datastreams/fits_datastream.rb +137 -136
- data/app/models/datastreams/generic_file_rdf_datastream.rb +6 -0
- data/app/models/datastreams/paranoid_rights_datastream.rb +3 -3
- data/app/models/file_usage.rb +53 -0
- data/app/models/follow.rb +2 -4
- data/app/models/geo_names_resource.rb +5 -7
- data/app/models/local_authority.rb +14 -14
- data/app/models/single_use_link.rb +1 -1
- data/app/models/sufia/download.rb +9 -0
- data/app/models/trophy.rb +1 -1
- data/app/services/sufia/{usage_statistics.rb → analytics.rb} +1 -24
- data/app/services/sufia/id_service.rb +2 -2
- data/lib/generators/sufia/models/install_generator.rb +5 -2
- data/lib/generators/sufia/models/templates/config/setup_mail.rb +1 -1
- data/lib/generators/sufia/models/templates/config/sufia.rb +5 -3
- data/lib/generators/sufia/models/templates/migrations/acts_as_follower_migration.rb +6 -6
- data/lib/generators/sufia/models/templates/migrations/create_checksum_audit_logs.rb +2 -3
- data/lib/generators/sufia/models/templates/migrations/create_local_authorities.rb +20 -20
- data/lib/sufia/ability.rb +1 -1
- data/lib/sufia/models/engine.rb +3 -9
- data/lib/sufia/models/file_content/versions.rb +3 -3
- data/lib/sufia/models/jobs/active_fedora_pid_based_job.rb +6 -2
- data/lib/sufia/models/jobs/batch_update_job.rb +6 -10
- data/lib/sufia/models/jobs/characterize_job.rb +1 -13
- data/lib/sufia/models/jobs/create_derivatives_job.rb +14 -0
- data/lib/sufia/models/jobs/import_url_job.rb +27 -23
- data/lib/sufia/models/version.rb +1 -1
- data/lib/tasks/sufia-models_tasks.rake +1 -1
- data/sufia-models.gemspec +1 -1
- metadata +65 -64
- data/lib/sufia/models/generic_file/actions.rb +0 -50
- data/lib/sufia/models/generic_file/derivatives.rb +0 -31
- data/lib/sufia/models/generic_file/thumbnail.rb +0 -37
- data/lib/sufia/models/generic_file/versions.rb +0 -16
- data/lib/sufia/models/jobs/transcode_audio_job.rb +0 -15
- data/lib/sufia/models/jobs/transcode_video_job.rb +0 -15
- data/lib/sufia/models/solr_document_behavior.rb +0 -118
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63a65dabcbadf31012b903126436b9a24b8ee4ea
|
4
|
+
data.tar.gz: cab66737a44fe6bea825acdfbc8a38c4fbd679c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a82f963bd402cac50068911c17d906578534710f39a5b070fae36fec7db886f2511b8d564eedcc3a2573472abeef10298e6c21464d8676b0bed4503744b30074
|
7
|
+
data.tar.gz: fb673e84039480923a9d400814a48c59fd7d55bcd6bc3ea13e1db30a6269ee677544e23d84a9d73d5997c58dccb429cdb3e941d6d160dc7bade36d1bb2a619f3
|
@@ -0,0 +1,118 @@
|
|
1
|
+
module Sufia::GenericFile
|
2
|
+
# Actions are decoupled from controller logic so that they may be called from a controller or a background job.
|
3
|
+
class Actor
|
4
|
+
|
5
|
+
attr_reader :generic_file, :user
|
6
|
+
|
7
|
+
def initialize(generic_file, user)
|
8
|
+
@generic_file = generic_file
|
9
|
+
@user = user
|
10
|
+
end
|
11
|
+
|
12
|
+
# in order to avoid two saves in a row, create_metadata does not save the file by default.
|
13
|
+
# it is typically used in conjunction with create_content, which does do a save.
|
14
|
+
# If you want to save when using create_metadata, you can do this:
|
15
|
+
# create_metadata(batch_id) { |gf| gf.save }
|
16
|
+
def create_metadata(batch_id)
|
17
|
+
generic_file.apply_depositor_metadata(user)
|
18
|
+
generic_file.date_uploaded = Date.today
|
19
|
+
generic_file.date_modified = Date.today
|
20
|
+
generic_file.creator = user.name
|
21
|
+
|
22
|
+
if batch_id
|
23
|
+
generic_file.add_relationship("isPartOf", "info:fedora/#{Sufia::Noid.namespaceize(batch_id)}")
|
24
|
+
else
|
25
|
+
logger.warn "unable to find batch to attach to"
|
26
|
+
end
|
27
|
+
yield(generic_file) if block_given?
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_content(file, file_name, dsid)
|
31
|
+
generic_file.add_file(file, dsid, file_name)
|
32
|
+
save_characterize_and_record_committer do
|
33
|
+
if Sufia.config.respond_to?(:after_create_content)
|
34
|
+
Sufia.config.after_create_content.call(generic_file, user)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def revert_content(revision_id, datastream_id)
|
40
|
+
revision = generic_file.content.get_version(revision_id)
|
41
|
+
generic_file.add_file(revision.content, datastream_id, revision.label)
|
42
|
+
save_characterize_and_record_committer do
|
43
|
+
if Sufia.config.respond_to?(:after_revert_content)
|
44
|
+
Sufia.config.after_revert_content.call(generic_file, user, revision_id)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def update_content(file, datastream_id)
|
50
|
+
generic_file.add_file(file, datastream_id, file.original_filename)
|
51
|
+
save_characterize_and_record_committer do
|
52
|
+
if Sufia.config.respond_to?(:after_update_content)
|
53
|
+
Sufia.config.after_update_content.call(generic_file, user)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def update_metadata(attributes, visibility)
|
59
|
+
generic_file.attributes = generic_file.sanitize_attributes(attributes)
|
60
|
+
generic_file.visibility = visibility
|
61
|
+
generic_file.date_modified = DateTime.now
|
62
|
+
save_and_record_committer do
|
63
|
+
if Sufia.config.respond_to?(:after_update_metadata)
|
64
|
+
Sufia.config.after_update_metadata.call(generic_file, user)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def destroy
|
70
|
+
pid = generic_file.pid #Work around for https://github.com/projecthydra/active_fedora/issues/422
|
71
|
+
generic_file.destroy
|
72
|
+
if Sufia.config.respond_to?(:after_destroy)
|
73
|
+
Sufia.config.after_destroy.call(pid, user)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Takes an optional block and executes the block if the save was successful.
|
78
|
+
def save_characterize_and_record_committer
|
79
|
+
save_and_record_committer { push_characterize_job }.tap do |val|
|
80
|
+
yield if block_given? && val
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Takes an optional block and executes the block if the save was successful.
|
85
|
+
def save_and_record_committer
|
86
|
+
save_tries = 0
|
87
|
+
begin
|
88
|
+
return false unless generic_file.save
|
89
|
+
rescue RSolr::Error::Http => error
|
90
|
+
logger.warn "Sufia::GenericFile::Actor::save_and_record_committer Caught RSOLR error #{error.inspect}"
|
91
|
+
save_tries+=1
|
92
|
+
# fail for good if the tries is greater than 3
|
93
|
+
raise error if save_tries >=3
|
94
|
+
sleep 0.01
|
95
|
+
retry
|
96
|
+
end
|
97
|
+
yield if block_given?
|
98
|
+
generic_file.record_version_committer(user)
|
99
|
+
true
|
100
|
+
end
|
101
|
+
|
102
|
+
def push_characterize_job
|
103
|
+
Sufia.queue.push(CharacterizeJob.new(@generic_file.pid))
|
104
|
+
end
|
105
|
+
|
106
|
+
class << self
|
107
|
+
def virus_check(file)
|
108
|
+
path = file.is_a?(String) ? file : file.path
|
109
|
+
unless defined?(ClamAV)
|
110
|
+
logger.warn "Virus checking disabled, #{path} not checked"
|
111
|
+
return
|
112
|
+
end
|
113
|
+
scan_result = ClamAV.instance.scanfile(path)
|
114
|
+
raise Sufia::VirusFoundError.new("A virus was found in #{path}: #{scan_result}") unless scan_result == 0
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
data/app/models/batch.rb
CHANGED
@@ -3,10 +3,10 @@ class Batch < ActiveFedora::Base
|
|
3
3
|
include Sufia::ModelMethods
|
4
4
|
include Sufia::Noid
|
5
5
|
|
6
|
-
has_metadata :
|
6
|
+
has_metadata name: "descMetadata", type: BatchRdfDatastream
|
7
7
|
|
8
|
-
belongs_to :user, :
|
9
|
-
has_many :generic_files, :
|
8
|
+
belongs_to :user, property: "creator"
|
9
|
+
has_many :generic_files, property: :is_part_of
|
10
10
|
|
11
11
|
has_attributes :title, :creator, :part, :status, datastream: :descMetadata, multiple: true
|
12
12
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
class ChecksumAuditLog < ActiveRecord::Base
|
2
2
|
|
3
3
|
def ChecksumAuditLog.get_audit_log(version)
|
4
|
-
ChecksumAuditLog.find_or_create_by_pid_and_dsid_and_version(:
|
5
|
-
:
|
6
|
-
:
|
4
|
+
ChecksumAuditLog.find_or_create_by_pid_and_dsid_and_version(pid: version.pid,
|
5
|
+
dsid: version.dsid,
|
6
|
+
version: version.versionID)
|
7
7
|
end
|
8
8
|
|
9
9
|
def ChecksumAuditLog.prune_history(version)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Collection < ActiveFedora::Base
|
2
|
+
include Hydra::Collection
|
3
|
+
include Sufia::ModelMethods
|
4
|
+
include Sufia::Noid
|
5
|
+
include Sufia::GenericFile::Permissions
|
6
|
+
include Sufia::GenericFile::WebForm # provides initialize_fields method
|
7
|
+
|
8
|
+
before_save :update_permissions
|
9
|
+
validates :title, presence: true
|
10
|
+
|
11
|
+
has_metadata "properties", type: PropertiesDatastream
|
12
|
+
|
13
|
+
def terms_for_display
|
14
|
+
[:title, :creator, :description, :date_modified, :date_uploaded]
|
15
|
+
end
|
16
|
+
|
17
|
+
def terms_for_editing
|
18
|
+
terms_for_display - [:date_modified, :date_uploaded]
|
19
|
+
end
|
20
|
+
|
21
|
+
# Test to see if the given field is required
|
22
|
+
# @param [Symbol] key a field
|
23
|
+
# @return [Boolean] is it required or not
|
24
|
+
def required?(key)
|
25
|
+
self.class.validators_on(key).any?{|v| v.kind_of? ActiveModel::Validations::PresenceValidator}
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_param
|
29
|
+
noid
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_solr(solr_doc={}, opts={})
|
33
|
+
super(solr_doc, opts)
|
34
|
+
solr_doc[Solrizer.solr_name("noid", Sufia::GenericFile.noid_indexer)] = noid
|
35
|
+
return solr_doc
|
36
|
+
end
|
37
|
+
|
38
|
+
def update_permissions
|
39
|
+
self.visibility = "open"
|
40
|
+
end
|
41
|
+
end
|
@@ -3,21 +3,9 @@ module Sufia
|
|
3
3
|
|
4
4
|
module GenericFile
|
5
5
|
extend ActiveSupport::Concern
|
6
|
-
extend ActiveSupport::Autoload
|
7
|
-
autoload :Actions, 'sufia/models/generic_file/actions'
|
8
|
-
autoload :Permissions, 'sufia/models/generic_file/permissions'
|
9
|
-
autoload :WebForm, 'sufia/models/generic_file/web_form'
|
10
|
-
autoload :AccessibleAttributes, 'sufia/models/generic_file/accessible_attributes'
|
11
|
-
autoload :Trophies, 'sufia/models/generic_file/trophies'
|
12
|
-
autoload :Featured, 'sufia/models/generic_file/featured'
|
13
|
-
autoload :Metadata, 'sufia/models/generic_file/metadata'
|
14
|
-
autoload :Versions, 'sufia/models/generic_file/versions'
|
15
|
-
autoload :VirusCheck, 'sufia/models/generic_file/virus_check'
|
16
|
-
autoload :ReloadOnSave, 'sufia/models/generic_file/reload_on_save'
|
17
6
|
include Sufia::ModelMethods
|
18
7
|
include Sufia::Noid
|
19
8
|
include Sufia::GenericFile::MimeTypes
|
20
|
-
include Sufia::GenericFile::Thumbnail
|
21
9
|
include Sufia::GenericFile::Export
|
22
10
|
include Sufia::GenericFile::Characterization
|
23
11
|
include Sufia::GenericFile::Audit
|
@@ -30,13 +18,14 @@ module Sufia
|
|
30
18
|
include Sufia::GenericFile::Versions
|
31
19
|
include Sufia::GenericFile::VirusCheck
|
32
20
|
include Sufia::GenericFile::ReloadOnSave
|
21
|
+
include Hydra::Collections::Collectible
|
33
22
|
|
34
23
|
included do
|
35
|
-
belongs_to :batch, :
|
24
|
+
belongs_to :batch, property: :is_part_of
|
36
25
|
|
37
|
-
around_save :
|
26
|
+
around_save :retry_warming
|
38
27
|
|
39
|
-
attr_accessible *(
|
28
|
+
attr_accessible *(terms_for_display + [:part_of, :permissions])
|
40
29
|
end
|
41
30
|
|
42
31
|
def persistent_url
|
@@ -44,34 +33,34 @@ module Sufia
|
|
44
33
|
end
|
45
34
|
|
46
35
|
def retry_warming
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
36
|
+
save_tries = 0
|
37
|
+
conflict_tries = 0
|
38
|
+
begin
|
39
|
+
yield
|
40
|
+
rescue RSolr::Error::Http => error
|
41
|
+
save_tries += 1
|
42
|
+
logger.warn "Retry Solr caught RSOLR error on #{self.pid}: #{error.inspect}"
|
43
|
+
# fail for good if the tries is greater than 3
|
44
|
+
raise if save_tries >=3
|
45
|
+
sleep 0.01
|
46
|
+
retry
|
47
|
+
rescue ActiveResource::ResourceConflict => error
|
48
|
+
conflict_tries += 1
|
49
|
+
logger.warn "Retry caught Active Resource Conflict #{self.pid}: #{error.inspect}"
|
50
|
+
raise if conflict_tries >=10
|
51
|
+
sleep 0.01
|
52
|
+
retry
|
53
|
+
rescue => error
|
54
|
+
if error.to_s.downcase.include? "conflict"
|
59
55
|
conflict_tries += 1
|
60
56
|
logger.warn "Retry caught Active Resource Conflict #{self.pid}: #{error.inspect}"
|
61
57
|
raise if conflict_tries >=10
|
62
58
|
sleep 0.01
|
63
59
|
retry
|
64
|
-
|
65
|
-
|
66
|
-
conflict_tries += 1
|
67
|
-
logger.warn "Retry caught Active Resource Conflict #{self.pid}: #{error.inspect}"
|
68
|
-
raise if conflict_tries >=10
|
69
|
-
sleep 0.01
|
70
|
-
retry
|
71
|
-
else
|
72
|
-
raise
|
73
|
-
end
|
60
|
+
else
|
61
|
+
raise
|
74
62
|
end
|
63
|
+
end
|
75
64
|
end
|
76
65
|
|
77
66
|
# Get the files with a sibling relationship (belongs_to :batch)
|
@@ -99,12 +88,13 @@ module Sufia
|
|
99
88
|
end
|
100
89
|
|
101
90
|
def to_solr(solr_doc={}, opts={})
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
91
|
+
super(solr_doc, opts).tap do |solr_doc|
|
92
|
+
solr_doc[Solrizer.solr_name('label')] = self.label
|
93
|
+
solr_doc[Solrizer.solr_name('noid', Sufia::GenericFile.noid_indexer)] = noid
|
94
|
+
solr_doc[Solrizer.solr_name('file_format')] = file_format
|
95
|
+
solr_doc[Solrizer.solr_name('file_format', :facetable)] = file_format
|
96
|
+
solr_doc = index_collection_pids(solr_doc)
|
97
|
+
end
|
108
98
|
end
|
109
99
|
|
110
100
|
# Redefine this for more intuitive keys in Redis
|
@@ -41,7 +41,7 @@ module Sufia
|
|
41
41
|
# attr_accessor :name, :credit_rating
|
42
42
|
#
|
43
43
|
# attr_accessible :name
|
44
|
-
# attr_accessible :name, :credit_rating, :
|
44
|
+
# attr_accessible :name, :credit_rating, as: :admin
|
45
45
|
#
|
46
46
|
# def assign_attributes(values, options = {})
|
47
47
|
# sanitize_for_mass_assignment(values, options[:as]).each do |k, v|
|
@@ -53,7 +53,7 @@ module Sufia
|
|
53
53
|
# When using the :default role:
|
54
54
|
#
|
55
55
|
# customer = Customer.new
|
56
|
-
# customer.assign_attributes({ "name" => "David", "credit_rating" => "Excellent", :
|
56
|
+
# customer.assign_attributes({ "name" => "David", "credit_rating" => "Excellent", last_login: 1.day.ago }, as: :default)
|
57
57
|
# customer.name # => "David"
|
58
58
|
# customer.credit_rating # => nil
|
59
59
|
#
|
@@ -63,7 +63,7 @@ module Sufia
|
|
63
63
|
# And using the :admin role:
|
64
64
|
#
|
65
65
|
# customer = Customer.new
|
66
|
-
# customer.assign_attributes({ "name" => "David", "credit_rating" => "Excellent", :
|
66
|
+
# customer.assign_attributes({ "name" => "David", "credit_rating" => "Excellent", last_login: 1.day.ago }, as: :admin)
|
67
67
|
# customer.name # => "David"
|
68
68
|
# customer.credit_rating # => "Excellent"
|
69
69
|
#
|
@@ -24,7 +24,7 @@ module Sufia
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def logs(dsid)
|
27
|
-
ChecksumAuditLog.where(:dsid
|
27
|
+
ChecksumAuditLog.where(dsid: dsid, pid: self.pid).order('created_at desc, id desc')
|
28
28
|
end
|
29
29
|
|
30
30
|
def audit!
|
@@ -40,19 +40,18 @@ module Sufia
|
|
40
40
|
audit_results = logs.collect { |result| result["pass"] }
|
41
41
|
|
42
42
|
# check how many non runs we had
|
43
|
-
non_runs =audit_results.reduce(0) { |sum, value|
|
44
|
-
if
|
45
|
-
result =audit_results.reduce(true) { |sum, value| sum && value }
|
43
|
+
non_runs = audit_results.reduce(0) { |sum, value| value == NO_RUNS ? sum += 1 : sum }
|
44
|
+
if non_runs == 0
|
45
|
+
result = audit_results.reduce(true) { |sum, value| sum && value }
|
46
46
|
return result
|
47
|
-
elsif
|
48
|
-
result =audit_results.reduce(true) { |sum, value|
|
47
|
+
elsif non_runs < audit_results.length
|
48
|
+
result = audit_results.reduce(true) { |sum, value| value == NO_RUNS ? sum : sum && value }
|
49
49
|
return 'Some audits have not been run, but the ones run were '+ ((result)? 'passing' : 'failing') + '.'
|
50
50
|
else
|
51
51
|
return 'Audits have not yet been run on this file.'
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
55
|
module ClassMethods
|
57
56
|
def audit!(version)
|
58
57
|
::GenericFile.audit(version, true)
|
@@ -68,24 +67,20 @@ module Sufia
|
|
68
67
|
|
69
68
|
# run the find just incase the job has finished already
|
70
69
|
latest_audit = self.find(version.pid).logs(version.dsid).first
|
71
|
-
latest_audit = ChecksumAuditLog.new(:
|
72
|
-
|
70
|
+
latest_audit = ChecksumAuditLog.new(pass: NO_RUNS, pid: version.pid, dsid: version.dsid, version: version.versionID) unless latest_audit
|
71
|
+
latest_audit
|
73
72
|
end
|
74
73
|
|
75
74
|
def needs_audit?(version, latest_audit)
|
76
75
|
if latest_audit and latest_audit.updated_at
|
77
|
-
#logger.debug "***AUDIT*** last audit = #{latest_audit.updated_at.to_date}"
|
78
76
|
days_since_last_audit = (DateTime.now - latest_audit.updated_at.to_date).to_i
|
79
|
-
#logger.debug "***AUDIT*** days since last audit: #{days_since_last_audit}"
|
80
77
|
if days_since_last_audit < Sufia.config.max_days_between_audits
|
81
|
-
#logger.debug "***AUDIT*** No audit needed for #{version.pid} #{version.versionID} (#{latest_audit.updated_at})"
|
82
78
|
return false
|
83
79
|
end
|
84
80
|
else
|
85
81
|
logger.warn "***AUDIT*** problem with audit log! Latest Audit is not nil, but updated_at is not set #{latest_audit}" unless latest_audit.nil?
|
86
82
|
end
|
87
|
-
|
88
|
-
return true
|
83
|
+
true
|
89
84
|
end
|
90
85
|
|
91
86
|
def audit_everything(force = false)
|
@@ -102,16 +97,15 @@ module Sufia
|
|
102
97
|
|
103
98
|
def run_audit(version)
|
104
99
|
if version.dsChecksumValid
|
105
|
-
#logger.info "***AUDIT*** Audit passed for #{version.pid} #{version.versionID}"
|
106
100
|
passing = 1
|
107
101
|
ChecksumAuditLog.prune_history(version)
|
108
102
|
else
|
109
103
|
logger.warn "***AUDIT*** Audit failed for #{version.pid} #{version.versionID}"
|
110
104
|
passing = 0
|
111
105
|
end
|
112
|
-
check = ChecksumAuditLog.create!(:
|
113
|
-
:
|
114
|
-
|
106
|
+
check = ChecksumAuditLog.create!(pass: passing, pid: version.pid,
|
107
|
+
dsid: version.dsid, version: version.versionID)
|
108
|
+
check
|
115
109
|
end
|
116
110
|
end
|
117
111
|
end
|
@@ -3,7 +3,7 @@ module Sufia
|
|
3
3
|
module Characterization
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
included do
|
6
|
-
has_metadata "characterization", :
|
6
|
+
has_metadata "characterization", type: FitsDatastream
|
7
7
|
has_attributes :mime_type, datastream: :characterization, multiple: false
|
8
8
|
has_attributes :format_label, :file_size, :last_modified,
|
9
9
|
:filename, :original_checksum, :rights_basis,
|
@@ -40,12 +40,6 @@ module Sufia
|
|
40
40
|
characterization.sample_rate.blank? ? characterization.video_sample_rate : characterization.sample_rate
|
41
41
|
end
|
42
42
|
|
43
|
-
def characterize_if_changed
|
44
|
-
content_changed = self.content.changed?
|
45
|
-
yield
|
46
|
-
Sufia.queue.push(CharacterizeJob.new(self.pid)) if content_changed
|
47
|
-
end
|
48
|
-
|
49
43
|
## Extract the metadata from the content datastream and record it in the characterization datastream
|
50
44
|
def characterize
|
51
45
|
self.characterization.ng_xml = self.content.extract_metadata
|
@@ -89,7 +83,6 @@ module Sufia
|
|
89
83
|
h
|
90
84
|
end
|
91
85
|
|
92
|
-
|
93
86
|
end
|
94
87
|
end
|
95
88
|
end
|