eco-helpers 2.6.1 → 2.6.2
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 +22 -0
- data/lib/eco/api/common/loaders/base.rb +5 -0
- data/lib/eco/api/session/config/tagtree.rb +15 -1
- data/lib/eco/api/usecases/ooze_samples/helpers/creatable.rb +62 -0
- data/lib/eco/api/usecases/ooze_samples/helpers/rescuable.rb +59 -0
- data/lib/eco/api/usecases/ooze_samples/helpers.rb +2 -0
- data/lib/eco/api/usecases/ooze_samples/ooze_base_case.rb +2 -1
- data/lib/eco/api/usecases/ooze_samples/register_migration_case.rb +2 -26
- data/lib/eco/api/usecases/ooze_samples/register_update_case.rb +64 -47
- data/lib/eco/api/usecases/ooze_samples/target_oozes_update_case.rb +8 -0
- data/lib/eco/data/locations/node_diff/nodes_diff.rb +11 -9
- data/lib/eco/data/locations/node_diff/selectors.rb +1 -1
- data/lib/eco/version.rb +1 -1
- metadata +3 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: '0904af2dd434adc72c1ca3e889d4e0b11595ce991f6de1c997f613d80c8866ce'
         | 
| 4 | 
            +
              data.tar.gz: b21748a878327830d5c813340ab2fcfe69ebace8137480bc9dfc42f290296cbf
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2bccc140b8ec44d41aaccdffde8e5b51a1c755fc75dcede5e08526be6daed4482a5f733ceba6a75155f1dee74dbc8e2edc52ee9f2ab55f7ebf6521acfd3aac47
         | 
| 7 | 
            +
              data.tar.gz: b362a14bf0a872ee04928ace6c05600df37ecfd56cb754b5f2a0cc3a417115cc8d9a889ce5f40de80ed41f281b16005eed78eadf04a330dc6fa80066baa56e63
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,6 +1,28 @@ | |
| 1 1 | 
             
            # Change Log
         | 
| 2 2 | 
             
            All notable changes to this project will be documented in this file.
         | 
| 3 3 |  | 
| 4 | 
            +
            ## [2.6.2] - 2024-02-23
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ### Added
         | 
| 7 | 
            +
              - `Eco::API::Session::Config::TagTree`: added **benchmarks** to locations structure live retrieval
         | 
| 8 | 
            +
              - To all **Ooze** cases that use register update
         | 
| 9 | 
            +
                - `Eco::API::UseCases::OozeSamples::Helpers::Creatable` native helpers
         | 
| 10 | 
            +
                - to draft entries
         | 
| 11 | 
            +
                - `Eco::API::UseCases::OozeSamples::RegisterMigrationCase` -> removed code double-up due to this addition to the register update case.
         | 
| 12 | 
            +
              - `Eco::API::Common::Loaders::Base` added **methods**
         | 
| 13 | 
            +
                - `#simulate?` and `#dry_run?`
         | 
| 14 | 
            +
              - `Eco::API::UseCases::OozeSamples::RegisterUpdateCase`
         | 
| 15 | 
            +
                - added **kpis** attempted updates and attempted creations
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            ### Changed
         | 
| 18 | 
            +
              - `Eco::API::UseCases::OozeSamples::RegisterUpdateCase`
         | 
| 19 | 
            +
                - `#main` allows to tell it to just `yield`
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ### Fixed
         | 
| 22 | 
            +
              - `Eco::Data::Locations::NodeDiff::Selectors` `any?` (typo)
         | 
| 23 | 
            +
              - `Eco::API::UseCases::OozeSamples::TargetOozesUpdateCase`
         | 
| 24 | 
            +
                - fixed **kpis** tracking
         | 
| 25 | 
            +
             | 
| 4 26 | 
             
            ## [2.6.1] - 2024-02-11
         | 
| 5 27 |  | 
| 6 28 | 
             
            ### Added
         | 
| @@ -93,9 +93,16 @@ module Eco | |
| 93 93 | 
             
                          includeArchivedNodes: include_archived
         | 
| 94 94 | 
             
                        }.merge(kargs)
         | 
| 95 95 |  | 
| 96 | 
            +
                        start = Time.now
         | 
| 96 97 | 
             
                        return nil unless tree = graphql.currentOrganization.locationStructure(**kargs, &block)
         | 
