class PactBroker::DB::Clean
Attributes
Public Class Methods
Source
# File lib/pact_broker/db/clean.rb, line 17 def self.call database_connection, options = {} new(database_connection, options).call end
Source
# File lib/pact_broker/db/clean.rb, line 21 def initialize database_connection, options = {} @db = database_connection @options = options end
Public Instance Methods
Source
# File lib/pact_broker/db/clean.rb, line 107 def call deleted_counts = {} kept_counts = {} deleted_counts[:pact_publications] = pact_publication_ids_to_delete.count kept_counts[:pact_publications] = pact_publication_ids_to_keep.count # Work out how to keep the head verifications for the provider tags. deleted_counts[:verification_results] = verification_ids_to_delete.count kept_counts[:verification_results] = verification_ids_to_keep.count delete_webhook_data(verification_triggered_webhook_ids_to_delete) delete_verifications delete_webhook_data(pact_publication_triggered_webhook_ids_to_delete) delete_pact_publications delete_orphan_pact_versions overwritten_delete_counts = delete_overwritten_verifications deleted_counts[:verification_results] = deleted_counts[:verification_results] + overwritten_delete_counts[:verification_results] kept_counts[:verification_results] = kept_counts[:verification_results] - overwritten_delete_counts[:verification_results] delete_orphan_tags delete_orphan_versions { kept: kept_counts, deleted: deleted_counts } end
Source
# File lib/pact_broker/db/clean.rb, line 26 def keep @keep ||= if options[:keep] # Could be a Matrix::UnresolvedSelector from the docker image, convert it options[:keep].collect { | unknown_thing | Selector.from_hash(unknown_thing.to_hash) } else [Selector.new(tag: true, latest: true), Selector.new(branch: true, latest: true), Selector.new(latest: true), Selector.new(deployed: true), Selector.new(released: true)] end end
Source
# File lib/pact_broker/db/clean.rb, line 57 def latest_pact_publication_ids_to_keep @latest_pact_publication_ids_to_keep ||= resolve_ids(db[:latest_pact_publications].select(:id)) end
Source
# File lib/pact_broker/db/clean.rb, line 50 def latest_tagged_pact_publications_ids_to_keep @latest_tagged_pact_publications_ids_to_keep ||= resolve_ids(keep.select(&:tag).select(&:latest).collect do | selector | PactBroker::Pacts::PactPublication.select(:id).latest_by_consumer_tag_for_clean_selector(selector) end.reduce(&:union) || []) end
Source
# File lib/pact_broker/db/clean.rb, line 61 def pact_publication_ids_to_delete @pact_publication_ids_to_delete ||= resolve_ids(db[:pact_publications].select(:id).where(id: pact_publication_ids_to_keep).invert) end
Source
# File lib/pact_broker/db/clean.rb, line 40 def pact_publication_ids_to_keep @pact_publication_ids_to_keep ||= pact_publication_ids_to_keep_for_version_ids_to_keep .union(latest_pact_publication_ids_to_keep) .union(latest_tagged_pact_publications_ids_to_keep) end
Source
# File lib/pact_broker/db/clean.rb, line 46 def pact_publication_ids_to_keep_for_version_ids_to_keep @pact_publication_ids_to_keep_for_version_ids_to_keep ||= resolve_ids(db[:pact_publications].select(:id).where(consumer_version_id: version_ids_to_keep)) end
Source
# File lib/pact_broker/db/clean.rb, line 35 def resolve_ids(query, column_name = :id) # query Unionable.new(query.collect { |h| h[column_name] }) end
Source
# File lib/pact_broker/db/clean.rb, line 97 def verification_ids_to_delete @verification_ids_to_delete ||= db[:verifications].select(:id).where(id: verification_ids_to_keep).invert end
Source
# File lib/pact_broker/db/clean.rb, line 93 def verification_ids_to_keep @verification_ids_to_keep ||= verification_ids_to_keep_for_version_ids_to_keep.union(verification_ids_to_keep_because_latest_verification_for_latest_pact) end
Source
# File lib/pact_broker/db/clean.rb, line 70 def verification_ids_to_keep_because_latest_verification_for_latest_pact @verification_ids_to_keep_because_latest_verification ||= resolve_ids( db[:latest_verification_ids_for_pact_versions] .select(:latest_verification_id) .where(pact_version_id: db[:latest_pact_publications].select(:pact_version_id) ), :latest_verification_id ) end
Source
# File lib/pact_broker/db/clean.rb, line 81 def verification_ids_to_keep_for_pact_publication_ids_to_keep @verification_ids_to_keep_for_pact_publication_ids_to_keep ||= resolve_ids( db[:latest_verification_id_for_pact_version_and_provider_version] .select(:verification_id) .where(pact_version_id: db[:pact_publications] .select(:pact_version_id) .where(id: pact_publication_ids_to_keep_for_version_ids_to_keep) ) ) end
Source
# File lib/pact_broker/db/clean.rb, line 66 def verification_ids_to_keep_for_version_ids_to_keep @verification_ids_to_keep_for_version_ids_to_keep ||= resolve_ids(db[:verifications].select(:id).where(provider_version_id: version_ids_to_keep)) end
because they belong to the versions to keep
Source
# File lib/pact_broker/db/clean.rb, line 101 def version_ids_to_keep @version_ids_to_keep ||= keep.collect do | selector | PactBroker::Domain::Version.select(:id).for_selector(selector) end.reduce(&:union) end
Private Instance Methods
Source
# File lib/pact_broker/db/clean.rb, line 170 def delete_orphan_pact_versions referenced_pact_version_ids = db[:pact_publications].select(:pact_version_id).union(db[:verifications].select(:pact_version_id)) db[:pact_versions].where(id: referenced_pact_version_ids).invert.delete end
Source
# File lib/pact_broker/db/clean.rb, line 179 def delete_orphan_versions db[:versions].where(id: referenced_version_ids).invert.delete end
Source
# File lib/pact_broker/db/clean.rb, line 183 def delete_overwritten_verifications verification_ids = db[:verifications].select(:id).where(id: db[:latest_verification_id_for_pact_version_and_provider_version].select(:verification_id)).invert deleted_counts = { verification_results: verification_ids.count } delete_webhook_data(db[:triggered_webhooks].where(verification_id: verification_ids).select(:id)) verification_ids.delete deleted_counts end
Source
# File lib/pact_broker/db/clean.rb, line 162 def delete_pact_publications db[:pact_publications].where(id: pact_publication_ids_to_delete).delete end
Source
# File lib/pact_broker/db/clean.rb, line 166 def delete_verifications db[:verifications].where(id: verification_ids_to_delete).delete end
Source
# File lib/pact_broker/db/clean.rb, line 157 def delete_webhook_data(triggered_webhook_ids) db[:webhook_executions].where(triggered_webhook_id: triggered_webhook_ids).delete db[:triggered_webhooks].where(id: triggered_webhook_ids).delete end
Source
# File lib/pact_broker/db/clean.rb, line 144 def pact_publication_triggered_webhook_ids_to_delete db[:triggered_webhooks].select(:id).where(pact_publication_id: pact_publication_ids_to_delete) end
Source
# File lib/pact_broker/db/clean.rb, line 148 def referenced_version_ids db[:pact_publications].select(:consumer_version_id).union(db[:verifications].select(:provider_version_id)) end
Source
# File lib/pact_broker/db/clean.rb, line 152 def verification_ids_for_pact_publication_ids_to_delete @verification_ids_for_pact_publication_ids_to_delete ||= db[:verifications].select(:id).where(pact_version_id: db[:pact_publications].select(:pact_version_id).where(id: pact_publication_ids_to_delete)) end
Source
# File lib/pact_broker/db/clean.rb, line 140 def verification_triggered_webhook_ids_to_delete db[:triggered_webhooks].select(:id).where(verification_id: verification_ids_to_delete) end