Sha256: 3f857f3df3a1adab68aa6b9044e178e49846bbb41ed479063ffe0ef2985c8e29

Contents?: true

Size: 1.88 KB

Versions: 2

Compression:

Stored size: 1.88 KB

Contents

# (c) Copyright IBM Corp. 2021
# (c) Copyright Instana Inc. 2021

module Instana
  module Backend
    # Wrapper class around the various transport backends
    # @since 1.197.0
    class Agent
      attr_reader :delegate

      def initialize(fargate_metadata_uri: ENV['ECS_CONTAINER_METADATA_URI'], logger: ::Instana.logger)
        @delegate = nil
        @logger = logger
        @fargate_metadata_uri = fargate_metadata_uri
      end

      def setup
        @delegate = if ENV.key?('_HANDLER')
                      ServerlessAgent.new([Snapshot::LambdaFunction.new])
                    elsif @fargate_metadata_uri && ENV.key?('INSTANA_ENDPOINT_URL')
                      ServerlessAgent.new(fargate_snapshots)
                    else
                      HostAgent.new
                    end

        @delegate.setup
      end

      def method_missing(mth, *args, &block)
        if @delegate.respond_to?(mth)
          @delegate.public_send(mth, *args, &block)
        else
          super(mth, *args, &block)
        end
      end

      def respond_to_missing?(mth, include_all = false)
        @delegate.respond_to?(mth, include_all)
      end

      private

      def fargate_snapshots
        metadata_uri = URI(@fargate_metadata_uri)
        client = Backend::RequestClient.new(metadata_uri.host, metadata_uri.port, use_ssl: metadata_uri.scheme == "https")
        response = client.send_request('GET', "#{metadata_uri.path}/task")

        if response.ok?
          docker = response
                   .json['Containers']
                   .map { |c| [Snapshot::DockerContainer.new(c), Snapshot::FargateContainer.new(c)] }
                   .flatten

          docker + [Snapshot::FargateProcess.new, Snapshot::RubyProcess.new, Snapshot::FargateTask.new]
        else
          @logger.warn("Received #{response.code} when requesting containers.")
          []
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
instana-1.198.0 lib/instana/backend/agent.rb
instana-1.198.0.pre1 lib/instana/backend/agent.rb