eco-helpers 2.0.42 → 2.0.46
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/CHANGELOG.md +48 -0
- data/eco-helpers.gemspec +2 -2
- data/lib/eco/api/microcases/people_load.rb +1 -1
- data/lib/eco/api/policies/default_policies/99_user_access_policy.rb +1 -1
- data/lib/eco/api/session/batch/job.rb +2 -1
- data/lib/eco/api/session/batch.rb +40 -3
- data/lib/eco/api/session.rb +5 -0
- data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +9 -5
- data/lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb +2 -2
- data/lib/eco/api/usecases/ooze_samples/register_export_case.rb +184 -0
- data/lib/eco/api/usecases/ooze_samples/register_update_case.rb +39 -1
- data/lib/eco/api/usecases/ooze_samples.rb +1 -0
- data/lib/eco/cli/config/default/workflow.rb +11 -2
- data/lib/eco/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd9b2a6564e5ce38fa3ed762ab04f5e4e79b1a6580738d9091b846233c6fb66e
|
4
|
+
data.tar.gz: ac0200ad60b30fc0d40997b4975f016daee8cd48c881bfecae106ca0867ff123
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f72270169fd60eaee60b27d333391bc6d2235fe856752d9f7dcd5d5aca18fd129e148cd0830bea37cd86833cabc64f10e4fb09e71c4ba2ba9b6912313da82b4a
|
7
|
+
data.tar.gz: 690b338d062020a6d80794d794f00f8ce9c263bb8b12a84f774f50193bd49ff474b6a49f670a1e05df9a2db88f70d3639c54582fc8706617c44123753c0a7b9e
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,54 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [2.0.46] - 2021-12-24
|
5
|
+
|
6
|
+
### Added
|
7
|
+
- `Eco::API::UseCases::OozeSamples::RegisterUpdateCase`
|
8
|
+
- added counter of retrieved entries (to be able to compare with matched initially scoped results)
|
9
|
+
- added also counter of failed to retrieve oozes
|
10
|
+
- added also counter of double ups in search pagination
|
11
|
+
- counter for updated pages and pages that failed update
|
12
|
+
- `Eco::API::Session#enviro_name`: to identify in whic environment we are running
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
- upgraded `ecoportal-api-v2` dependency
|
16
|
+
- `Eco::API::UseCases::OozeSamples::OozeBaseCase#update_ooze`
|
17
|
+
- To return `false` if there was request made to the server
|
18
|
+
- To return `Reponse` if there was request made to the server
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
- Changed the `workflow` in
|
22
|
+
- `on(:end)` to do not recache people if there were no `:sync` or `:transform` cases
|
23
|
+
- `Eco::API::UseCases::OozeSamples::OozeRunBaseCase#update_ooze`
|
24
|
+
- It's parent had parameter (it as a child should so)
|
25
|
+
- `Eco::API::UseCases::OozeSamples::OozeBaseCase#process_ooze`
|
26
|
+
- It was not retrieving the `ooze` unless explicitly passed as parameter
|
27
|
+
- This did not play well with child implementations that expect it to retrieve it based on `ooze_id` cli argument
|
28
|
+
|
29
|
+
## [2.0.45] - 2021-12-15
|
30
|
+
|
31
|
+
### Added
|
32
|
+
- `Eco::API::UseCases::OozeSamples::RegisterExportCase`
|
33
|
+
|
34
|
+
### Changed
|
35
|
+
- Upgrade `ecoportal-api` dependency
|
36
|
+
- Upgrade `ecoportal-api-v2` dependency
|
37
|
+
|
38
|
+
## [2.0.44] - 2021-11-25
|
39
|
+
|
40
|
+
### Changed
|
41
|
+
- Upgrade `ecoportal-api` dependency
|
42
|
+
|
43
|
+
## [2.0.43] - 2021-11-25
|
44
|
+
|
45
|
+
### Added
|
46
|
+
- `Eco::API::Session::Batch::Job` added better **logging**
|
47
|
+
|
48
|
+
### Changed
|
49
|
+
- `Eco::API::Session::Batch` added **resilience** and **recovery** to connection errors
|
50
|
+
- `Eco::API::Policies::DefaultPolicies::UserAccess` changed logging from `warn` to `info`.
|
51
|
+
|
4
52
|
## [2.0.42] - 2021-10-30
|
5
53
|
|
6
54
|
### Added
|
data/eco-helpers.gemspec
CHANGED
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_development_dependency "yard", ">= 0.9.26", "< 0.10"
|
31
31
|
spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 3.6"
|
32
32
|
|
33
|
-
spec.add_dependency 'ecoportal-api', '>= 0.8.
|
34
|
-
spec.add_dependency 'ecoportal-api-v2', '>= 0.8.
|
33
|
+
spec.add_dependency 'ecoportal-api', '>= 0.8.4', '< 0.9'
|
34
|
+
spec.add_dependency 'ecoportal-api-v2', '>= 0.8.23', '< 0.9'
|
35
35
|
spec.add_dependency 'aws-sdk-s3', '>= 1.83.0', '< 2'
|
36
36
|
spec.add_dependency 'aws-sdk-ses', '>= 1.36.0', '< 2'
|
37
37
|
spec.add_dependency 'dotenv', '>= 2.7.6', '< 2.8'
|
@@ -30,7 +30,7 @@ module Eco
|
|
30
30
|
people_load(modifier: modifier - [:newest, :file])
|
31
31
|
end
|
32
32
|
when modifier.include?(:api)
|
33
|
-
logger.info("Going to get all the people via API")
|
33
|
+
logger.info("Going to get all the people via API (load)")
|
34
34
|
|
35
35
|
start = Time.now
|
36
36
|
session.batch.get_people.tap do |people|
|
@@ -22,7 +22,7 @@ class Eco::API::Policies::DefaultPolicies::UserAccess < Eco::API::Common::Loader
|
|
22
22
|
def warn_account_removal!
|
23
23
|
if account_removed_count > 0
|
24
24
|
msg = "(DefaultPolicy on job '#{job.name}') Removed account to #{account_removed_count} people"
|
25
|
-
session.logger.
|
25
|
+
session.logger.info(msg)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -176,6 +176,7 @@ module Eco
|
|
176
176
|
if pqueue.length > 0
|
177
177
|
req_backup = as_update(pqueue, add_feedback: false)
|
178
178
|
backup_update(req_backup)
|
179
|
+
logger.debug("Job ('#{name}':#{type}): going to launch batch against #{pqueue.count} entries")
|
179
180
|
session.batch.launch(pqueue, method: type).tap do |job_status|
|
180
181
|
@status = job_status
|
181
182
|
status.root = self
|
@@ -334,7 +335,7 @@ module Eco
|
|
334
335
|
handlers.each do |handler|
|
335
336
|
if entries = err_types[handler.name]
|
336
337
|
handler_job = subjobs_add("#{self.name} => #{handler.name}", usecase: handler)
|
337
|
-
logger.debug("Running error handler #{handler.name}")
|
338
|
+
logger.debug("Running error handler #{handler.name} (against #{entries.count} entries)")
|
338
339
|
handler.launch(people: people(entries), session: session, options: options, job: handler_job)
|
339
340
|
logger.debug("Launching job of error handler: #{handler_job.name}")
|
340
341
|
handler_job.launch(simulate: simulate)
|
@@ -92,6 +92,7 @@ module Eco
|
|
92
92
|
return people_api.get_all(params: params, silent: silent)
|
93
93
|
end
|
94
94
|
|
95
|
+
|
95
96
|
def batch_from(data, method:, params: {}, silent: false)
|
96
97
|
fatal "Invalid batch method: #{method}." if !self.class.valid_method?(method)
|
97
98
|
return nil if !data || !data.is_a?(Enumerable)
|
@@ -101,12 +102,23 @@ module Eco
|
|
101
102
|
params = {per_page: DEFAULT_BATCH_BLOCK}.merge(params)
|
102
103
|
per_page = params[:per_page] || DEFAULT_BATCH_BLOCK
|
103
104
|
|
105
|
+
launch_batch(data,
|
106
|
+
method: method,
|
107
|
+
per_page: per_page,
|
108
|
+
people_api: people_api,
|
109
|
+
silent: silent
|
110
|
+
)
|
111
|
+
end
|
112
|
+
|
113
|
+
def launch_batch(data, method:, status: nil, job_mode: true, per_page: DEFAULT_BATCH_BLOCK, people_api: api&.people, silent: false)
|
104
114
|
iteration = 1; done = 0
|
105
115
|
iterations = (data.length.to_f / per_page).ceil
|
106
116
|
|
107
|
-
Eco::API::Session::Batch::Status.new(enviro, queue: data, method: method)
|
117
|
+
status ||= Eco::API::Session::Batch::Status.new(enviro, queue: data, method: method)
|
118
|
+
status.tap do |status|
|
108
119
|
start_time = Time.now
|
109
120
|
start_slice = Time.now; slice = []
|
121
|
+
pending_for_server_error = data.to_a[0..-1]
|
110
122
|
data.each_slice(per_page) do |slice|
|
111
123
|
msg = "starting batch '#{method}' iteration #{iteration}/#{iterations},"
|
112
124
|
msg += " with #{slice.length} entries of #{data.length} -- #{done} done"
|
@@ -115,11 +127,14 @@ module Eco
|
|
115
127
|
|
116
128
|
start_slice = Time.now
|
117
129
|
offer_retry_on(Ecoportal::API::Errors::TimeOut) do
|
118
|
-
people_api.batch do |batch|
|
130
|
+
people_api.batch(job_mode: false) do |batch|
|
119
131
|
slice.each do |person|
|
120
132
|
batch.public_send(method, person) do |response|
|
121
133
|
faltal("Request with no response") unless !!response
|
122
|
-
|
134
|
+
unless server_error?(response)
|
135
|
+
pending_for_server_error.delete(person)
|
136
|
+
status[person] = response
|
137
|
+
end
|
123
138
|
end
|
124
139
|
end
|
125
140
|
end # end batch
|
@@ -128,9 +143,31 @@ module Eco
|
|
128
143
|
iteration += 1
|
129
144
|
done += slice.length
|
130
145
|
end # next slice
|
146
|
+
|
147
|
+
# temporary working around (due to back-end problems with batch/jobs)
|
148
|
+
unless pending_for_server_error.empty?
|
149
|
+
msg = "Going to re-try #{pending_for_server_error.count} due to server errors"
|
150
|
+
logger.info(msg) unless silent
|
151
|
+
launch_batch(pending_for_server_error,
|
152
|
+
status: status,
|
153
|
+
method: method,
|
154
|
+
job_mode: false,
|
155
|
+
per_page: per_page,
|
156
|
+
people_api: people_api,
|
157
|
+
silent: silent
|
158
|
+
)
|
159
|
+
end
|
131
160
|
end
|
132
161
|
end
|
133
162
|
|
163
|
+
def server_error?(response)
|
164
|
+
res_status = response.status
|
165
|
+
server_error = !res_status || res_status.server_error?
|
166
|
+
other_error = !server_error && (!res_status.code || res_status.code < 100)
|
167
|
+
no_body = !server_error && !other_error && !response.body
|
168
|
+
server_error || other_error || no_body
|
169
|
+
end
|
170
|
+
|
134
171
|
def offer_retry_on(error_type, retries_left = 3, &block)
|
135
172
|
begin
|
136
173
|
block.call
|
data/lib/eco/api/session.rb
CHANGED
@@ -17,6 +17,11 @@ module Eco
|
|
17
17
|
logger.debug("LINE COMMAND: #{$0} #{ARGV.join(" ")}")
|
18
18
|
end
|
19
19
|
|
20
|
+
# @retrun [String] the name of the current environment
|
21
|
+
def enviro_name
|
22
|
+
config.active_enviro
|
23
|
+
end
|
24
|
+
|
20
25
|
# @return [Eco::API::Session::Batch] provides helper to launch batch operations.
|
21
26
|
def batch
|
22
27
|
@batch ||= Batch.new(enviro)
|
@@ -20,10 +20,11 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# Write here your script
|
23
|
-
def process_ooze(
|
23
|
+
def process_ooze(ooz = target)
|
24
|
+
ooz ||= ooze
|
24
25
|
raise "You need to inherit from this class ('#{self.class}') and call super with a block" unless block_given?
|
25
|
-
yield(
|
26
|
-
update_ooze(
|
26
|
+
yield(ooz)
|
27
|
+
update_ooze(ooz)
|
27
28
|
end
|
28
29
|
|
29
30
|
protected
|
@@ -109,10 +110,12 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
|
|
109
110
|
exit_error "Stage '#{id_name}' doesn't exist in ooze '#{ooze_id}'"
|
110
111
|
end
|
111
112
|
|
113
|
+
# It fill update the ooze only if it's dirty (it carries changes)
|
114
|
+
# @return [Boolean, Response] `false` if there was not request against the server, `Response` otherwise
|
112
115
|
def update_ooze(ooze = target)
|
113
116
|
if !options[:simulate]
|
114
|
-
return unless dirty?(ooze)
|
115
|
-
|
117
|
+
return false unless dirty?(ooze)
|
118
|
+
|
116
119
|
ooze.validate.tap do |validation|
|
117
120
|
raise validation if validation.is_a?(String)
|
118
121
|
end
|
@@ -133,6 +136,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders:
|
|
133
136
|
end
|
134
137
|
backup_patch!(ooze)
|
135
138
|
exit(0) if dirty?(ooze) && dry_count > DRY_COUNT
|
139
|
+
false
|
136
140
|
end
|
137
141
|
end
|
138
142
|
|
@@ -39,9 +39,9 @@ class Eco::API::UseCases::OozeSamples::OozeRunBaseCase < Eco::API::UseCases::Ooz
|
|
39
39
|
options.dig(:source, :stage_id)
|
40
40
|
end
|
41
41
|
|
42
|
-
def update_ooze
|
42
|
+
def update_ooze(ooz = target)
|
43
43
|
prompt_to_confirm!
|
44
|
-
super
|
44
|
+
super(ooz)
|
45
45
|
end
|
46
46
|
|
47
47
|
def exit_if_no_changes!
|
@@ -0,0 +1,184 @@
|
|
1
|
+
# Use case to update a register
|
2
|
+
# @note
|
3
|
+
# - You can define methods `filters` and `search` to change the target entries of the register
|
4
|
+
# - You need to define the `process_ooze` method
|
5
|
+
# This case expects `options[:source][:register_id]`
|
6
|
+
class Eco::API::UseCases::OozeSamples::RegisterExportCase < Eco::API::Common::Loaders::UseCase
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# @return [Integer] the number of pages to be processed in each batch
|
10
|
+
def batch_size(size = nil)
|
11
|
+
@batch_size ||= 25
|
12
|
+
return @batch_size unless size
|
13
|
+
@batch_size = size
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
include Eco::API::UseCases::OozeSamples::Helpers
|
18
|
+
|
19
|
+
name "register-export-case"
|
20
|
+
type :other
|
21
|
+
|
22
|
+
attr_reader :session, :options, :usecase
|
23
|
+
attr_reader :target
|
24
|
+
|
25
|
+
def main(session, options, usecase)
|
26
|
+
options[:end_get] = false
|
27
|
+
@session = session; @options = options; @usecase = usecase
|
28
|
+
@target = nil
|
29
|
+
raise "You need to inherit from this class ('#{self.class}') and call super with a block" unless block_given?
|
30
|
+
with_each_entry do |ooze|
|
31
|
+
process_ooze(ooze)
|
32
|
+
end
|
33
|
+
yield
|
34
|
+
end
|
35
|
+
|
36
|
+
# Write here your script
|
37
|
+
def process_ooze(ooze = target)
|
38
|
+
raise "You need to inherit from this class ('#{self.class}') and call super with a block" unless block_given?
|
39
|
+
yield(ooze)
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def new_target(object)
|
45
|
+
@target = object
|
46
|
+
end
|
47
|
+
|
48
|
+
def with_each_entry
|
49
|
+
batched_search_results do |page_results|
|
50
|
+
page_results.each do |page_result|
|
51
|
+
if ooz = build_full_ooze(page_result.id)
|
52
|
+
yield(ooz)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# It builds a full page model (not updatable)
|
59
|
+
# @note If it's a page instance with stages, there's where it will be handy
|
60
|
+
# @param ooze_id [String]
|
61
|
+
# @return [Ecoportal::API::V2::Page]
|
62
|
+
def build_full_ooze(ooze_id)
|
63
|
+
if page = ooze(ooze_id)
|
64
|
+
return page unless page.is_a?(Ecoportal::API::V2::Pages::PageStage)
|
65
|
+
secs_doc = page.sections.doc
|
66
|
+
flds_doc = page.components.doc
|
67
|
+
pending_stage_ids = page.stages.map(&:id) - [page.current_stage_id]
|
68
|
+
pending_stage_ids.each do |id|
|
69
|
+
if page = stage(id, ooze: page)
|
70
|
+
page.sections.doc.each do |sec_doc|
|
71
|
+
unless secs_doc.find {|sec| sec["id"] == sec_doc["id"]}
|
72
|
+
secs_doc << sec_doc
|
73
|
+
end
|
74
|
+
end
|
75
|
+
page.components.doc.each do |comp_doc|
|
76
|
+
unless flds_doc.find {|fld| fld["id"] == comp_doc["id"]}
|
77
|
+
flds_doc << comp_doc
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
Ecoportal::API::V2::Page.new(page.doc)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
#def update_oozes(batched_oozes = batch_queue)
|
87
|
+
# batched_oozes.each do |ooze|
|
88
|
+
# update_ooze(ooze)
|
89
|
+
# end
|
90
|
+
# batched_oozes.clear
|
91
|
+
#end
|
92
|
+
|
93
|
+
def batched_search_results
|
94
|
+
raise "Missing block. It yields in slices of #{self.class.batch_size} results" unless block_given?
|
95
|
+
results_preview
|
96
|
+
results = []
|
97
|
+
apiv2.registers.search(register_id, search_options) do |page_result|
|
98
|
+
results << page_result
|
99
|
+
if results.length >= self.class.batch_size
|
100
|
+
yield(results)
|
101
|
+
results = []
|
102
|
+
end
|
103
|
+
end
|
104
|
+
yield(results) unless results.empty?
|
105
|
+
end
|
106
|
+
|
107
|
+
def ooze(ooze_id = nil, stage_id: nil)
|
108
|
+
return target unless ooze_id
|
109
|
+
apiv2.pages.get(ooze_id, stage_id: stage_id).tap do |ooze|
|
110
|
+
if ooze
|
111
|
+
new_target(ooze)
|
112
|
+
logger.info("Got #{object_reference(ooze)}")
|
113
|
+
else
|
114
|
+
exit_error "Could not get ooze '#{ooze_id}'"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def stage(id_name = nil, ooze: target)
|
120
|
+
if ooze_id = ooze && ooze.id
|
121
|
+
exit_error "#{object_reference(ooze)} does not have stages!" unless ooze.stages?
|
122
|
+
else
|
123
|
+
exit_error "There's no target ooze to get retrieve stages from"
|
124
|
+
end
|
125
|
+
|
126
|
+
if stg = ooze.stages[id_name] || ooze.stages.get_by_name(id_name)
|
127
|
+
return ooze if ooze.respond_to?(:current_stage_id) && (ooze.current_stage_id == stg.id)
|
128
|
+
return apiv2.pages.get(ooze_id, stage_id: stg.id).tap do |stage|
|
129
|
+
if stage
|
130
|
+
new_target(stage)
|
131
|
+
logger.info("Got #{object_reference(stage)} from #{object_reference(ooze)}")
|
132
|
+
else
|
133
|
+
exit_error "Could not get stage '#{id_name}' in ooze '#{ooze_id}'"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
exit_error "Stage '#{id_name}' doesn't exist in ooze '#{ooze_id}'"
|
138
|
+
end
|
139
|
+
|
140
|
+
def results_preview
|
141
|
+
apiv2.registers.search(register_id, search_options.merge(only_first: true)).tap do |search_results|
|
142
|
+
str_results = "Total target entries: #{search_results.total} (out of #{search_results.total_before_filtering})"
|
143
|
+
session.prompt_user("Do you want to proceed (y/N):", explanation: str_results, default: "N", timeout: 10) do |res|
|
144
|
+
unless res.upcase.start_with?("Y")
|
145
|
+
puts "..."
|
146
|
+
logger.info "Aborting script..."
|
147
|
+
exit(0)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def search_options
|
154
|
+
@search_options ||= {}.tap do |opts|
|
155
|
+
opts.merge!(sort: "created_at")
|
156
|
+
opts.merge!(dir: "asc")
|
157
|
+
opts.merge!(query: conf_search) if conf_search
|
158
|
+
opts.merge!(filters: conf_filters)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def conf_filters
|
163
|
+
return filters if self.respond_to?(:filters)
|
164
|
+
[]
|
165
|
+
end
|
166
|
+
|
167
|
+
def conf_search
|
168
|
+
return search if self.respond_to?(:search)
|
169
|
+
end
|
170
|
+
|
171
|
+
def register_id
|
172
|
+
options.dig(:source, :register_id)
|
173
|
+
end
|
174
|
+
|
175
|
+
def apiv2
|
176
|
+
@apiv2 ||= session.api(version: :oozes)
|
177
|
+
end
|
178
|
+
|
179
|
+
def exit_error(msg)
|
180
|
+
logger.error(msg)
|
181
|
+
exit(1)
|
182
|
+
end
|
183
|
+
|
184
|
+
end
|
@@ -17,12 +17,30 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
17
17
|
name "register-update-case"
|
18
18
|
type :other
|
19
19
|
|
20
|
+
attr_reader :retrieved_oozes, :non_retrieved_oozes
|
21
|
+
attr_reader :total_search_oozes, :dupped_search_oozes
|
22
|
+
attr_reader :ooze_result_ids, :updated_oozes, :failed_update_oozes
|
23
|
+
|
20
24
|
def main(session, options, usecase, &block)
|
25
|
+
@retrieved_oozes = 0
|
26
|
+
@non_retrieved_oozes = 0
|
27
|
+
@dupped_search_oozes = 0
|
28
|
+
@ooze_result_ids = {}
|
29
|
+
@updated_oozes = 0
|
30
|
+
@failed_update_oozes = 0
|
31
|
+
|
21
32
|
super(session, options, usecase) do
|
22
33
|
with_each_entry do |ooze|
|
23
34
|
process_ooze(&block)
|
24
35
|
end
|
25
36
|
end
|
37
|
+
msg = "Run end:\n"
|
38
|
+
msg += " • Search results: #{total_search_oozes}\n"
|
39
|
+
msg += " • Duplicated search results #{dupped_search_oozes}\n"
|
40
|
+
msg += " • Retrieved a total of #{retrieved_oozes}\n"
|
41
|
+
msg += " • Could not get #{non_retrieved_oozes} oozes.\n"
|
42
|
+
msg += " • Updated #{updated_oozes} oozes (failed update on #{failed_update_oozes} oozes).\n"
|
43
|
+
logger.info(msg)
|
26
44
|
end
|
27
45
|
|
28
46
|
def process_ooze(ooze = target)
|
@@ -47,7 +65,14 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
47
65
|
def with_each_entry
|
48
66
|
batched_search_results do |page_results|
|
49
67
|
page_results.each do |page_result|
|
68
|
+
if ooze_result_ids[page_result.id]
|
69
|
+
@dupped_search_oozes += 1
|
70
|
+
else
|
71
|
+
ooze_result_ids[page_result.id] = true
|
72
|
+
end
|
73
|
+
|
50
74
|
if pending = queue_shift(page_result.id)
|
75
|
+
|
51
76
|
if dirty?(pending)
|
52
77
|
msg = "Inconsistent search results. "
|
53
78
|
msg << "Launching update on '#{object_reference(pending)}' to be able to queue it back"
|
@@ -56,7 +81,11 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
56
81
|
end
|
57
82
|
end
|
58
83
|
if ooz = ooze(page_result.id)
|
84
|
+
@retrieved_oozes += 1
|
59
85
|
yield(ooz)
|
86
|
+
else
|
87
|
+
@non_retrieved_oozes += 1
|
88
|
+
console.warn "Could not get page #{page_result.id}"
|
60
89
|
end
|
61
90
|
end
|
62
91
|
update_oozes
|
@@ -113,7 +142,15 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
113
142
|
|
114
143
|
def update_oozes(batched_oozes = batch_queue)
|
115
144
|
batched_oozes.each do |ooze|
|
116
|
-
update_ooze(ooze)
|
145
|
+
update_ooze(ooze).tap do |result|
|
146
|
+
if result.is_a?(Ecoportal::API::Common::Response)
|
147
|
+
if result.success?
|
148
|
+
@updated_oozes += 1
|
149
|
+
else
|
150
|
+
@failed_update_oozes +=1
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
117
154
|
end
|
118
155
|
batched_oozes.clear
|
119
156
|
end
|
@@ -127,6 +164,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::
|
|
127
164
|
|
128
165
|
def results_preview
|
129
166
|
apiv2.registers.search(register_id, search_options.merge(only_first: true)).tap do |search_results|
|
167
|
+
@total_search_oozes = search_results.total
|
130
168
|
str_results = "Total target entries: #{search_results.total} (out of #{search_results.total_before_filtering})"
|
131
169
|
session.prompt_user("Do you want to proceed (y/N):", explanation: str_results, default: "N", timeout: 10) do |res|
|
132
170
|
unless res.upcase.start_with?("Y")
|
@@ -10,6 +10,7 @@ end
|
|
10
10
|
|
11
11
|
require_relative 'ooze_samples/helpers'
|
12
12
|
require_relative 'ooze_samples/ooze_base_case'
|
13
|
+
require_relative 'ooze_samples/register_export_case'
|
13
14
|
require_relative 'ooze_samples/ooze_run_base_case'
|
14
15
|
require_relative 'ooze_samples/ooze_update_case'
|
15
16
|
require_relative 'ooze_samples/ooze_from_doc_case'
|
@@ -3,6 +3,8 @@ ASSETS.cli.config do |config|
|
|
3
3
|
|
4
4
|
io = nil
|
5
5
|
rescued = false
|
6
|
+
cases_with_input = nil
|
7
|
+
cases_with_output = nil
|
6
8
|
|
7
9
|
# default rescue
|
8
10
|
wf.rescue do |exception, io|
|
@@ -165,9 +167,16 @@ ASSETS.cli.config do |config|
|
|
165
167
|
wf.on(:end) do |wf_end, io|
|
166
168
|
get_people = io.options.dig(:people, :get)
|
167
169
|
partial_update = get_people && get_people.dig(:type) == :partial
|
170
|
+
|
168
171
|
unless !io.options[:end_get] || io.options[:dry_run] || partial_update
|
169
|
-
|
170
|
-
|
172
|
+
people_update_cases = config.usecases.active(io: io).any? do |usecase, data|
|
173
|
+
[:transform, :sync].any? {|type| usecase.type == type}
|
174
|
+
end
|
175
|
+
|
176
|
+
if !people_update_cases
|
177
|
+
# Prevent getting people when there were no use cases that used them
|
178
|
+
io.session.logger.info("Won't be recaching people, as there haven't been any targetted updates")
|
179
|
+
elsif !io.people
|
171
180
|
people = io.session.micro.people_cache
|
172
181
|
io = io.new(people: people)
|
173
182
|
end
|
data/lib/eco/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eco-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.46
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
@@ -116,7 +116,7 @@ dependencies:
|
|
116
116
|
requirements:
|
117
117
|
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
|
-
version: 0.8.
|
119
|
+
version: 0.8.4
|
120
120
|
- - "<"
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '0.9'
|
@@ -126,7 +126,7 @@ dependencies:
|
|
126
126
|
requirements:
|
127
127
|
- - ">="
|
128
128
|
- !ruby/object:Gem::Version
|
129
|
-
version: 0.8.
|
129
|
+
version: 0.8.4
|
130
130
|
- - "<"
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0.9'
|
@@ -136,7 +136,7 @@ dependencies:
|
|
136
136
|
requirements:
|
137
137
|
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: 0.8.
|
139
|
+
version: 0.8.23
|
140
140
|
- - "<"
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: '0.9'
|
@@ -146,7 +146,7 @@ dependencies:
|
|
146
146
|
requirements:
|
147
147
|
- - ">="
|
148
148
|
- !ruby/object:Gem::Version
|
149
|
-
version: 0.8.
|
149
|
+
version: 0.8.23
|
150
150
|
- - "<"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0.9'
|
@@ -564,6 +564,7 @@ files:
|
|
564
564
|
- lib/eco/api/usecases/ooze_samples/ooze_from_doc_case.rb
|
565
565
|
- lib/eco/api/usecases/ooze_samples/ooze_run_base_case.rb
|
566
566
|
- lib/eco/api/usecases/ooze_samples/ooze_update_case.rb
|
567
|
+
- lib/eco/api/usecases/ooze_samples/register_export_case.rb
|
567
568
|
- lib/eco/api/usecases/ooze_samples/register_update_case.rb
|
568
569
|
- lib/eco/api/usecases/ooze_samples/target_oozes_update_case.rb
|
569
570
|
- lib/eco/api/usecases/use_case.rb
|