| 98 | 
            +
                        end_time = Time.now
         | 
| 99 | 
            +
                        secs    = (end_time - start).round(3)
         | 
| 97 100 |  | 
| 98 | 
            -
                        Eco::API::Organization::TagTree.new(tree.treeify, id: tree.id, name: tree.name)
         | 
| 101 | 
            +
                        Eco::API::Organization::TagTree.new(tree.treeify, id: tree.id, name: tree.name).tap do |eco_tree|
         | 
| 102 | 
            +
                          cnt     = eco_tree.count
         | 
| 103 | 
            +
                          per_sec = (cnt.to_f / secs).round(2)
         | 
| 104 | 
            +
                          session_logger.info("Loaded #{cnt} location nodes in #{secs} seconds (#{per_sec} nodes/sec)")
         | 
| 105 | 
            +
                        end
         | 
| 99 106 | 
             
                      end
         | 
| 100 107 |  | 
| 101 108 | 
             
                      # Retrieves all the location structures of the organisation
         | 
| @@ -110,11 +117,18 @@ module Eco | |
| 110 117 | 
             
                            includeArchivedNodes: include_archived
         | 
| 111 118 | 
             
                          }.merge(kargs)
         | 
| 112 119 |  | 
| 120 | 
            +
                          start = Time.now
         | 
| 113 121 | 
             
                          next unless trees = graphql.currentOrganization.locationStructures(**kargs, &block)
         | 
| 122 | 
            +
                          end_time = Time.now
         | 
| 123 | 
            +
                          secs     = (end_time - start).round(3)
         | 
| 124 | 
            +
                          cnt      = 0
         | 
| 114 125 | 
             
                          trees.each do |tree|
         | 
| 115 126 | 
             
                            eco_tree = Eco::API::Organization::TagTree.new(tree.treeify, id: tree.id, name: tree.name)
         | 
| 127 | 
            +
                            cnt += eco_tree.count
         | 
| 116 128 | 
             
                            eco_trees.push(eco_tree)
         | 
| 117 129 | 
             
                          end
         | 
| 130 | 
            +
                          per_sec = (cnt.to_f / secs).round(2)
         | 
| 131 | 
            +
                          session_logger.info("Loaded #{cnt} location nodes in #{secs} seconds (#{per_sec} nodes/sec)")
         | 
| 118 132 | 
             
                        end
         | 
| 119 133 | 
             
                      end
         | 
| 120 134 |  | 
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            module Eco
         | 
| 2 | 
            +
              module API
         | 
| 3 | 
            +
                class UseCases
         | 
| 4 | 
            +
                  class OozeSamples
         | 
| 5 | 
            +
                    module Helpers
         | 
| 6 | 
            +
                      # set of helpers to create entries from a template
         | 
| 7 | 
            +
                      module Creatable
         | 
| 8 | 
            +
                        module InstanceMethods
         | 
| 9 | 
            +
                          private
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                          def creating_new_page(draft_reference = "new entry", template_id:)
         | 
| 12 | 
            +
                            page_id = nil
         | 
| 13 | 
            +
                            drafting_entry(template_id) do |draft|
         | 
| 14 | 
            +
                              yield(draft) if block_given?
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                              if page_id = create_entry(draft, reference: draft_reference)
         | 
| 17 | 
            +
                                log(:info) { "Page '#{page_id}' created successfully -- #{draft_reference}" }
         | 
| 18 | 
            +
                              elsif options.dig(:dry_run)
         | 
| 19 | 
            +
                                log(:info) { "Simulated launch for #{draft_reference}" }
         | 
| 20 | 
            +
                              end
         | 
| 21 | 
            +
                            end
         | 
| 22 | 
            +
                            page_id
         | 
| 23 | 
            +
                          end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                          # @return [Page] a draft of `template_id` (still not saved)
         | 
| 26 | 
            +
                          def drafting_entry(template_id)
         | 
| 27 | 
            +
                            raise ArgumentError, "Expecting block, but not given" unless block_given?
         | 
| 28 | 
            +
                            draft = apiv2.pages.get_new(template_id)
         | 
| 29 | 
            +
                            yield(draft)
         | 
| 30 | 
            +
                          end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                          # Does the actual creation of the entry
         | 
