class PactBroker::DB::CleanTask

Attributes

database_connection[RW]
dry_run[RW]
keep_version_selectors[R]
logger[RW]
version_deletion_limit[RW]

Public Class Methods

new(&block) click to toggle source
# File lib/pact_broker/tasks/clean_task.rb, line 11
def initialize &block
  require "pact_broker/db/clean_incremental"
  @version_deletion_limit = 1000
  @dry_run = false
  @keep_version_selectors = PactBroker::DB::CleanIncremental::DEFAULT_KEEP_SELECTORS
  rake_task(&block)
end

Public Instance Methods

keep_version_selectors=(keep_version_selectors) click to toggle source
# File lib/pact_broker/tasks/clean_task.rb, line 19
def keep_version_selectors=(keep_version_selectors)
  require "pact_broker/db/clean/selector"
  @keep_version_selectors = [*keep_version_selectors].collect do | hash |
    PactBroker::DB::Clean::Selector.from_hash(hash)
  end
end
output(string, payload = {}) click to toggle source
# File lib/pact_broker/tasks/clean_task.rb, line 64
def output string, payload = {}
  logger ? logger.info(string, payload: payload) : puts("#{string} #{payload.to_json}")
end
rake_task(&block) click to toggle source
# File lib/pact_broker/tasks/clean_task.rb, line 26
def rake_task &block
  namespace :pact_broker do
    namespace :db do
      desc "Clean unnecessary pacts and verifications from database"
      task :clean do | _t, _args |

        instance_eval(&block)

        require "pact_broker/db/clean_incremental"
        require "pact_broker/error"
        require "yaml"
        require "benchmark"

        raise PactBroker::Error.new("You must specify the version_deletion_limit") unless version_deletion_limit

        prefix = dry_run ? "[DRY RUN] " : ""

        if keep_version_selectors.nil? || keep_version_selectors.empty?
          raise PactBroker::Error.new("You must specify which versions to keep")
        else
          output "#{prefix}Deleting oldest #{version_deletion_limit} versions, keeping versions that match the configured selectors", keep_version_selectors
        end

        start_time = Time.now
        results = PactBroker::DB::CleanIncremental.call(database_connection,
          keep: keep_version_selectors,
          limit: version_deletion_limit,
          logger: logger,
          dry_run: dry_run
        )
        end_time = Time.now
        elapsed_seconds = (end_time - start_time).to_i
        output "Results (#{elapsed_seconds} seconds)", results
      end
    end
  end
end