Class: PactBroker::DB::CleanIncremental
- Inherits:
-
Object
- Object
- PactBroker::DB::CleanIncremental
- Defined in:
- lib/pact_broker/db/clean_incremental.rb
Constant Summary collapse
- DEFAULT_KEEP_SELECTORS =
[ PactBroker::DB::Clean::Selector.new(tag: true, latest: true), PactBroker::DB::Clean::Selector.new(branch: true, latest: true), PactBroker::DB::Clean::Selector.new(latest: true), PactBroker::DB::Clean::Selector.new(deployed: true), PactBroker::DB::Clean::Selector.new(released: true), PactBroker::DB::Clean::Selector.new(max_age: 90) ]
- TABLES =
[:versions, :pact_publications, :pact_versions, :verifications, :triggered_webhooks, :webhook_executions]
Class Method Summary collapse
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(database_connection, options = {}) ⇒ CleanIncremental
constructor
A new instance of CleanIncremental.
- #keep ⇒ Object
- #limit ⇒ Object
- #logger ⇒ Object
- #resolve_ids(query, column_name = :id) ⇒ Object
- #selected_versions_to_keep ⇒ Object
- #version_ids_to_delete ⇒ Object
- #version_ids_to_keep ⇒ Object
Constructor Details
#initialize(database_connection, options = {}) ⇒ CleanIncremental
Returns a new instance of CleanIncremental.
23 24 25 26 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 23 def initialize database_connection, = {} @db = database_connection @options = end |
Class Method Details
.call(database_connection, options = {}) ⇒ Object
19 20 21 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 19 def self.call database_connection, = {} new(database_connection, ).call end |
Instance Method Details
#call ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 63 def call require "pact_broker/db/models" if dry_run? dry_run_results else db.transaction do before_counts = current_counts PactBroker::Domain::Version.where(id: resolve_ids(version_ids_to_delete)).delete delete_orphan_pact_versions after_counts = current_counts TABLES.each_with_object({}) do | table_name, comparison_counts | comparison_counts[table_name.to_s] = { "deleted" => before_counts[table_name] - after_counts[table_name], "kept" => after_counts[table_name] } end end end end |
#keep ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 32 def keep @keep ||= if [:keep] # Could be a Matrix::UnresolvedSelector from the docker image, convert it [:keep].collect { | unknown_thing | PactBroker::DB::Clean::Selector.from_hash(unknown_thing.to_hash) } else DEFAULT_KEEP_SELECTORS end end |
#limit ⇒ Object
41 42 43 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 41 def limit [:limit] || 1000 end |
#logger ⇒ Object
28 29 30 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 28 def logger [:logger] || PactBroker.logger end |
#resolve_ids(query, column_name = :id) ⇒ Object
45 46 47 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 45 def resolve_ids(query, column_name = :id) query.collect { |h| h[column_name] } end |
#selected_versions_to_keep ⇒ Object
57 58 59 60 61 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 57 def selected_versions_to_keep keep.collect do | selector | PactBroker::Domain::Version.select(:id).for_selector(selector) end end |
#version_ids_to_delete ⇒ Object
49 50 51 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 49 def version_ids_to_delete db[:versions].where(id: version_ids_to_keep).invert.limit(limit).order(Sequel.asc(:id)) end |
#version_ids_to_keep ⇒ Object
53 54 55 |
# File 'lib/pact_broker/db/clean_incremental.rb', line 53 def version_ids_to_keep @version_ids_to_keep ||= selected_versions_to_keep.reduce(&:union) end |