lib/pact_broker/webhooks/service.rb in pact_broker-2.4.2 vs lib/pact_broker/webhooks/service.rb in pact_broker-2.5.0
- old
+ new
@@ -1,16 +1,21 @@
require 'pact_broker/repositories'
require 'pact_broker/logging'
require 'pact_broker/webhooks/job'
require 'base64'
require 'securerandom'
+require 'pact_broker/webhooks/triggered_webhook'
+require 'pact_broker/webhooks/status'
module PactBroker
module Webhooks
class Service
+ PUBLICATION = PactBroker::Webhooks::TriggeredWebhook::TRIGGER_TYPE_PUBLICATION
+ USER = PactBroker::Webhooks::TriggeredWebhook::TRIGGER_TYPE_USER
+
extend Repositories
include Logging
def self.next_uuid
SecureRandom.urlsafe_base64
@@ -28,51 +33,86 @@
def self.find_by_uuid uuid
webhook_repository.find_by_uuid uuid
end
+ def self.update_by_uuid uuid, webhook
+ webhook_repository.update_by_uuid uuid, webhook
+ end
+
def self.delete_by_uuid uuid
- webhook_repository.unlink_executions_by_webhook_uuid uuid
+ webhook_repository.unlink_triggered_webhooks_by_webhook_uuid uuid
webhook_repository.delete_by_uuid uuid
end
- def self.delete_by_pacticipant pacticipant
+ def self.delete_all_webhhook_related_objects_by_pacticipant pacticipant
+ webhook_repository.delete_executions_by_pacticipant pacticipant
+ webhook_repository.delete_triggered_webhooks_by_pacticipant pacticipant
webhook_repository.delete_by_pacticipant pacticipant
end
+ def self.delete_all_webhook_related_objects_by_pact_publication_ids pact_publication_ids
+ webhook_repository.delete_triggered_webhooks_by_pact_publication_ids pact_publication_ids
+ end
+
def self.find_all
webhook_repository.find_all
end
- def self.execute_webhook_now webhook
- webhook_execution_result = webhook.execute
- webhook_repository.create_execution webhook, webhook_execution_result
+ def self.execute_webhook_now webhook, pact
+ triggered_webhook = webhook_repository.create_triggered_webhook(next_uuid, webhook, pact, USER)
+ webhook_execution_result = execute_triggered_webhook_now triggered_webhook, failure_log_message: "Webhook execution failed"
+ if webhook_execution_result.success?
+ webhook_repository.update_triggered_webhook_status triggered_webhook, TriggeredWebhook::STATUS_SUCCESS
+ else
+ webhook_repository.update_triggered_webhook_status triggered_webhook, TriggeredWebhook::STATUS_FAILURE
+ end
webhook_execution_result
end
+ def self.execute_triggered_webhook_now triggered_webhook, options
+ webhook_execution_result = triggered_webhook.execute options
+ webhook_repository.create_execution triggered_webhook, webhook_execution_result
+ webhook_execution_result
+ end
+
+ def self.update_triggered_webhook_status triggered_webhook, status
+ webhook_repository.update_triggered_webhook_status triggered_webhook, status
+ end
+
def self.find_by_consumer_and_provider consumer, provider
webhook_repository.find_by_consumer_and_provider consumer, provider
end
def self.execute_webhooks pact
webhooks = webhook_repository.find_by_consumer_and_provider pact.consumer, pact.provider
if webhooks.any?
- run_later(webhooks)
+ run_later(webhooks, pact)
else
logger.debug "No webhook found for consumer \"#{pact.consumer.name}\" and provider \"#{pact.provider.name}\""
end
end
- def self.run_later webhooks
+ def self.run_later webhooks, pact
+ trigger_uuid = next_uuid
webhooks.each do | webhook |
begin
+ triggered_webhook = webhook_repository.create_triggered_webhook(trigger_uuid, webhook, pact, PUBLICATION)
logger.info "Scheduling job for #{webhook.description} with uuid #{webhook.uuid}"
- Job.perform_async webhook: webhook
+ Job.perform_async triggered_webhook: triggered_webhook
rescue StandardError => e
log_error e
end
end
+ end
+
+ def self.find_latest_triggered_webhooks consumer, provider
+ webhook_repository.find_latest_triggered_webhooks consumer, provider
+ end
+
+ def self.fail_retrying_triggered_webhooks
+ webhook_repository.fail_retrying_triggered_webhooks
end
end
end
end