eco-helpers 2.0.45 → 2.0.49

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f85bd156250d1f44ca911d98007005cbbb2281ff4a40a2fc07a80680fd42a408
4
- data.tar.gz: 4ccda90fbf7d1bbfc814d18cd033110b7af2ae366687af1fa2db10370788c52d
3
+ metadata.gz: 9b4a2ad99ea2e78519b611cdcdb74743ae9dd1a8f5707164ebcc686c21d83700
4
+ data.tar.gz: b9387499878102825b1396bf35394cc12c35c4b738380f3bfd52e2407c4239af
5
5
  SHA512:
6
- metadata.gz: f4b7add6e04fb8b4dfa0c56371bc3f85e791659754e937f60586b88dec06186723f9286c87482144bd9b012298dbc03251388c49f1245008026a186cd6d16a88
7
- data.tar.gz: 7a0bfda7154a8c0e7bb7e18100a96cd2a45f26a6d45309725e7d796dd9d0ad48cefb35be551c031706757d1241fab7505d74f401cf6a04764547bbe8c582e076
6
+ metadata.gz: d574a346ba439207b85cfd1e265ed4b3c3f3742dd6308adfc8a873717bea8fd0f9ceaec49fcde1ea5575068c4e00395a4a200b42d624b45e707bd89d68b4560a
7
+ data.tar.gz: 99a77ede34b322d1ebe6ad54822db841ae111e7063a4dbd6317dd092222a43919e8e059536db9f9c386bbbc31cd8043e64192f425a4fae055f3511ae6f622e67
data/CHANGELOG.md CHANGED
@@ -1,17 +1,74 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
- ## [2.0.45] - 2021-11-xx
4
+ ## [2.0.49] - 2022-02-14
5
+
6
+ ### Added
7
+ - `Eco::API::Session::Batch::RequestStats#message` now it shows which details have changed
8
+ - `Eco::API::UseCases::DefaultCases::ReinviteTransCase` the option `-force` will also send an invite to users that have accepted the invitation
9
+
10
+ ### Changed
11
+ ### Fixed
12
+
13
+ ## [2.0.48] - 2022-02-04
14
+
15
+ ### Changed
16
+ - upgraded `ecoportal-api-v2` dependency
17
+
18
+ ### Fixed
19
+ - `Eco::API::Common::People::EntryFactory#get_file_content`
20
+ - Call to `String#scrub` to prevent _invalid byte sequence_ error by replacing those characters by their coding identifier
21
+ - This has been implemented with a max tolerance of 5 byte sequence errors
22
+ - Errors are logged (although could not get to identify the line :/)
23
+
24
+ ## [2.0.47] - 2022-02-03
25
+
26
+ ### Added
27
+ - `Eco::API::UseCases::DefaultCases::CleanUnknownTags`
28
+ - It is possible to extend or override `register_tags`
29
+ - New command option `-include-register-tags` (will not ignore register tags; they will be removed too)
30
+ - `Eco::API::UseCases::DefaultCases::Samples::Sftp`
31
+ - Default sample case to list, get and archive SFTP remote files
32
+ ### Changed
33
+ - upgraded `ecoportal-api-v2` dependency
34
+
35
+ ### Fixed
36
+ - `Eco::API::Common::Session::S3Uploader#upload_file`: check if file exists before opening.
37
+
38
+ ## [2.0.46] - 2021-12-24
39
+
40
+ ### Added
41
+ - `Eco::API::UseCases::OozeSamples::RegisterUpdateCase`
42
+ - added counter of retrieved entries (to be able to compare with matched initially scoped results)
43
+ - added also counter of failed to retrieve oozes
44
+ - added also counter of double ups in search pagination
45
+ - counter for updated pages and pages that failed update
46
+ - `Eco::API::Session#enviro_name`: to identify in which environment we are running
47
+
48
+ ### Changed
49
+ - upgraded `ecoportal-api-v2` dependency
50
+ - `Eco::API::UseCases::OozeSamples::OozeBaseCase#update_ooze`
51
+ - To return `false` if there was request made to the server
52
+ - To return `Reponse` if there was request made to the server
53
+
54
+ ### Fixed
55
+ - Changed the `workflow` in
56
+ - `on(:end)` to do not recache people if there were no `:sync` or `:transform` cases
57
+ - `Eco::API::UseCases::OozeSamples::OozeRunBaseCase#update_ooze`
58
+ - It's parent had parameter (it as a child should so)
59
+ - `Eco::API::UseCases::OozeSamples::OozeBaseCase#process_ooze`
60
+ - It was not retrieving the `ooze` unless explicitly passed as parameter
61
+ - This did not play well with child implementations that expect it to retrieve it based on `ooze_id` cli argument
62
+
63
+ ## [2.0.45] - 2021-12-15
5
64
 