| 33 | 
            +
                          def create_entry(draft, reference: "new entry from #{draft&.template_id}")
         | 
| 34 | 
            +
                            with_rescue(reference) do
         | 
| 35 | 
            +
                              if result = create_ooze(draft, template_id: draft.template_id)
         | 
| 36 | 
            +
                                return result.page_id
         | 
| 37 | 
            +
                              end
         | 
| 38 | 
            +
                            end
         | 
| 39 | 
            +
                          end
         | 
| 40 | 
            +
                        end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                        class << self
         | 
| 43 | 
            +
                          def included(base)
         | 
| 44 | 
            +
                            super
         | 
| 45 | 
            +
                            validate_base_type!(base)
         | 
| 46 | 
            +
                            base.include(InstanceMethods)
         | 
| 47 | 
            +
                          end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                          def validate_base_type!(base)
         | 
| 50 | 
            +
                            return super if defined?(super)
         | 
| 51 | 
            +
                            msg  = "#{self} can only be included in Eco::API::UseCases::OozeSamples::RegisterUpdateCase"
         | 
| 52 | 
            +
                            msg << "\nCan't be included in #{base}"
         | 
| 53 | 
            +
                            raise LoadError, msg unless base <= Eco::API::UseCases::OozeSamples::RegisterUpdateCase
         | 
| 54 | 
            +
                            true
         | 
| 55 | 
            +
                          end
         | 
| 56 | 
            +
                        end
         | 
| 57 | 
            +
                      end
         | 
| 58 | 
            +
                    end
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
            end
         | 
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            module Eco
         | 
| 2 | 
            +
              module API
         | 
| 3 | 
            +
                class UseCases
         | 
| 4 | 
            +
                  class OozeSamples
         | 
| 5 | 
            +
                    module Helpers
         | 
| 6 | 
            +
                      module Rescuable
         | 
| 7 | 
            +
                        module InstanceMethods
         | 
| 8 | 
            +
                          private
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                          # Helper to prevent script from stopping
         | 
| 11 | 
            +
                          def with_rescue(reference)
         | 
| 12 | 
            +
                            raise ArgumentError, "Expecting block, but not given" unless block_given?
         | 
| 13 | 
            +
                            yield
         | 
| 14 | 
            +
                          rescue StandardError => e
         | 
| 15 | 
            +
                            log(:error) {
         | 
| 16 | 
            +
                              [reference, e.message].join(' => \n')
         | 
| 17 | 
            +
                            }
         | 
| 18 | 
            +
                            lines = []
         | 
| 19 | 
            +
                            lines << "\nThere was an error. Choose one option:\n"
         | 
| 20 | 
            +
                            lines << "  (C)      - Continue/resume. Just ignore this one."
         | 
| 21 | 
            +
                            lines << "  (A)      - Abort. Just break this run."
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                            session.prompt_user('Type one option (C/a):', explanation: lines.join("\n"), default: 'C') do |res|
         | 
| 24 | 
            +
                              res = res.upcase
         | 
| 25 | 
            +
                              case
         | 
| 26 | 
            +
                              when res.start_with?("A")
         | 
| 27 | 
            +
                                raise
         | 
| 28 | 
            +
                              else res.start_with?("C")
         | 
| 29 | 
            +
                                log(:warn) {
         | 
| 30 | 
            +
                                  msg  = "Script resumed after error..."
         | 
| 31 | 
            +
                                  msg << "\n  • #{reference}"
         | 
| 32 | 
            +
                                }
         | 
| 33 | 
            +
                                nil
         | 
| 34 | 
            +
                              end
         | 
| 35 | 
            +
                            end
         | 
| 36 | 
            +
                          end
         | 
| 37 | 
            +
                        end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                        class << self
         | 
| 40 | 
            +
                          def included(base)
         | 
| 41 | 
            +
                            super
         | 
| 42 | 
            +
                            validate_base_type!(base)
         | 
| 43 | 
            +
                            base.include(InstanceMethods)
         | 
| 44 | 
            +
                          end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                          def validate_base_type!(base)
         | 
| 47 | 
            +
                            return super if defined?(super)
         | 
| 48 | 
            +
                            msg  = "#{self} can only be included in Eco::API::Common::Loaders::Base"
         | 
