dor-services 8.1.1 → 8.2.0
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/lib/dor/datastreams/workflow_definition_ds.rb +1 -0
- data/lib/dor/indexers/workflow_indexer.rb +28 -29
- data/lib/dor/indexers/workflows_indexer.rb +7 -7
- data/lib/dor/models/workflow_object.rb +1 -0
- data/lib/dor/services/state_service.rb +2 -1
- data/lib/dor/version.rb +1 -1
- data/lib/dor/workflow/document.rb +1 -0
- data/lib/dor/workflow/process.rb +1 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55aca082954da26152f1a29b2212755d957a1d7fdf1d2dd87ff373555ab4d66e
|
4
|
+
data.tar.gz: ca157bb92f8dabe93a9d49e9d862f8cdfcaee9b7d59fe6510cfd8180b67cd19c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4ca1272b55af9e0c828fa678d6a51a669f3614c72b367a51c2bf22ba29dc69ccc1ad44482756c704bca319b3b7decc47a7a44a24ef62457062b38975c472a3c
|
7
|
+
data.tar.gz: 609b3cb8a631c40979aea5e37086ed50550fd42d3ea1e3bede01b10942c01942b0fc2db86fcaaf893d7fb8ad9389c93c6be25abbe34acca042527c79ab19e96e
|
@@ -10,75 +10,74 @@ module Dor
|
|
10
10
|
MAX_ERROR_LENGTH = 32_768 - 2 - ERROR_OMISSION.length
|
11
11
|
private_constant :MAX_ERROR_LENGTH
|
12
12
|
|
13
|
-
# @param [
|
14
|
-
def initialize(
|
15
|
-
@
|
13
|
+
# @param [Workflow::Response::Workflow] workflow the workflow document to index
|
14
|
+
def initialize(workflow:)
|
15
|
+
@workflow = workflow
|
16
16
|
end
|
17
17
|
|
18
18
|
# @return [Hash] the partial solr document for the workflow document
|
19
19
|
def to_solr
|
20
20
|
WorkflowSolrDocument.new do |solr_doc|
|
21
|
-
|
22
|
-
solr_doc.name =
|
23
|
-
|
24
|
-
|
25
|
-
repo = document.repository.first
|
26
|
-
solr_doc.status = [wf_name, workflow_status, errors, repo].join('|')
|
21
|
+
definition = Dor::Config.workflow.client.workflow_template(workflow_name)
|
22
|
+
solr_doc.name = workflow_name
|
23
|
+
processes_names = definition['processes'].map { |p| p['name'] }
|
27
24
|
|
25
|
+
errors = 0 # The error count is used by the Report class in Argo
|
26
|
+
processes = processes_names.map do |process_name|
|
27
|
+
workflow.process_for_recent_version(name: process_name)
|
28
|
+
end
|
28
29
|
processes.each do |process|
|
29
|
-
index_process(solr_doc,
|
30
|
+
index_process(solr_doc, process)
|
31
|
+
errors += 1 if process.status == 'error'
|
30
32
|
end
|
33
|
+
solr_doc.status = [workflow_name, workflow_status(processes), errors, repository].join('|')
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
34
37
|
private
|
35
38
|
|
36
|
-
attr_reader :
|
37
|
-
delegate :
|
39
|
+
attr_reader :workflow
|
40
|
+
delegate :workflow_name, :repository, to: :workflow
|
38
41
|
|
39
|
-
|
40
|
-
|
42
|
+
# @param [Workflow::Response::Process] process
|
43
|
+
def index_process(solr_doc, process)
|
44
|
+
return unless process.status
|
41
45
|
|
42
46
|
# add a record of the robot having operated on this item, so we can track robot activity
|
43
|
-
solr_doc.add_process_time(
|
47
|
+
solr_doc.add_process_time(workflow_name, process.name, Time.parse(process.datetime)) if process_has_time?(process)
|
44
48
|
|
45
|
-
index_error_message(solr_doc,
|
49
|
+
index_error_message(solr_doc, process)
|
46
50
|
|
47
51
|
# workflow name, process status then process name
|
48
|
-
solr_doc.add_wsp("#{
|
52
|
+
solr_doc.add_wsp("#{workflow_name}:#{process.status}", "#{workflow_name}:#{process.status}:#{process.name}")
|
49
53
|
|
50
54
|
# workflow name, process name then process status
|
51
|
-
solr_doc.add_wps("#{
|
55
|
+
solr_doc.add_wps("#{workflow_name}:#{process.name}", "#{workflow_name}:#{process.name}:#{process.status}")
|
52
56
|
|
53
57
|
# process status, workflowname then process name
|
54
|
-
solr_doc.add_swp(process.status.to_s, "#{process.status}:#{
|
55
|
-
return if process.state == process.status
|
56
|
-
|
57
|
-
solr_doc.add_wsp("#{wf_name}:#{process.state}:#{process.name}")
|
58
|
-
solr_doc.add_wps("#{wf_name}:#{process.name}:#{process.state}")
|
59
|
-
solr_doc.add_swp(process.state.to_s, "#{process.state}:#{wf_name}", "#{process.state}:#{wf_name}:#{process.name}")
|
58
|
+
solr_doc.add_swp(process.status.to_s, "#{process.status}:#{workflow_name}", "#{process.status}:#{workflow_name}:#{process.name}")
|
60
59
|
end
|
61
60
|
|
62
61
|
def process_has_time?(process)
|
63
|
-
|
62
|
+
process.datetime && process.status && (process.status == 'completed' || process.status == 'error')
|
64
63
|
end
|
65
64
|
|
66
|
-
def workflow_status
|
65
|
+
def workflow_status(processes)
|
67
66
|
return 'empty' if processes.empty?
|
68
67
|
|
69
68
|
workflow_should_show_completed?(processes) ? 'completed' : 'active'
|
70
69
|
end
|
71
70
|
|
72
71
|
def workflow_should_show_completed?(processes)
|
73
|
-
processes.all? { |p| [
|
72
|
+
processes.all? { |p| %w[skipped completed].include?(p.status) }
|
74
73
|
end
|
75
74
|
|
76
75
|
# index the error message without the druid so we hopefully get some overlap
|
77
76
|
# truncate to avoid org.apache.lucene.util.BytesRefHash$MaxBytesLengthExceededException
|
78
|
-
def index_error_message(solr_doc,
|
77
|
+
def index_error_message(solr_doc, process)
|
79
78
|
return unless process.error_message
|
80
79
|
|
81
|
-
solr_doc.error = "#{
|
80
|
+
solr_doc.error = "#{workflow_name}:#{process.name}:#{process.error_message}".truncate(MAX_ERROR_LENGTH, omission: ERROR_OMISSION)
|
82
81
|
end
|
83
82
|
end
|
84
83
|
end
|
@@ -12,7 +12,7 @@ module Dor
|
|
12
12
|
def to_solr
|
13
13
|
WorkflowSolrDocument.new do |combined_doc|
|
14
14
|
workflows.each do |wf|
|
15
|
-
doc = WorkflowIndexer.new(
|
15
|
+
doc = WorkflowIndexer.new(workflow: wf).to_solr
|
16
16
|
combined_doc.merge!(doc)
|
17
17
|
end
|
18
18
|
end.to_h
|
@@ -20,15 +20,15 @@ module Dor
|
|
20
20
|
|
21
21
|
private
|
22
22
|
|
23
|
-
# @return [Array<
|
23
|
+
# @return [Array<Workflow::Response::Workflow>]
|
24
24
|
def workflows
|
25
|
-
|
26
|
-
nodeset = Nokogiri::XML(all_workflows_xml).xpath('/workflows/workflow')
|
27
|
-
nodeset.map { |wf_node| Workflow::Document.new wf_node.to_xml }
|
25
|
+
all_workflows.workflows
|
28
26
|
end
|
29
27
|
|
30
|
-
|
31
|
-
|
28
|
+
# TODO: remove Dor::Workflow::Document
|
29
|
+
# @return [Workflow::Response::Workflows]
|
30
|
+
def all_workflows
|
31
|
+
@all_workflows ||= Dor::Config.workflow.client.workflow_routes.all_workflows pid: resource.pid
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -7,13 +7,14 @@ module Dor
|
|
7
7
|
# having version is preferred as without it, a call to
|
8
8
|
# fedora will be made to retrieve it.
|
9
9
|
def initialize(pid, version: nil)
|
10
|
+
Deprecation.warn(self, 'Dor::StateService is deprecated and will be removed in dor-services 9')
|
10
11
|
@pid = pid
|
11
12
|
@version = version || fetch_version
|
12
13
|
end
|
13
14
|
|
14
15
|
def allows_modification?
|
15
16
|
!client.lifecycle('dor', pid, 'submitted') ||
|
16
|
-
client.active_lifecycle('dor', pid, 'opened') ||
|
17
|
+
client.active_lifecycle('dor', pid, 'opened', version: version) ||
|
17
18
|
client.workflow_status('dor', pid, 'accessionWF', 'sdr-ingest-transfer') == 'hold'
|
18
19
|
end
|
19
20
|
|
data/lib/dor/version.rb
CHANGED
data/lib/dor/workflow/process.rb
CHANGED
@@ -9,6 +9,7 @@ module Dor
|
|
9
9
|
# @param workflow [String] the name of the workflow, e.g. 'assemblyWF'
|
10
10
|
# @param attrs [Nokogiri::XML::Node, Hash]
|
11
11
|
def initialize(repo, workflow, attrs)
|
12
|
+
Deprecation.warn(self, 'Dor::Workflow::Process is deprecated and will be removed from dor-services version 9')
|
12
13
|
@workflow = workflow
|
13
14
|
@repo = repo
|
14
15
|
if attrs.is_a? Nokogiri::XML::Node
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dor-services
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Klein
|
@@ -20,7 +20,7 @@ authors:
|
|
20
20
|
autorequire:
|
21
21
|
bindir: bin
|
22
22
|
cert_chain: []
|
23
|
-
date: 2019-
|
23
|
+
date: 2019-12-20 00:00:00.000000000 Z
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: active-fedora
|
@@ -240,14 +240,14 @@ dependencies:
|
|
240
240
|
requirements:
|
241
241
|
- - "~>"
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version: '3.
|
243
|
+
version: '3.9'
|
244
244
|
type: :runtime
|
245
245
|
prerelease: false
|
246
246
|
version_requirements: !ruby/object:Gem::Requirement
|
247
247
|
requirements:
|
248
248
|
- - "~>"
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version: '3.
|
250
|
+
version: '3.9'
|
251
251
|
- !ruby/object:Gem::Dependency
|
252
252
|
name: druid-tools
|
253
253
|
requirement: !ruby/object:Gem::Requirement
|