6
65
  ### Added
7
66
  - `Eco::API::UseCases::OozeSamples::RegisterExportCase`
8
-
67
+
9
68
  ### Changed
10
69
  - Upgrade `ecoportal-api` dependency
11
70
  - Upgrade `ecoportal-api-v2` dependency
12
71
 
13
- ### Fixed
14
-
15
72
  ## [2.0.44] - 2021-11-25
16
73
 
17
74
  ### Changed
data/eco-helpers.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 3.6"
32
32
 
33
33
  spec.add_dependency 'ecoportal-api', '>= 0.8.4', '< 0.9'
34
- spec.add_dependency 'ecoportal-api-v2', '>= 0.8.21', '< 0.9'
34
+ spec.add_dependency 'ecoportal-api-v2', '>= 0.8.25', '< 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'
@@ -196,7 +196,23 @@ module Eco
196
196
  ext = File.extname(file)
197
197
  encoding ||= Eco::API::Common::Session::FileManager.encoding(file)
198
198
  encoding = (encoding != "utf-8")? "#{encoding}|utf-8": encoding
199
- content = File.read(file, encoding: encoding)
199
+ read_with_tolerance(file, encoding: encoding)
200
+ end
201
+
202
+ def read_with_tolerance(file, encoding:)
203
+ if content = File.read(file, encoding: encoding)
204
+ tolerance = 5
205
+ content.scrub do |bytes|
206
+ replacement = '<' + bytes.unpack('H*')[0] + '>'
207
+ if tolerance <= 0
208
+ logger.error("There were more than 5 encoding errors in the file '#{file}'.")
209
+ return content
210
+ else
211
+ logger.error("Encoding problem in file '#{file}': '#{replacement}'.")
212
+ replacement
213
+ end
214
+ end
215
+ end
200
216
  end
201
217
 
202
218
  def fatal(msg)
@@ -32,8 +32,10 @@ module Eco
32
32
  # @param path [String] the target file to be uploaded
33
33
  # @return [String] S3 path to the uploaded `path` file
34
34
  def upload_file(path)
35
- File.open(path, "rb") do |f|
36
- upload(File.basename(path), f)
35
+ if File.exist?(path)
36
+ File.open(path, "rb") do |f|
37
+ upload(File.basename(path), f)
38
+ end
37
39
  end
38
40
  end
39
41
 
@@ -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|
@@ -9,6 +9,7 @@ module Eco
9
9
  ACCOUNT_ATTRS = (Eco::API::Common::People::PersonParser::ACCOUNT_ATTRS + ["permissions_custom"]).uniq
10
10
  DETAILS_ATTRS = ["fields"]
11
11
  BLANKED_PREFIX = "blanked_"
12
+ DETAILS_FIELDS = "details_fields"
12
13
 
13
14
  class << self
14
15
 
@@ -74,44 +75,43 @@ module Eco
74
75
  end
75
76
 
76
77
  def message(percent: false)
77
- key_val_delimiter = ": "; attr_delimiter = " ++ "
78
- pairs_to_line = Proc.new do |pairs|
79
- pairs.map do |p|
80
- [p.first.to_s, "#{p.last.to_s}" + (percent ? "%" : "")].join(key_val_delimiter)
81
- end.join(attr_delimiter)
82
- end
83
-
84
78
  lines = []