| 49 | 
            +
                            msg << "\nCan't be included in #{base}"
         | 
| 50 | 
            +
                            raise LoadError, msg unless base <= Eco::API::Common::Loaders::Base
         | 
| 51 | 
            +
                            true
         | 
| 52 | 
            +
                          end
         | 
| 53 | 
            +
                        end
         | 
| 54 | 
            +
                      end
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
            end
         | 
| @@ -4,6 +4,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders: | |
| 4 4 | 
             
              type :other
         | 
| 5 5 |  | 
| 6 6 | 
             
              include Eco::API::UseCases::OozeSamples::Helpers
         | 
| 7 | 
            +
              include Eco::API::UseCases::OozeSamples::Helpers::Rescuable
         | 
| 7 8 |  | 
| 8 9 | 
             
              attr_reader :target
         | 
| 9 10 |  | 
| @@ -145,7 +146,7 @@ class Eco::API::UseCases::OozeSamples::OozeBaseCase < Eco::API::Common::Loaders: | |
| 145 146 | 
             
              # It fill update the ooze only if it's dirty (it carries changes)
         | 
| 146 147 | 
             
              # @return [Boolean, Response] `false` if there was not request against the server, `Response` otherwise
         | 
| 147 148 | 
             
              def update_ooze(ooze = target)
         | 
| 148 | 
            -
                if  | 
| 149 | 
            +
                if dry_run?
         | 
| 149 150 | 
             
                  dry_run_feedback(ooze)
         | 
| 150 151 | 
             
                  false
         | 
| 151 152 | 
             
                else
         | 
| @@ -66,8 +66,8 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase | |
| 66 66 |  | 
| 67 67 | 
             
              def process_ooze
         | 
| 68 68 | 
             
                with_target_stage(self.class::SOURCE_STAGE) do |source|
         | 
| 69 | 
            -
                   | 
| 70 | 
            -
             | 
| 69 | 
            +
                  draft_reference = object_reference(source)
         | 
| 70 | 
            +
                  creating_new_page(draft_reference, template_id: elf.class::TEMPLATE_ID) do |draft|
         | 
| 71 71 | 
             
                    draft.base_tags << ["IMPORTED", "MIGRATED"]
         | 
| 72 72 |  | 
| 73 73 | 
             
                    pairing_tracking = copy_pairings(source, draft)
         | 
| @@ -89,13 +89,6 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase | |
| 89 89 | 
             
                    if msg = pairing_tracking.report_dst_unpaired(only_required: false, exclude_ximport: !self.class::REPORT_DST_XIMPORT)
         | 
| 90 90 | 
             
                      logger.warn(msg)
         | 
| 91 91 | 
             
                    end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
                    if page_id = create_entry(draft, reference: draft_reference)
         | 
| 94 | 
            -
                      csv << [source.id, page_id]
         | 
| 95 | 
            -
                      logger.info("Page '#{page_id}' created successfully.")
         | 
| 96 | 
            -
                    elsif options.dig(:dry_run)
         | 
| 97 | 
            -
                      logger.info("Simulated launch for #{draft_reference}")
         | 
| 98 | 
            -
                    end
         | 
| 99 92 | 
             
                  end
         | 
| 100 93 | 
             
                end
         | 
| 101 94 | 
             
              end
         | 
| @@ -153,23 +146,6 @@ class Eco::API::UseCases::OozeSamples::RegisterMigrationCase < Eco::API::UseCase | |
| 153 146 | 
             
                "#{sym}_callback".to_sym
         | 
| 154 147 | 
             
              end
         | 
| 155 148 |  | 
| 156 | 
            -
              def create_entry(draft, reference:, from: self.class::TEMPLATE_ID)
         | 
| 157 | 
            -
                with_rescue(reference) do
         | 
| 158 | 
            -
                  if !options[:dry_run]
         | 
| 159 | 
            -
                    create_ooze(draft, template_id: from).page_id
         | 
| 160 | 
            -
                  else
         | 
| 161 | 
            -
                    logger.info("Creation sample follows...")
         | 
| 162 | 
            -
                    dry_run_feedback(draft)
         | 
| 163 | 
            -
                    false
         | 
| 164 | 
            -
                  end
         | 
