daengine 0.3.3 → 0.3.4
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.
- data/app/models/digital_asset.rb +8 -1
- data/lib/daengine/digital_asset_processor.rb +42 -66
- data/lib/daengine/teamsite_metadata_parser.rb +24 -18
- data/lib/daengine/version.rb +1 -1
- data/spec/dummy/log/test.log +100 -0
- data/spec/mock_data/daengine.yml +1 -1
- data/spec/mock_data/taxonomy/taxonomyengine.yml +1 -1
- metadata +2 -2
data/app/models/digital_asset.rb
CHANGED
@@ -123,13 +123,20 @@ class DigitalAsset
|
|
123
123
|
TaxonomyTerm.label_for_term(content_organization_ids[0])
|
124
124
|
end
|
125
125
|
def content_type
|
126
|
-
type_id =
|
126
|
+
type_id = first_non_finra.try(:content_type)
|
127
127
|
TaxonomyTerm.label_for_term(type_id)
|
128
128
|
end
|
129
|
+
def pages; first_non_finra.pages end
|
130
|
+
|
129
131
|
def audience
|
130
132
|
TaxonomyTerm.label_for_term(audiences[0])
|
131
133
|
end
|
132
134
|
|
135
|
+
private
|
136
|
+
|
137
|
+
def first_non_finra; documents.detect{|d| d.content_type != '549'} end
|
138
|
+
|
139
|
+
|
133
140
|
end
|
134
141
|
|
135
142
|
class DigitalAsset::Document
|
@@ -3,78 +3,54 @@ module Daengine
|
|
3
3
|
|
4
4
|
@@last_read_time = 2.days.ago
|
5
5
|
|
6
|
-
def self.trap_signals
|
7
|
-
sigtrap = proc {
|
8
|
-
puts "DigitalAssetProcessor: caught trapped signal, shutting down"
|
9
|
-
@@run = false
|
10
|
-
}
|
11
|
-
signals = ["SIGTERM", "SIGINT"]
|
12
|
-
signals.push("SIGHUP") unless is_windows?
|
13
|
-
signals.each do |signal|
|
14
|
-
trap signal, sigtrap
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.is_windows?
|
19
|
-
processor, platform, *rest = RUBY_PLATFORM.split("-")
|
20
|
-
platform =~ /mswin/ || platform =~ /mingw/
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.execute
|
24
|
-
@@run = true
|
25
|
-
trap_signals
|
26
|
-
@@wthread = Thread.new { worker() }
|
27
|
-
return @@wthread
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.worker
|
31
|
-
puts "DigitalAssetProcessor: start processing digital assets!"
|
32
|
-
while @@run
|
33
|
-
begin
|
34
|
-
self.process_tuple_directory
|
35
|
-
process_tuple_directory
|
36
|
-
rescue => e
|
37
|
-
puts e.message
|
38
|
-
puts e.backtrace
|
39
|
-
end
|
40
|
-
sleep(5)
|
41
|
-
end
|
42
|
-
@@wthread.exit
|
43
|
-
end
|
44
|
-
|
45
6
|
def self.process_tuple_directory
|
46
7
|
path = Daengine.config[:assets_path]
|
47
8
|
raise "ERROR: DigitalAssetProcessor: Invalid assets_path provided. Unable to read from #{path}" unless File::directory?(path)
|
48
|
-
#
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
@@last_read_time = time
|
53
|
-
last_run_time = time
|
54
|
-
end
|
55
|
-
Daengine.log("DigitalAssetProcessor: Last process time was #{@@last_read_time}", "info")
|
56
|
-
deploy_files= []
|
9
|
+
# ensure only one instance running at a time
|
10
|
+
lockfile_name = Daengine.config[:daengine_yml_file] + '.lck'
|
11
|
+
begin
|
12
|
+
lockfile = File.new(lockfile_name, File::CREAT|File::EXCL)
|
57
13
|
|
58
|
-
|
59
|
-
|
60
|
-
|
14
|
+
# read the given directory, process each file in date order starting 2 days ago if last_read_time is nil
|
15
|
+
time = self.read_last_process_time
|
16
|
+
last_run_time = 10.years.ago
|
17
|
+
if not time.blank?
|
18
|
+
@@last_read_time = time
|
19
|
+
last_run_time = time
|
20
|
+
end
|
21
|
+
Daengine.log("DigitalAssetProcessor: Last process time was #{@@last_read_time}", "info")
|
22
|
+
deploy_files= []
|
23
|
+
|
24
|
+
deploy_files = Dir.entries(path).select {
|
25
|
+
|f| File.file?("#{path}/#{f}") and File.mtime("#{path}/#{f}") > @@last_read_time
|
26
|
+
}.sort_by { |f| File.mtime("#{path}/#{f}") }
|
27
|
+
|
28
|
+
if deploy_files.empty?
|
29
|
+
Daengine.log("WARN: DigitalAssetProcessor: No digital asset deployment files found to process under #{path}", "warn")
|
30
|
+
else
|
31
|
+
Daengine.log("DigitalAssetProcessor: Reading digital asset deployment files from #{path}", "info")
|
32
|
+
deploy_files.each do |filename|
|
33
|
+
#parse the file and add metadata content to database.
|
34
|
+
file = File.expand_path(filename, path)
|
35
|
+
Daengine.log("DigitalAssetProcessor: Processing file #{filename} --- #{File.mtime(file)}", "info")
|
36
|
+
open_file = File.open(file, 'rb')
|
37
|
+
Daengine::TeamsiteMetadataParser.parse_tuple_file(open_file, last_run_time)
|
38
|
+
Daengine.log("DigitalAssetProcessor: Finished processing #{filename}", "info")
|
39
|
+
@@last_read_time = File.mtime(file) + 1.second
|
40
|
+
self.save_last_read_time
|
41
|
+
Daengine.log("DigitalAssetProcessor: Last process time set to #{@@last_read_time}", "info")
|
42
|
+
end
|
43
|
+
end
|
61
44
|
|
62
|
-
|
63
|
-
Daengine.log("
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
file = File.expand_path(filename, path)
|
69
|
-
Daengine.log("DigitalAssetProcessor: Processing file #{filename} --- #{File.mtime(file)}", "info")
|
70
|
-
open_file = File.open(file, 'rb')
|
71
|
-
Daengine::TeamsiteMetadataParser.parse_tuple_file(open_file, last_run_time)
|
72
|
-
Daengine.log("DigitalAssetProcessor: Finished processing #{filename}", "info")
|
73
|
-
@@last_read_time = File.mtime(file) + 1.second
|
74
|
-
self.save_last_read_time
|
75
|
-
Daengine.log("DigitalAssetProcessor: Last process time set to #{@@last_read_time}", "info")
|
45
|
+
rescue Errno::EEXIST
|
46
|
+
Daengine.log("DigitalAssetProcessor: Already in progress. Lockfile exists at #{lockfile_name}. Aborting!", "error")
|
47
|
+
ensure
|
48
|
+
unless lockfile.nil?
|
49
|
+
lockfile.close()
|
50
|
+
File.delete(lockfile_name)
|
76
51
|
end
|
77
52
|
end
|
53
|
+
|
78
54
|
end
|
79
55
|
|
80
56
|
def self.save_last_read_time
|
@@ -90,7 +66,7 @@ module Daengine
|
|
90
66
|
end
|
91
67
|
|
92
68
|
def self.read_last_process_time
|
93
|
-
time =
|
69
|
+
time = 2.days.ago
|
94
70
|
begin
|
95
71
|
target = Daengine.config[:daengine_yml_file]
|
96
72
|
property = YAML.load_file(target)
|
@@ -125,28 +125,34 @@ module Daengine::TeamsiteMetadataParser
|
|
125
125
|
def self.trim_package(asset_docs, last_read = nil)
|
126
126
|
docs = []
|
127
127
|
path = Daengine.config[:digital_assets_file_directory]
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
128
|
+
if Dir.exist?(path) # dont throw away assets if we can't locate the dir
|
129
|
+
asset_docs.each do |doc|
|
130
|
+
#exclude manifest_file
|
131
|
+
unless doc['path'].match('\/manifest\/')
|
132
|
+
file = File.join(path, doc['path'])
|
133
|
+
#exclude digital_asset_files that are not in *Teamsite Staging*
|
134
|
+
if File.exist?(file)
|
135
|
+
docs << doc
|
136
|
+
if(File.mtime(file) > last_read)
|
137
|
+
begin
|
138
|
+
exifdata = ::MiniExiftool.new("#{file}") # spaces in filename
|
139
|
+
doc['pages'] = exifdata.pagecount # or exifdata['Slides']
|
140
|
+
doc['size'] = exifdata.filesize
|
141
|
+
doc['mime_type'] = exifdata.mimetype
|
142
|
+
rescue Exception => e
|
143
|
+
Daengine.log "Error reading metadata from #{file} #{e.message}", "error"
|
144
|
+
end
|
143
145
|
end
|
146
|
+
else
|
147
|
+
# the file was missing on disk, show a warning!
|
148
|
+
Daengine.log("TeamsiteMetadataParser: Unable to locate file #{file} on disk! Removing from metadata", "warn")
|
144
149
|
end
|
145
|
-
else
|
146
|
-
# the file was missing on disk, show a warning!
|
147
|
-
Daengine.log("TeamsiteMetadataParser: Unable to locate file #{file} on disk! Removing from metadata", "warn")
|
148
150
|
end
|
149
151
|
end
|
152
|
+
else
|
153
|
+
Daengine.log("******************", "error")
|
154
|
+
Daengine.log("ERROR!!! Unable to locate physical teamsite files at #{path}", "error")
|
155
|
+
Daengine.log("******************", "error")
|
150
156
|
end
|
151
157
|
docs
|
152
158
|
end
|
data/lib/daengine/version.rb
CHANGED
data/spec/dummy/log/test.log
CHANGED
@@ -24295,3 +24295,103 @@ Completed 200 OK in 5ms (Views: 3.0ms)
|
|
24295
24295
|
Processing by DigitalAssetsController#search as HTML
|
24296
24296
|
Parameters: {"guid"=>"blargh-blargh-blargh", "title"=>"Doc Title"}
|
24297
24297
|
Completed 200 OK in 20ms (Views: 14.0ms)
|
24298
|
+
Processing by DigitalAssetsController#index as HTML
|
24299
|
+
Rendered c:/dev/rails/daengine/app/views/digital_assets/index.html.erb within layouts/application (17.0ms)
|
24300
|
+
Completed 200 OK in 97ms (Views: 94.0ms)
|
24301
|
+
Processing by DigitalAssetsController#show as HTML
|
24302
|
+
Parameters: {"id"=>"guid-foobar-permanent-2"}
|
24303
|
+
Completed 200 OK in 37ms (Views: 6.0ms)
|
24304
|
+
Processing by DigitalAssetsController#show as HTML
|
24305
|
+
Parameters: {"id"=>"IL1111.077"}
|
24306
|
+
Completed 200 OK in 19ms (Views: 4.0ms)
|
24307
|
+
Processing by DigitalAssetsController#show as HTML
|
24308
|
+
Parameters: {"id"=>"IL1111.077"}
|
24309
|
+
Completed 200 OK in 19ms (Views: 3.0ms)
|
24310
|
+
Processing by DigitalAssetsController#show as HTML
|
24311
|
+
Parameters: {"id"=>"guid-foobar-permanent-6"}
|
24312
|
+
Completed 200 OK in 19ms (Views: 5.0ms)
|
24313
|
+
Processing by DigitalAssetsController#search as HTML
|
24314
|
+
Completed 200 OK in 8ms (Views: 7.0ms)
|
24315
|
+
Processing by DigitalAssetsController#search as HTML
|
24316
|
+
Parameters: {"path"=>"/one/off.path"}
|
24317
|
+
Completed 200 OK in 6ms (Views: 4.0ms)
|
24318
|
+
Processing by DigitalAssetsController#search as HTML
|
24319
|
+
Parameters: {"doctype"=>"666"}
|
24320
|
+
Completed 200 OK in 8ms (Views: 4.0ms)
|
24321
|
+
Processing by DigitalAssetsController#search as HTML
|
24322
|
+
Parameters: {"doctype"=>["666", "777"]}
|
24323
|
+
Completed 200 OK in 9ms (Views: 8.0ms)
|
24324
|
+
Processing by DigitalAssetsController#search as HTML
|
24325
|
+
Parameters: {"sami"=>"SOMETHING.001"}
|
24326
|
+
Completed 200 OK in 18ms (Views: 17.0ms)
|
24327
|
+
Processing by DigitalAssetsController#search as HTML
|
24328
|
+
Parameters: {"audience"=>"492"}
|
24329
|
+
Completed 200 OK in 4ms (Views: 3.0ms)
|
24330
|
+
Processing by DigitalAssetsController#search as HTML
|
24331
|
+
Parameters: {"title"=>"Doc Title"}
|
24332
|
+
Completed 200 OK in 6ms (Views: 3.0ms)
|
24333
|
+
Processing by DigitalAssetsController#search as HTML
|
24334
|
+
Parameters: {"guid"=>"guid-foobar-permanent-28"}
|
24335
|
+
Completed 200 OK in 6ms (Views: 5.0ms)
|
24336
|
+
Processing by DigitalAssetsController#search as HTML
|
24337
|
+
Parameters: {"business_owner"=>"biz owner"}
|
24338
|
+
Completed 200 OK in 7ms (Views: 3.0ms)
|
24339
|
+
Processing by DigitalAssetsController#search as HTML
|
24340
|
+
Parameters: {"guid"=>"guid-foobar-permanent-35", "title"=>"Doc Title"}
|
24341
|
+
Completed 200 OK in 7ms (Views: 6.0ms)
|
24342
|
+
Processing by DigitalAssetsController#search as HTML
|
24343
|
+
Parameters: {"title"=>"Doc Title", "audiences"=>["490"], "sami"=>"IL1111.077"}
|
24344
|
+
Completed 200 OK in 5ms (Views: 3.0ms)
|
24345
|
+
Processing by DigitalAssetsController#search as HTML
|
24346
|
+
Parameters: {"guid"=>"blargh-blargh-blargh", "title"=>"Doc Title"}
|
24347
|
+
Completed 200 OK in 20ms (Views: 14.0ms)
|
24348
|
+
Processing by DigitalAssetsController#index as HTML
|
24349
|
+
Rendered c:/dev/rails/daengine/app/views/digital_assets/index.html.erb within layouts/application (17.0ms)
|
24350
|
+
Completed 200 OK in 94ms (Views: 90.0ms)
|
24351
|
+
Processing by DigitalAssetsController#show as HTML
|
24352
|
+
Parameters: {"id"=>"guid-foobar-permanent-2"}
|
24353
|
+
Completed 200 OK in 20ms (Views: 6.0ms)
|
24354
|
+
Processing by DigitalAssetsController#show as HTML
|
24355
|
+
Parameters: {"id"=>"IL1111.077"}
|
24356
|
+
Completed 200 OK in 19ms (Views: 4.0ms)
|
24357
|
+
Processing by DigitalAssetsController#show as HTML
|
24358
|
+
Parameters: {"id"=>"IL1111.077"}
|
24359
|
+
Completed 200 OK in 21ms (Views: 3.0ms)
|
24360
|
+
Processing by DigitalAssetsController#show as HTML
|
24361
|
+
Parameters: {"id"=>"guid-foobar-permanent-6"}
|
24362
|
+
Completed 200 OK in 18ms (Views: 5.0ms)
|
24363
|
+
Processing by DigitalAssetsController#search as HTML
|
24364
|
+
Completed 200 OK in 10ms (Views: 9.0ms)
|
24365
|
+
Processing by DigitalAssetsController#search as HTML
|
24366
|
+
Parameters: {"path"=>"/one/off.path"}
|
24367
|
+
Completed 200 OK in 5ms (Views: 3.0ms)
|
24368
|
+
Processing by DigitalAssetsController#search as HTML
|
24369
|
+
Parameters: {"doctype"=>"666"}
|
24370
|
+
Completed 200 OK in 8ms (Views: 3.0ms)
|
24371
|
+
Processing by DigitalAssetsController#search as HTML
|
24372
|
+
Parameters: {"doctype"=>["666", "777"]}
|
24373
|
+
Completed 200 OK in 10ms (Views: 9.0ms)
|
24374
|
+
Processing by DigitalAssetsController#search as HTML
|
24375
|
+
Parameters: {"sami"=>"SOMETHING.001"}
|
24376
|
+
Completed 200 OK in 18ms (Views: 17.0ms)
|
24377
|
+
Processing by DigitalAssetsController#search as HTML
|
24378
|
+
Parameters: {"audience"=>"492"}
|
24379
|
+
Completed 200 OK in 4ms (Views: 3.0ms)
|
24380
|
+
Processing by DigitalAssetsController#search as HTML
|
24381
|
+
Parameters: {"title"=>"Doc Title"}
|
24382
|
+
Completed 200 OK in 6ms (Views: 3.0ms)
|
24383
|
+
Processing by DigitalAssetsController#search as HTML
|
24384
|
+
Parameters: {"guid"=>"guid-foobar-permanent-28"}
|
24385
|
+
Completed 200 OK in 6ms (Views: 5.0ms)
|
24386
|
+
Processing by DigitalAssetsController#search as HTML
|
24387
|
+
Parameters: {"business_owner"=>"biz owner"}
|
24388
|
+
Completed 200 OK in 7ms (Views: 3.0ms)
|
24389
|
+
Processing by DigitalAssetsController#search as HTML
|
24390
|
+
Parameters: {"guid"=>"guid-foobar-permanent-35", "title"=>"Doc Title"}
|
24391
|
+
Completed 200 OK in 8ms (Views: 6.0ms)
|
24392
|
+
Processing by DigitalAssetsController#search as HTML
|
24393
|
+
Parameters: {"title"=>"Doc Title", "audiences"=>["490"], "sami"=>"IL1111.077"}
|
24394
|
+
Completed 200 OK in 4ms (Views: 3.0ms)
|
24395
|
+
Processing by DigitalAssetsController#search as HTML
|
24396
|
+
Parameters: {"guid"=>"blargh-blargh-blargh", "title"=>"Doc Title"}
|
24397
|
+
Completed 200 OK in 21ms (Views: 14.0ms)
|
data/spec/mock_data/daengine.yml
CHANGED
@@ -1 +1 @@
|
|
1
|
-
last_read_time:
|
1
|
+
last_read_time: 2012-08-28 11:03:30 -0600
|
@@ -1 +1 @@
|
|
1
|
-
last_read_time:
|
1
|
+
last_read_time: 2012-08-28 11:03:30 -0600
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: daengine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.3.
|
5
|
+
version: 0.3.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- sbhatia
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-31 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|