85
- lines << pairs_to_line.call(core_pairs(percent: percent))
86
- lines << pairs_to_line.call(account_pairs(percent: percent))
87
- lines << pairs_to_line.call(details_pairs(percent: percent))
79
+ lines << pairs_to_line(core_pairs(percent: percent))
80
+ lines << pairs_to_line(account_pairs(percent: percent))
81
+ lines << pairs_to_line(details_pairs(percent: percent))
88
82
  lines.join("\n")
89
83
  end
90
84
 
91
85
  private
92
86
 
93
- def attr(attr, percent: false, total: count)
94
- i = @stats["#{attr}"]
87
+ def attr_value(attr, percent: false, total: count, details: false)
88
+ target = details ? (@stats[DETAILS_FIELDS] || {}) : @stats
89
+ i = target["#{attr}"]
95
90
  return i unless percent
96
91
  percentage(i, total: total)
97
92
  end
98
93
 
99
94
  def core(percent: false)
100
- attr("core", percent: percent)
95
+ attr_value("core", percent: percent)
101
96
  end
102
97
 
103
98
  def account(percent: false)
104
- attr("account", percent: percent)
99
+ attr_value("account", percent: percent)
105
100
  end
106
101
 
107
102
  def details(percent: false)
108
- attr("details", percent: percent)
103
+ attr_value("details", percent: percent)
104
+ end
105
+
106
+ def stats
107
+ @stats ||= Hash.new(0)
109
108
  end
110
109
 
111
110
  def build(requests)
112
- Hash.new(0).tap do |stats|
111
+ stats.tap do |stats|
113
112
  stats[type] = count
114
113
  unless !requests || !requests.is_a?(Enumerable) || requests.empty?
114
+ stats[DETAILS_FIELDS] = Hash.new(0)
115
115
  requests.each_with_index do |request|
116
116
  add_core_stats(stats, request || {})
117
117
  add_account_stats(stats, request || {})
@@ -149,16 +149,15 @@ module Eco
149
149
  if request.key?("details")
150
150
  stats["details"] += 1
151
151
  stats["details_remove"] += 1 if !request["details"]
152
+
153
+ det_attrs = {}
152
154
  if fields = request.dig("details", "fields")
153
155
  stats["fields"] += fields.length
156
+ det_attrs = fields.each_with_object(det_attrs) {|fld, hash| hash[fld["alt_id"]] = fld["value"]}
154
157
  end
155
- end
156
- end
157
158
 
158
- def pairs(attrs, percent: false, total: count)
159
- pairs = attrs.map do |a|
160
- (v = attr(a, percent: percent, total: count)) > 0 ? [a, v] : nil
161
- end.compact
159
+ attrs_to_stat(stats[DETAILS_FIELDS], det_attrs, det_attrs.keys)
160
+ end
162
161
  end
163
162
 
164
163
  def core_pairs(percent: false)
@@ -172,22 +171,23 @@ module Eco
172
171
  end
173
172
 
174
173
  def details_pairs(percent: false)
175
- details_pairs = [["details", details(percent: percent)]]
176
- details_pairs += [["fields", fields_average]] if attr("fields") && fields_average
177
- details_pairs += pairs(["details_remove"], percent: percent, total: details)
174
+ det_pairs = [["details", details(percent: percent)]]
175
+ det_pairs += [["fields", fields_average]] if attr_value("fields") && fields_average
176
+ det_pairs += pairs(["details_remove"], percent: percent, total: details)
177
+ det_pairs += pairs(details_field_attrs, percent: percent, total: details, details: true)
178
178
  end
179
179
 
180
- def fields_average
181
- if (fields_num = attr("fields")) && (total = details) > 0
182
- (fields_num.to_f / total.to_f).round(2)
183
- end
180
+ def pairs(attrs, percent: false, total: count, details: false)
181
+ pairs = attrs.map do |a|
182
+ (v = attr_value(a, percent: percent, total: count, details: details)) > 0 ? [a, v] : nil
183
+ end.compact
184
184
  end