| 165 | 
            -
                end
         | 
| 166 | 
            -
              end
         | 
| 167 | 
            -
             | 
| 168 | 
            -
              def drafting_entry(template_id = selfTEMPLATE_ID)
         | 
| 169 | 
            -
                draft = apiv2.pages.get_new(template_id)
         | 
| 170 | 
            -
                yield(draft)
         | 
| 171 | 
            -
              end
         | 
| 172 | 
            -
             | 
| 173 149 | 
             
              def with_target_stage(name)
         | 
| 174 150 | 
             
                if stg = target_stage(name)
         | 
| 175 151 | 
             
                  yield(stg)
         | 
| @@ -4,6 +4,8 @@ | |
| 4 4 | 
             
            #   - You need to define the `process_ooze` method
         | 
| 5 5 | 
             
            # This case expects `options[:source][:register_id]`
         | 
| 6 6 | 
             
            class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases::OozeSamples::OozeBaseCase
         | 
| 7 | 
            +
              include Eco::API::UseCases::OozeSamples::Helpers::Creatable
         | 
| 8 | 
            +
             | 
| 7 9 | 
             
              class << self
         | 
| 8 10 | 
             
                # @return [Integer] the number of pages to be processed in each batch
         | 
| 9 11 | 
             
                def batch_size(size = nil)
         | 
| @@ -18,31 +20,25 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases:: | |
| 18 20 |  | 
| 19 21 | 
             
              attr_reader :retrieved_oozes, :non_retrieved_oozes
         | 
| 20 22 | 
             
              attr_reader :total_search_oozes, :dupped_search_oozes
         | 
| 21 | 
            -
              attr_reader :ooze_result_ids | 
| 23 | 
            +
              attr_reader :ooze_result_ids
         | 
| 24 | 
            +
              attr_reader :updated_oozes, :failed_update_oozes, :attempted_ooze_updates
         | 
| 25 | 
            +
              attr_reader :created_oozes, :ooze_create_attempts
         | 
| 22 26 |  | 
| 23 | 
            -
              def main(session, options, usecase, &block)
         | 
| 24 | 
            -
                 | 
| 25 | 
            -
                @non_retrieved_oozes = 0
         | 
| 26 | 
            -
                @dupped_search_oozes = 0
         | 
| 27 | 
            -
                @ooze_result_ids     = {}
         | 
| 28 | 
            -
                @updated_oozes       = 0
         | 
| 29 | 
            -
                @failed_update_oozes = 0
         | 
| 30 | 
            -
                @created_oozes       = 0
         | 
| 27 | 
            +
              def main(session, options, usecase, mode: :legacy, &block)
         | 
| 28 | 
            +
                init_kpis
         | 
| 31 29 |  | 
| 32 30 | 
             
                super(session, options, usecase) do
         | 
| 33 | 
            -
                   | 
| 34 | 
            -
                     | 
| 31 | 
            +
                  if mode == :legacy
         | 
| 32 | 
            +
                    with_each_entry do |ooze|
         | 
| 33 | 
            +
                      process_ooze(&block)
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
                  elsif mode == :delegate
         | 
| 36 | 
            +
                    raise "You need to pass a block when running main in `:delegate` mode" unless block_given?
         | 
| 37 | 
            +
                    yield
         | 
| 35 38 | 
             
                  end
         | 
| 36 39 | 
             
                end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                 | 
| 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.\n"
         | 
| 43 | 
            -
                msg += "    - Failed update on #{failed_update_oozes} oozes.\n"
         | 
| 44 | 
            -
                msg += "  • Created #{created_oozes} oozes.\n"
         | 
| 45 | 
            -
                logger.info(msg)
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                log_kpis
         | 
| 46 42 | 
             
              end
         | 
| 47 43 |  | 
| 48 44 | 
             
              def process_ooze(ooze = target)
         | 
| @@ -51,29 +47,6 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases:: | |
| 51 47 |  | 
| 52 48 | 
             
              private
         | 
| 53 49 |  | 
| 54 | 
            -
              def with_rescue(reference)
         | 
| 55 | 
            -
                begin
         | 
| 56 | 
            -
                  yield
         | 
| 57 | 
            -
                rescue StandardError => e
         | 
