Skip to content

Commit

Permalink
move integrations registry from Integration class to Instrumentation …
Browse files Browse the repository at this point in the history
…module
  • Loading branch information
anmarchenko committed Nov 15, 2024
1 parent 8e7e063 commit 489dd28
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 24 deletions.
4 changes: 2 additions & 2 deletions lib/datadog/ci/contrib/contrib.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# frozen_string_literal: true

require_relative "integration"
require_relative "instrumentation"

module Datadog
module CI
Expand All @@ -13,7 +13,7 @@ module Contrib
def self.auto_instrument_on_session_start!
Datadog.logger.debug("Auto instrumenting all integrations...")

Integration.registry.each do |name, integration|
Instrumentation.registry.each do |name, integration|
next unless integration.auto_instrument?

Datadog.logger.debug "#{name} is allowed to be auto instrumented"
Expand Down
20 changes: 19 additions & 1 deletion lib/datadog/ci/contrib/instrumentation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ module Contrib
module Instrumentation
class InvalidIntegrationError < StandardError; end

@registry = {}

def self.registry
@registry
end

def self.register_integration(integration_class)
@registry[integration_name(integration_class)] = integration_class.new
end

def self.instrument(integration_name, options = {}, &block)
integration = fetch_integration(integration_name)
integration.configure(options, &block)
Expand Down Expand Up @@ -34,9 +44,17 @@ def self.instrument(integration_name, options = {}, &block)
end

def self.fetch_integration(name)
Datadog::CI::Contrib::Integration.registry[name] ||
@registry[name] ||
raise(InvalidIntegrationError, "'#{name}' is not a valid integration.")
end

# take the parent module name and downcase it
# for example for Datadog::CI::Contrib::RSpec::Integration it will be :rspec
def self.integration_name(subclass)
result = subclass.name&.split("::")&.[](-2)&.downcase&.to_sym
raise "Integration name could not be derived for #{subclass}" if result.nil?
result
end
end
end
end
Expand Down
17 changes: 2 additions & 15 deletions lib/datadog/ci/contrib/integration.rb
Original file line number Diff line number Diff line change
@@ -1,27 +1,14 @@
# frozen_string_literal: true

require_relative "settings"
require_relative "instrumentation"

module Datadog
module CI
module Contrib
class Integration
@registry = {}

def self.inherited(subclass)
@registry[integration_name(subclass)] = subclass.new
end

# take the parent module name and downcase it
# for example for Datadog::CI::Contrib::RSpec::Integration it will be :rspec
def self.integration_name(subclass)
result = subclass.name&.split("::")&.[](-2)&.downcase&.to_sym
raise "Integration name could not be derived for #{subclass}" if result.nil?
result
end

def self.registry
@registry
Instrumentation.register_integration(subclass)
end

# List of integrations names that depend on this integration.
Expand Down
8 changes: 8 additions & 0 deletions sig/datadog/ci/contrib/instrumentation.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,17 @@ module Datadog
class InvalidIntegrationError < StandardError
end

self.@registry: Hash[Symbol, untyped]

def self.registry: () -> Hash[Symbol, untyped]

def self.instrument: (Symbol integration_name, ?::Hash[untyped, untyped] options) { (?) -> untyped } -> void

def self.fetch_integration: (Symbol name) -> untyped

def self.integration_name: (Class) -> Symbol

def self.register_integration: (Class integration) -> void
end
end
end
Expand Down
6 changes: 0 additions & 6 deletions sig/datadog/ci/contrib/integration.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,8 @@ module Datadog
module CI
module Contrib
class Integration
self.@registry: Hash[Symbol, untyped]

def self.inherited: (untyped) -> void

def self.registry: () -> Hash[Symbol, untyped]

def self.integration_name: (Class) -> Symbol

def version: () -> untyped

def available?: () -> bool
Expand Down

0 comments on commit 489dd28

Please sign in to comment.