185
185
 
186
- def percentage(num, total: count)
187
- total ||= count
188
- if num
189
- (num.to_f / total * 100).round(2)
190
- end
186
+ def pairs_to_line(pairs, percent: false)
187
+ key_val_delimiter = ": "; attr_delimiter = " ++ "
188
+ pairs.map do |p|
189
+ [p.first.to_s, "#{p.last.to_s}" + (percent ? "%" : "")].join(key_val_delimiter)
190
+ end.join(attr_delimiter)
191
191
  end
192
192
 
193
193
  def core_attrs
@@ -202,6 +202,10 @@ module Eco
202
202
  @details_attrs ||= self.class.details_attrs
203
203
  end
204
204
 
205
+ def details_field_attrs
206
+ @stats[DETAILS_FIELDS].keys
207
+ end
208
+
205
209
  def blank_attrs(attrs)
206
210
  self.class.blank_attrs(attrs)
207
211
  end
@@ -225,6 +229,18 @@ module Eco
225
229
  end
226
230
  end
227
231
 
232
+ def fields_average
233
+ if (fields_num = attr_value("fields")) && (total = details) > 0
234
+ (fields_num.to_f / total.to_f).round(2)
235
+ end
236
+ end
237
+
238
+ def percentage(num, total: count)
239
+ total ||= count
240
+ if num
241
+ (num.to_f / total * 100).round(2)
242
+ end
243
+ end
228
244
  end
229
245
  end
230
246
  end
@@ -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)
@@ -2,6 +2,8 @@ class Eco::API::UseCases::DefaultCases::CleanUnknownTags < Eco::API::Common::Loa
2
2
  name "clean-unknown-tags"
3
3
  type :transform
4
4
 