| 58 | 
            -
                  logger.error([reference, e.message].join(" => \n"))
         | 
| 59 | 
            -
                  lines = []
         | 
| 60 | 
            -
                  lines << "\nThere was an error. Choose one option:\n"
         | 
| 61 | 
            -
                  lines << '  (C)      - Continue/resume. Just ignore this one.'
         | 
| 62 | 
            -
                  lines << '  (A)      - Abort. Just break this run.'
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                  session.prompt_user('Type one option (C/a):', explanation: lines.join("\n"), default: 'C') do |res|
         | 
| 65 | 
            -
                    res = res.upcase
         | 
| 66 | 
            -
                    case
         | 
| 67 | 
            -
                    when res.start_with?("A")
         | 
| 68 | 
            -
                      raise
         | 
| 69 | 
            -
                    else res.start_with?("C")
         | 
| 70 | 
            -
                      logger.warn "Script resumed after error..."
         | 
| 71 | 
            -
                      nil
         | 
| 72 | 
            -
                    end
         | 
| 73 | 
            -
                  end
         | 
| 74 | 
            -
                end
         | 
| 75 | 
            -
              end
         | 
| 76 | 
            -
             | 
| 77 50 | 
             
              def before_loading_new_target(ooze_id)
         | 
| 78 51 | 
             
                if pending = queue_shift(ooze_id)
         | 
| 79 52 | 
             
                  update_ooze(pending).tap do |result|
         | 
| @@ -95,6 +68,7 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases:: | |
| 95 68 | 
             
                end
         | 
| 96 69 | 
             
              end
         | 
| 97 70 |  | 
| 71 | 
            +
              # Main looper (invoked from `main`)
         | 
| 98 72 | 
             
              def with_each_entry
         | 
| 99 73 | 
             
                batched_search_results do |page_results|
         | 
| 100 74 | 
             
                  page_results.each do |page_result|
         | 
| @@ -172,12 +146,26 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases:: | |
| 172 146 | 
             
                yield(results) unless results.empty?
         | 
| 173 147 | 
             
              end
         | 
| 174 148 |  | 
| 149 | 
            +
              # Launches the actual request to create the entry
         | 
| 175 150 | 
             
              def create_ooze(draft, template_id:)
         | 
| 176 | 
            -
                 | 
| 177 | 
            -
             | 
| 151 | 
            +
                @ooze_create_attempts += 1
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                if dry_run?
         | 
| 154 | 
            +
                  dry_run_feedback(ooze)
         | 
| 155 | 
            +
                  false
         | 
| 156 | 
            +
                else
         | 
| 157 | 
            +
                  apiv2.pages.create(draft, from: template_id).tap do |result|
         | 
| 158 | 
            +
                    @created_oozes += 1
         | 
| 159 | 
            +
                  end
         | 
| 178 160 | 
             
                end
         | 
| 179 161 | 
             
              end
         | 
| 180 162 |  | 
| 163 | 
            +
              # Capture the attempts count
         | 
| 164 | 
            +
              def update_ooze(*args, **kargs, &block)
         | 
| 165 | 
            +
                @attempted_ooze_updates += 1 if dirty?(ooze)
         | 
| 166 | 
            +
                super
         | 
| 167 | 
            +
              end
         | 
| 168 | 
            +
             | 
| 181 169 | 
             
              def update_oozes(batched_oozes = batch_queue)
         | 
| 182 170 | 
             
                batched_oozes.each do |ooze|
         | 
| 183 171 | 
             
                  update_ooze(ooze).tap do |result|
         | 
| @@ -215,10 +203,39 @@ class Eco::API::UseCases::OozeSamples::RegisterUpdateCase < Eco::API::UseCases:: | |
| 215 203 | 
             
                end
         | 
| 216 204 | 
             
              end
         | 
| 217 205 |  | 
| 206 | 
            +
              def init_kpis
         | 
| 207 | 
            +
                @retrieved_oozes        = 0
         | 
| 208 | 
            +
                @non_retrieved_oozes    = 0
         | 
| 209 | 
            +
                @dupped_search_oozes    = 0
         | 
| 210 | 
            +
                @ooze_result_ids        = {}
         | 
| 211 | 
            +
                @updated_oozes          = 0
         | 
| 212 | 
            +
                @failed_update_oozes    = 0
         | 
| 213 | 
            +
                @attempted_ooze_updates = 0
         | 
| 214 | 
            +
                @created_oozes          = 0
         | 
| 215 | 
            +
                @ooze_create_attempts   = 0
         | 
| 216 | 
            +
              end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
              def log_kpis
         | 
| 219 | 
            +
                log(:info) { kpis_message }
         | 
| 220 | 
            +
              end
         | 
| 221 | 
            +
             | 
| 222 | 
            +
              def kpis_message
         | 
| 223 | 
            +
                msg  = []
         | 
| 224 | 
            +
                msg << "Run end:"
         | 
| 225 | 
            +
                msg << "  • Search results: #{total_search_oozes}"
         | 
| 226 | 
            +
                msg << "  • Duplicated search results #{dupped_search_oozes}"
         | 
| 227 | 
            +
                msg << "  • Retrieved a total of #{retrieved_oozes}"
         | 
| 228 | 
            +
                msg << "  • Could not get #{non_retrieved_oozes} oozes."
         | 
| 229 | 
            +
                msg << "  • Updated #{updated_oozes} oozes (attempted: #{attempted_ooze_updates})."
         | 
| 230 | 
            +
                msg << "    - Failed update on #{failed_update_oozes} oozes."
         | 
| 231 | 
            +
                msg << "  • Created #{created_oozes} oozes (out of: #{ooze_create_attempts})."
         | 
| 232 | 
            +
                msg.join("\n")
         | 
| 233 | 
            +
              end
         | 
| 234 | 
            +
             | 
| 218 235 | 
             
              def search_options
         | 
| 219 236 | 
             
                @search_options ||= {}.tap do |opts|
         | 