5
+ UNKNOWN_LOCS_FILE = "unknown_locations.txt"
6
+
5
7
  REGISTER_TAGS = [
6
8
  "EVENT", "INJURY", "RISK", "CONTRACTOR", "PERMIT",
7
9
  "AUDIT", "JSEA",
@@ -20,18 +22,52 @@ class Eco::API::UseCases::DefaultCases::CleanUnknownTags < Eco::API::Common::Loa
20
22
  people.each do |person|
21
23
  unknown_tags = person.filter_tags.select {|tag| !tag?(tag)}
22
24
  person.filter_tags -= unknown_tags
25
+ unknown_tag!(*unknown_tags)
23
26
  update.add(person)
24
27
  end
25
28
  end
26
29
 
27
30
  private
28
31
 
32
+ def unknown_tag!(*tags)
33
+ tags.each do |value|
34
+ unless unknown.include?(value)
35
+ unknown << value
36
+ File.open(unknown_tags_file, 'a') do |fd|
37
+ fd.write("#{value}\n")
38
+ end
39
+ puts "Custom detected: '#{value}'"
40
+ end
41
+ end
42
+ end
43
+
44
+ def register_tags
45
+ REGISTER_TAGS
46
+ end
47
+
48
+ def unknown
49
+ @unknown ||= []
50
+ end
51
+
29
52
  def tag?(value)
30
- tagtree.tag?(value) || REGISTER_TAGS.any? {|reg| value == reg}
53
+ tagtree.tag?(value).yield_self do |is_loc|
54
+ next true if is_loc
55
+ if clean_register_tags?
56
+ register_tags.any? {|reg| value == reg}
57
+ end
58
+ end
31
59
  end
32
60
 
33
61
  def tagtree
34
62
  @tagtree ||= ASSETS.config.tagtree
35
63
  end
36
64
 
65
+ def unknown_tags_file
66
+ File.join(".","#{session.enviro_name}_#{UNKNOWN_LOCS_FILE}")
67
+ end
68
+
69
+ def clean_register_tags?
70
+ !options.dig(:usecase, :include_register_tags)
71
+ end
72
+
37
73
  end
@@ -2,16 +2,25 @@ class Eco::API::UseCases::DefaultCases::ReinviteTransCase < Eco::API::Common::Lo
2
2
  name "reinvite"
3
3
  type :transform
4
4
 
5
+ def main(people, session, options, usecase)
6
+ reinvite(people.users, session, options, usecase)
7
+ end
8
+
9
+ private
10
+
5
11
  def reinvite(users, session, options, usecase)
6
12
  invite = session.new_job("main", "invite", :update, usecase, :account)
7
13
  users.each do |person|
8
- person.account.send_invites = true
14
+ if force_invite?
15
+ person.account.send_invites = true
16
+ else
17
+ person.account.force_send_invites = true
18
+ end
9
19
  invite.add(person)
10
20
  end
11
21
  end
12
22
 
13
- def main(people, session, options, usecase)
14
- reinvite(people.users, session, options, usecase)
23
+ def force_invite?
24
+ options.dig(:force, :invite)
15
25
  end
16
-
17
26
  end
@@ -0,0 +1,109 @@
1
+ class Eco::API::UseCases::DefaultCases::Samples::Sftp < Eco::API::Common::Loaders::UseCase
2
+ name "sftp-sample"
3
+ type :other
4
+
5
+ attr_reader :session
6
+
7
+ def main(session, options, usecase)
8
+ @session = session
9
+ options[:end_get] = false
10
+ raise "The SFTP is not configured" unless session.sftp?
11
+ case options.dig(:sftp, :command)
12
+ when :list
13
+ list_folder
14
+ when :get
15
+ get_files
16
+ when :get_last
17
+ get_last
18
+ when :archive
19
+ archive_files
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def file_pattern
26
+ raise "You should redefine the file_pattern function as a RegEx expression that matches the target remote file"
27
+ end
28
+
29
+ # Ex: "/IN/Personnel"
30
+ def remote_subfolder
31
+ raise "You should redefine remote_subfolder as the folder where the target file sits. Ex: /IN/Personnel"
32
+ end
33
+
34
+ def archive_subfolder
35
+ "Archive"
36
+ end
37
+
38
+ def with_remote_files
39
+ sftp.files(remote_folder, pattern: file_pattern).each do |remote_file|
40
+ yield(remote_file) if block_given?
41
+ end
42
+ end
43
+
44
+ def list_folder
45
+ puts "Listing remote folder: '#{remote_folder}':"
46
+ with_remote_files {|file| puts file.longname}
47
+ end
48
+
49
+ def get_files
50
+ with_remote_files.tap do |files|
51
+ unless files.empty?
52
+ file_names = files.map {|file| to_remote_path(file.name)}
53
+ puts "Getting the following files:"
54
+ puts file_names
55
+ sftp.download(file_names, local_folder: local_folder)
56
+ end
57
+ end
58
+ end
59
+
60
+ def get_last
61
+ with_remote_files.last.tap do |file|
62
+ if file
63
+ file_name = to_remote_path(file.name)
64
+ puts "Getting the following file: #{file_name}"
65
+ sftp.download(file_name, local_folder: local_folder)
66
+ end
67
+ end
68
+ end
69
+
70
+ def archive_files
71
+ with_remote_files do |file|
72
+ source = to_remote_path(file.name) # should probably be file.longname
73
+ dest = to_remote_path("#{archive_subfolder}/#{file.name}")
74
+ move_file(source, dest)
75
+ end.tap do |files|
76
+ puts "Moved the file(s) to the #{archive_subfolder} folder" unless files.empty?
77
+ end
78
+ end
79
+
80
+ def move_file(source, dest)
81
+ sftp.move(source, dest, 0x0001) do |response|
82
+ if response.ok?
83
+ puts "#{source}\n -to-> #{dest}"
84
+ else
85
+ puts "Could not move file #{source}"
86
+ end
87
+ end
88
+ end
89
+
90
+ def to_remote_path(file)
91
+ remote_folder + "/" + file
92
+ end
93
+
94
+ def local_folder
95
+ "."
96
+ end
97
+
98
+ def remote_folder
99
+ @remote_folder ||= sftp_config.remote_folder + remote_subfolder
100
+ end
101
+
102
+ def sftp_config
103
+ session.config.sftp
104
+ end
105
+
106
+ def sftp
107
+ session.sftp
108
+ end
109
+ end
@@ -0,0 +1,12 @@
1
+ module Eco
2
+ module API
3
+ class UseCases
4
+ class DefaultCases
5
+ module Samples
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ require_relative 'samples/sftp_case'
@@ -9,6 +9,7 @@ module Eco
9
9
  end
10
10
  end
11
11
 
12
+ require_relative 'default_cases/samples'
12
13
  require_relative 'default_cases/abstract_policygroup_abilities_case.rb'
13
14
  require_relative 'default_cases/analyse_people_case'
14
15
  require_relative 'default_cases/append_usergroups_case'
@@ -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(ooze = target)
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(ooze)
26
- update_ooze(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!
@@ -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")
@@ -90,6 +90,9 @@ ASSETS.cli.config do |cnf|
90
90
  desc = "Cleans from filter_tags those tags that are not present in the tagtree (as per tagtree.json file)."
91
91
  desc += " It will preserve standard register tags of most common registers (i.e. EVENT, RISK)."
92
92
  cases.add("-clean-unknown-tags", :transform, desc, case_name: "clean-unknown-tags")
93
+ .add_option("-include-register-tags", "Will also try to remove register tags") do |options|
94
+ options.deep_merge!(usecase: {include_register_tags: true})
95
+ end
93
96
 
94
97
  desc = "Removes the landing page or sets it to -page-id"
95
98
  cases.add("-reset-landing-page", :transform, desc, case_name: "reset-landing-page")
@@ -180,9 +183,15 @@ ASSETS.cli.config do |cnf|
180
183
 
181
184
  desc = "Re-sends invites to all filtered users that have not accepted the invite as yet"
182
185
  cases.add("-reinvite", :transform, desc, case_name: "reinvite")
186
+ .add_option("-force", "If also send an invite email to those that have accepted the invite") do |options|
187
+ options.deep_merge!(force: {invite: true})
188
+ end
183
189
 
184
190
  desc = "Re-sends invites to target users that have not accepted the invite as yet"
185
191
  cases.add("-reinvite-from", :sync, desc, case_name: "reinvite")
192
+ .add_option("-force", "If also send an invite email to those that have accepted the invite") do |options|
193
+ options.deep_merge!(force: {invite: true})
194
+ end
186
195
 
187
196
  desc = "Deletes everybody that has been filtered from the people manager"
188
197
  cases.add("-delete", :transform, desc, case_name: "delete")
@@ -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
- # Prevent getting people when there were no use cases that used them
170
- unless io.people
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
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = "2.0.45"
2
+ VERSION = "2.0.49"
3
3
  end
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.45
4
+ version: 2.0.49
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura
@@ -136,7 +136,7 @@ dependencies:
136
136
  requirements:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
- version: 0.8.21
139
+ version: 0.8.25
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.21
149
+ version: 0.8.25
150
150
  - - "<"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0.9'
@@ -546,6 +546,8 @@ files:
546
546
  - lib/eco/api/usecases/default_cases/remove_account_trans_case.rb
547
547
  - lib/eco/api/usecases/default_cases/reset_landing_page_case.rb
548
548
  - lib/eco/api/usecases/default_cases/restore_db_case.rb
549
+ - lib/eco/api/usecases/default_cases/samples.rb
550
+ - lib/eco/api/usecases/default_cases/samples/sftp_case.rb
549
551
  - lib/eco/api/usecases/default_cases/set_default_tag_case.rb
550
552
  - lib/eco/api/usecases/default_cases/set_supervisor_case.rb
551
553
  - lib/eco/api/usecases/default_cases/supers_cyclic_identify_case.rb