| 220 | 
            -
                  opts.merge!(sort: | 
| 221 | 
            -
                  opts.merge!(dir: | 
| 237 | 
            +
                  opts.merge!(sort:   'created_at')
         | 
| 238 | 
            +
                  opts.merge!(dir:    'asc')
         | 
| 222 239 | 
             
                  opts.merge!(query:   conf_search) if conf_search
         | 
| 223 240 | 
             
                  opts.merge!(filters: conf_filters)
         | 
| 224 241 | 
             
                end
         | 
| @@ -19,7 +19,11 @@ class Eco::API::UseCases::OozeSamples::TargetOozesUpdateCase < Eco::API::UseCase | |
| 19 19 | 
             
                      end
         | 
| 20 20 | 
             
                    end
         | 
| 21 21 | 
             
                    if ooz = ooze(id)
         | 
| 22 | 
            +
                      @retrieved_oozes += 1
         | 
| 22 23 | 
             
                      yield(ooz)
         | 
| 24 | 
            +
                    else
         | 
| 25 | 
            +
                      @non_retrieved_oozes += 1
         | 
| 26 | 
            +
                      logger.warn "Could not get page #{id}"
         | 
| 23 27 | 
             
                    end
         | 
| 24 28 | 
             
                  end
         | 
| 25 29 | 
             
                  update_oozes
         | 
| @@ -42,8 +46,12 @@ class Eco::API::UseCases::OozeSamples::TargetOozesUpdateCase < Eco::API::UseCase | |
| 42 46 |  | 
| 43 47 | 
             
              def target_ids_preview
         | 
| 44 48 | 
             
                dups = target_ids.select {|id| target_ids.count(id) > 1}
         | 
| 49 | 
            +
                @total_search_oozes  = target_ids.count
         | 
| 50 | 
            +
                @dupped_search_oozes = dups.count
         | 
| 51 | 
            +
             | 
| 45 52 | 
             
                dups_str = dups.count > 0 ? "There are #{dups.count} duplicated ids" : "No duplicates detected"
         | 
| 46 53 | 
             
                msg = "Total target entries: #{target_ids.count} (#{dups_str})"
         | 
| 54 | 
            +
             | 
| 47 55 | 
             
                session.prompt_user("Do you want to proceed (y/N):", explanation: msg, default: "N", timeout: 10) do |res|
         | 
| 48 56 | 
             
                  unless res.upcase.start_with?("Y")
         | 
| 49 57 | 
             
                    puts "..."
         | 
| @@ -50,30 +50,32 @@ class Eco::Data::Locations::NodeDiff | |
| 50 50 | 
             
                end
         | 
| 51 51 |  | 
| 52 52 | 
             
                def diffs_summary
         | 
| 53 | 
            -
                   | 
| 54 | 
            -
                   | 
| 53 | 
            +
                  comp = "(#{source2.count} vs #{source1.count} nodes)"
         | 
| 54 | 
            +
                  return "There were no differences identified #{comp}" if diffs.empty?
         | 
| 55 | 
            +
                  msg  = []
         | 
| 56 | 
            +
                  msg << "Identified #{diffs.count} differences  #{comp}:"
         | 
| 55 57 | 
             
                  msg << when_present(insert, '') do |count|
         | 
| 56 | 
            -
                    "  • #{count} nodes to insert | 
| 58 | 
            +
                    "  • #{count} nodes to insert"
         | 
| 57 59 | 
             
                  end
         | 
| 58 60 | 
             
                  msg << when_present(update, '') do |count|
         | 
| 59 | 
            -
                    "  • #{count} nodes to update | 
| 61 | 
            +
                    "  • #{count} nodes to update"
         | 
| 60 62 | 
             
                  end
         | 
| 61 63 | 
             
                  # msg << when_present(id, '') do |count|
         | 
| 62 64 | 
             
                  #   "    • #{count} nodes to change id\n"
         | 
| 63 65 | 
             
                  # end
         | 
| 64 66 | 
             
                  msg << when_present(name, '') do |count|
         | 
| 65 | 
            -
                    "    • #{count} nodes to change name | 
| 67 | 
            +
                    "    • #{count} nodes to change name"
         | 
| 66 68 | 
             
                  end
         | 
| 67 69 | 
             
                  msg << when_present(move, '') do |count|
         | 
| 68 | 
            -
                    "    • #{count} nodes to move | 
| 70 | 
            +
                    "    • #{count} nodes to move"
         | 
| 69 71 | 
             
                  end
         | 
| 70 72 | 
             
                  msg << when_present(unarchive, '') do |count|
         | 
| 71 | 
            -
                    "    • #{count} nodes to unarchive | 
| 73 | 
            +
                    "    • #{count} nodes to unarchive"
         | 
| 72 74 | 
             
                  end
         | 
| 73 75 | 
             
                  msg << when_present(archive, '') do |count|
         | 
| 74 | 
            -
                    "  • #{count} nodes to archive | 
| 76 | 
            +
                    "  • #{count} nodes to archive"
         | 
| 75 77 | 
             
                  end
         | 
| 76 | 
            -
                  msg
         | 
| 78 | 
            +
                  msg.join("\n")
         | 
| 77 79 | 
             
                end
         | 
| 78 80 |  | 
| 79 81 | 
             
                private
         | 
    
        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.6. | 
| 4 | 
            +
              version: 2.6.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Oscar Segura
         | 
| @@ -694,10 +694,12 @@ files: | |
| 694 694 | 
             
            - lib/eco/api/usecases/ooze_cases/export_register_case.rb
         | 
| 695 695 | 
             
            - lib/eco/api/usecases/ooze_samples.rb
         | 
| 696 696 | 
             
            - lib/eco/api/usecases/ooze_samples/helpers.rb
         | 
| 697 | 
            +
            - lib/eco/api/usecases/ooze_samples/helpers/creatable.rb
         | 
| 697 698 | 
             
            - lib/eco/api/usecases/ooze_samples/helpers/exportable_ooze.rb
         | 
| 698 699 | 
             
            - lib/eco/api/usecases/ooze_samples/helpers/exportable_register.rb
         | 
| 699 700 | 
             
            - lib/eco/api/usecases/ooze_samples/helpers/filters.rb
         | 
| 700 701 | 
             
            - lib/eco/api/usecases/ooze_samples/helpers/ooze_handlers.rb
         | 
| 702 | 
            +
            - lib/eco/api/usecases/ooze_samples/helpers/rescuable.rb
         | 
| 701 703 | 
             
            - lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb
         | 
| 702 704 | 
             
            - lib/eco/api/usecases/ooze_samples/helpers_migration.rb
         | 
| 703 705 | 
             
            - lib/eco/api/usecases/ooze_samples/helpers_migration/copying.rb
         |