opentelemetry-sdk 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +2 -2
- data/lib/opentelemetry/sdk/configurator.rb +6 -6
- data/lib/opentelemetry/sdk/resources/constants.rb +40 -0
- data/lib/opentelemetry/sdk/resources/resource.rb +17 -5
- data/lib/opentelemetry/sdk/trace/export/batch_span_processor.rb +9 -9
- data/lib/opentelemetry/sdk/trace/span.rb +12 -7
- data/lib/opentelemetry/sdk/version.rb +1 -1
- metadata +9 -9
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b64da58e8086f08efd2f7bace98369ec16936abcf95996588bda288a592d5912
         | 
| 4 | 
            +
              data.tar.gz: 4d67cd982c51998cf0396531bcbaae6f62f23b89314793def72410624c87a645
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3d8d0331a351e32cf184a512c155c6d3944bb5bbbb2857aad27636bdc7eca58081d45e6d778eecd50681e1a1c471c75f9cf7d8116b57ba5c5c5b7a5838f3a648
         | 
| 7 | 
            +
              data.tar.gz: ef884f72a85e1457b1d160d2075313df169f895cfe92831d87e77022244db6b6d980f7a36f6c88926886fd67538e916c2e813728ce80aa2897ef24da216d2924
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,15 @@ | |
| 1 1 | 
             
            # Release History: opentelemetry-sdk
         | 
| 2 2 |  | 
| 3 | 
            +
            ### v0.13.0 / 2021-01-29
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * BREAKING CHANGE: Remove MILLIS from BatchSpanProcessor vars 
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * ADDED: Process.runtime resource 
         | 
| 8 | 
            +
            * ADDED: Provide default resource in SDK 
         | 
| 9 | 
            +
            * ADDED: Add optional attributes to record_exception 
         | 
| 10 | 
            +
            * FIXED: Resource.merge consistency 
         | 
| 11 | 
            +
            * FIXED: Remove MILLIS from BatchSpanProcessor vars 
         | 
| 12 | 
            +
             | 
| 3 13 | 
             
            ### v0.12.1 / 2021-01-13
         | 
| 4 14 |  | 
| 5 15 | 
             
            * FIXED: Fix several BatchSpanProcessor errors related to fork safety 
         | 
    
        data/README.md
    CHANGED
    
    | @@ -66,8 +66,8 @@ The `opentelemetry-sdk` gem is distributed under the Apache 2.0 license. See [LI | |
| 66 66 | 
             
            [opentelemetry-home]: https://opentelemetry.io
         | 
| 67 67 | 
             
            [bundler-home]: https://bundler.io
         | 
| 68 68 | 
             
            [repo-github]: https://github.com/open-telemetry/opentelemetry-ruby
         | 
| 69 | 
            -
            [license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/ | 
| 70 | 
            -
            [examples-github]: https://github.com/open-telemetry/opentelemetry-ruby/tree/ | 
| 69 | 
            +
            [license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/main/LICENSE
         | 
| 70 | 
            +
            [examples-github]: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/examples
         | 
| 71 71 | 
             
            [ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
         | 
| 72 72 | 
             
            [community-meetings]: https://github.com/open-telemetry/community#community-meetings
         | 
| 73 73 | 
             
            [ruby-gitter]: https://gitter.im/open-telemetry/opentelemetry-ruby
         | 
| @@ -27,7 +27,7 @@ module OpenTelemetry | |
| 27 27 | 
             
                    @text_map_injectors = nil
         | 
| 28 28 | 
             
                    @span_processors = []
         | 
| 29 29 | 
             
                    @use_mode = USE_MODE_UNSPECIFIED
         | 
| 30 | 
            -
                    @resource = Resources::Resource. | 
| 30 | 
            +
                    @resource = Resources::Resource.default
         | 
| 31 31 | 
             
                    @id_generator = OpenTelemetry::Trace
         | 
| 32 32 | 
             
                  end
         | 
| 33 33 |  | 
| @@ -46,7 +46,7 @@ module OpenTelemetry | |
| 46 46 | 
             
                  #
         | 
| 47 47 | 
             
                  # @param [Resource] new_resource The resource to be merged
         | 
| 48 48 | 
             
                  def resource=(new_resource)
         | 
| 49 | 
            -
                    @resource =  | 
| 49 | 
            +
                    @resource = @resource.merge(new_resource)
         | 
| 50 50 | 
             
                  end
         | 
| 51 51 |  | 
| 52 52 | 
             
                  # Accepts a string that is merged in as the service.name resource attribute.
         | 
| @@ -54,9 +54,9 @@ module OpenTelemetry | |
| 54 54 | 
             
                  # calls to this setter.
         | 
| 55 55 | 
             
                  # @param [String] service_name The value to be used as the service name
         | 
| 56 56 | 
             
                  def service_name=(service_name)
         | 
| 57 | 
            -
                     | 
| 57 | 
            +
                    self.resource = OpenTelemetry::SDK::Resources::Resource.create(
         | 
| 58 58 | 
             
                      OpenTelemetry::SDK::Resources::Constants::SERVICE_RESOURCE[:name] => service_name
         | 
| 59 | 
            -
                    ) | 
| 59 | 
            +
                    )
         | 
| 60 60 | 
             
                  end
         | 
| 61 61 |  | 
| 62 62 | 
             
                  # Accepts a string that is merged in as the service.version resource attribute.
         | 
| @@ -64,9 +64,9 @@ module OpenTelemetry | |
| 64 64 | 
             
                  # calls to this setter.
         | 
| 65 65 | 
             
                  # @param [String] service_version The value to be used as the service version
         | 
| 66 66 | 
             
                  def service_version=(service_version)
         | 
| 67 | 
            -
                     | 
| 67 | 
            +
                    self.resource = OpenTelemetry::SDK::Resources::Resource.create(
         | 
| 68 68 | 
             
                      OpenTelemetry::SDK::Resources::Constants::SERVICE_RESOURCE[:version] => service_version
         | 
| 69 | 
            -
                    ) | 
| 69 | 
            +
                    )
         | 
| 70 70 | 
             
                  end
         | 
| 71 71 |  | 
| 72 72 | 
             
                  # Install an instrumentation with specificied optional +config+.
         | 
| @@ -77,6 +77,46 @@ module OpenTelemetry | |
| 77 77 | 
             
                      deployment_name: 'k8s.deployment.name'
         | 
| 78 78 | 
             
                    }.freeze
         | 
| 79 79 |  | 
| 80 | 
            +
                    # Attributes defining an operating system process.
         | 
| 81 | 
            +
                    PROCESS_RESOURCE = {
         | 
| 82 | 
            +
                      # Process identifier (PID).
         | 
| 83 | 
            +
                      pid: 'process.pid',
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                      # The name of the process executable.
         | 
| 86 | 
            +
                      executable_name: 'process.executable.name',
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                      # The full path to the process executable.
         | 
| 89 | 
            +
                      executable_path: 'process.executable.path',
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                      # The command used to launch the process (i.e. the command name).
         | 
| 92 | 
            +
                      command: 'process.command',
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                      # The full command used to launch the process as a single string
         | 
| 95 | 
            +
                      # representing the full command.
         | 
| 96 | 
            +
                      command_line: 'process.command_line',
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                      # All the command arguments (including the command/executable itself)
         | 
| 99 | 
            +
                      # as received by the process.
         | 
| 100 | 
            +
                      command_args: 'process.command_args',
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                      # The username of the user that owns the process.
         | 
| 103 | 
            +
                      owner: 'process.owner'
         | 
| 104 | 
            +
                    }.freeze
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    # Attributes defining the single (language) runtime instance which is monitored.
         | 
| 107 | 
            +
                    PROCESS_RUNTIME_RESOURCE = {
         | 
| 108 | 
            +
                      # The name of the runtime of this process.
         | 
| 109 | 
            +
                      name: 'process.runtime.name',
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                      # The version of the runtime of this process, as returned by the runtime
         | 
| 112 | 
            +
                      # without modification.
         | 
| 113 | 
            +
                      version: 'process.runtime.version',
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                      # An additional description about the runtime of the process, for example
         | 
| 116 | 
            +
                      # a specific vendor customization of the runtime environment.
         | 
| 117 | 
            +
                      description: 'process.runtime.description'
         | 
| 118 | 
            +
                    }.freeze
         | 
| 119 | 
            +
             | 
| 80 120 | 
             
                    # Attributes defining a computing instance (e.g. host).
         | 
| 81 121 | 
             
                    HOST_RESOURCE = {
         | 
| 82 122 | 
             
                      # Unique host id. For Cloud this must be the instance_id assigned by the
         | 
| @@ -30,6 +30,10 @@ module OpenTelemetry | |
| 30 30 | 
             
                        new(frozen_attributes)
         | 
| 31 31 | 
             
                      end
         | 
| 32 32 |  | 
| 33 | 
            +
                      def default
         | 
| 34 | 
            +
                        @default ||= telemetry_sdk.merge(process).merge(create(Constants::SERVICE_RESOURCE[:name] => 'unknown_service'))
         | 
| 35 | 
            +
                      end
         | 
| 36 | 
            +
             | 
| 33 37 | 
             
                      def telemetry_sdk
         | 
| 34 38 | 
             
                        resource_attributes = {
         | 
| 35 39 | 
             
                          Constants::TELEMETRY_SDK_RESOURCE[:name] => 'opentelemetry',
         | 
| @@ -48,6 +52,18 @@ module OpenTelemetry | |
| 48 52 | 
             
                        resource_attributes.delete_if { |_key, value| value.nil? || value.empty? }
         | 
| 49 53 | 
             
                        create(resource_attributes)
         | 
| 50 54 | 
             
                      end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                      def process
         | 
| 57 | 
            +
                        resource_attributes = {
         | 
| 58 | 
            +
                          Constants::PROCESS_RESOURCE[:pid] => Process.pid,
         | 
| 59 | 
            +
                          Constants::PROCESS_RESOURCE[:command] => $PROGRAM_NAME,
         | 
| 60 | 
            +
                          Constants::PROCESS_RUNTIME_RESOURCE[:name] => RUBY_ENGINE,
         | 
| 61 | 
            +
                          Constants::PROCESS_RUNTIME_RESOURCE[:version] => RUBY_VERSION,
         | 
| 62 | 
            +
                          Constants::PROCESS_RUNTIME_RESOURCE[:description] => RUBY_DESCRIPTION
         | 
| 63 | 
            +
                        }
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                        create(resource_attributes)
         | 
| 66 | 
            +
                      end
         | 
| 51 67 | 
             
                    end
         | 
| 52 68 |  | 
| 53 69 | 
             
                    # @api private
         | 
| @@ -79,11 +95,7 @@ module OpenTelemetry | |
| 79 95 | 
             
                    def merge(other)
         | 
| 80 96 | 
             
                      return self unless other.is_a?(Resource)
         | 
| 81 97 |  | 
| 82 | 
            -
                       | 
| 83 | 
            -
                        old_v.empty? ? new_v : old_v
         | 
| 84 | 
            -
                      end
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                      self.class.send(:new, merged_attributes.freeze)
         | 
| 98 | 
            +
                      self.class.send(:new, attributes.merge(other.attributes).freeze)
         | 
| 87 99 | 
             
                    end
         | 
| 88 100 |  | 
| 89 101 | 
             
                    protected
         | 
| @@ -19,7 +19,7 @@ module OpenTelemetry | |
| 19 19 | 
             
                    # All spans reported by the SDK implementation are first added to a
         | 
| 20 20 | 
             
                    # synchronized queue (with a {max_queue_size} maximum size, after the
         | 
| 21 21 | 
             
                    # size is reached spans are dropped) and exported every
         | 
| 22 | 
            -
                    #  | 
| 22 | 
            +
                    # schedule_delay to the exporter pipeline in batches of
         | 
| 23 23 | 
             
                    # max_export_batch_size.
         | 
| 24 24 | 
             
                    #
         | 
| 25 25 | 
             
                    # If the queue gets half full a preemptive notification is sent to the
         | 
| @@ -29,11 +29,11 @@ module OpenTelemetry | |
| 29 29 | 
             
                      # Returns a new instance of the {BatchSpanProcessor}.
         | 
| 30 30 | 
             
                      #
         | 
| 31 31 | 
             
                      # @param [SpanExporter] exporter
         | 
| 32 | 
            -
                      # @param [Numeric]  | 
| 33 | 
            -
                      #   consecutive exports. Defaults to the value of the  | 
| 32 | 
            +
                      # @param [Numeric] exporter_timeout the delay interval between two
         | 
| 33 | 
            +
                      #   consecutive exports. Defaults to the value of the OTEL_BSP_EXPORT_TIMEOUT
         | 
| 34 34 | 
             
                      #   environment variable, if set, or 30,000 (30 seconds).
         | 
| 35 | 
            -
                      # @param [Numeric]  | 
| 36 | 
            -
                      #   Defaults to the value of the  | 
| 35 | 
            +
                      # @param [Numeric] schedule_delay the maximum allowed time to export data.
         | 
| 36 | 
            +
                      #   Defaults to the value of the OTEL_BSP_SCHEDULE_DELAY environment
         | 
| 37 37 | 
             
                      #   variable, if set, or 5,000 (5 seconds).
         | 
| 38 38 | 
             
                      # @param [Integer] max_queue_size the maximum queue size in spans.
         | 
| 39 39 | 
             
                      #   Defaults to the value of the OTEL_BSP_MAX_QUEUE_SIZE environment
         | 
| @@ -44,8 +44,8 @@ module OpenTelemetry | |
| 44 44 | 
             
                      #
         | 
| 45 45 | 
             
                      # @return a new instance of the {BatchSpanProcessor}.
         | 
| 46 46 | 
             
                      def initialize(exporter:,
         | 
| 47 | 
            -
                                      | 
| 48 | 
            -
                                      | 
| 47 | 
            +
                                     exporter_timeout: Float(ENV.fetch('OTEL_BSP_EXPORT_TIMEOUT', 30_000)),
         | 
| 48 | 
            +
                                     schedule_delay: Float(ENV.fetch('OTEL_BSP_SCHEDULE_DELAY', 5_000)),
         | 
| 49 49 | 
             
                                     max_queue_size: Integer(ENV.fetch('OTEL_BSP_MAX_QUEUE_SIZE', 2048)),
         | 
| 50 50 | 
             
                                     max_export_batch_size: Integer(ENV.fetch('OTEL_BSP_MAX_EXPORT_BATCH_SIZE', 512)),
         | 
| 51 51 | 
             
                                     start_thread_on_boot: String(ENV['OTEL_RUBY_BSP_START_THREAD_ON_BOOT']) !~ /false/i,
         | 
| @@ -53,12 +53,12 @@ module OpenTelemetry | |
| 53 53 | 
             
                        raise ArgumentError if max_export_batch_size > max_queue_size
         | 
| 54 54 |  | 
| 55 55 | 
             
                        @exporter = exporter
         | 
| 56 | 
            -
                        @exporter_timeout_seconds =  | 
| 56 | 
            +
                        @exporter_timeout_seconds = exporter_timeout / 1000.0
         | 
| 57 57 | 
             
                        @mutex = Mutex.new
         | 
| 58 58 | 
             
                        @export_mutex = Mutex.new
         | 
| 59 59 | 
             
                        @condition = ConditionVariable.new
         | 
| 60 60 | 
             
                        @keep_running = true
         | 
| 61 | 
            -
                        @delay_seconds =  | 
| 61 | 
            +
                        @delay_seconds = schedule_delay / 1000.0
         | 
| 62 62 | 
             
                        @max_queue_size = max_queue_size
         | 
| 63 63 | 
             
                        @batch_size = max_export_batch_size
         | 
| 64 64 | 
             
                        @metrics_reporter = metrics_reporter || OpenTelemetry::SDK::Trace::Export::MetricsReporter
         | 
| @@ -120,15 +120,20 @@ module OpenTelemetry | |
| 120 120 | 
             
                    # can be recorded on a span.
         | 
| 121 121 | 
             
                    #
         | 
| 122 122 | 
             
                    # @param [Exception] exception The exception to be recorded
         | 
| 123 | 
            +
                    # @param [optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}]
         | 
| 124 | 
            +
                    #   attributes One or more key:value pairs, where the keys must be
         | 
| 125 | 
            +
                    #   strings and the values may be (array of) string, boolean or numeric
         | 
| 126 | 
            +
                    #   type.
         | 
| 123 127 | 
             
                    #
         | 
| 124 128 | 
             
                    # @return [void]
         | 
| 125 | 
            -
                    def record_exception(exception)
         | 
| 126 | 
            -
                       | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 129 | 
            +
                    def record_exception(exception, attributes: nil)
         | 
| 130 | 
            +
                      event_attributes = {
         | 
| 131 | 
            +
                        'exception.type' => exception.class.to_s,
         | 
| 132 | 
            +
                        'exception.message' => exception.message,
         | 
| 133 | 
            +
                        'exception.stacktrace' => exception.full_message(highlight: false, order: :top)
         | 
| 134 | 
            +
                      }
         | 
| 135 | 
            +
                      event_attributes.merge!(attributes) unless attributes.nil?
         | 
| 136 | 
            +
                      add_event('exception', attributes: event_attributes)
         | 
| 132 137 | 
             
                    end
         | 
| 133 138 |  | 
| 134 139 | 
             
                    # Sets the Status to the Span
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: opentelemetry-sdk
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.13.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - OpenTelemetry Authors
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021-01- | 
| 11 | 
            +
            date: 2021-01-30 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: opentelemetry-api
         | 
| @@ -16,28 +16,28 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 0. | 
| 19 | 
            +
                    version: 0.13.0
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 0. | 
| 26 | 
            +
                    version: 0.13.0
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: opentelemetry-common
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 0. | 
| 33 | 
            +
                    version: 0.13.0
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 0. | 
| 40 | 
            +
                    version: 0.13.0
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: bundler
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -201,10 +201,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby | |
| 201 201 | 
             
            licenses:
         | 
| 202 202 | 
             
            - Apache-2.0
         | 
| 203 203 | 
             
            metadata:
         | 
| 204 | 
            -
              changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v0. | 
| 205 | 
            -
              source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/ | 
| 204 | 
            +
              changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v0.13.0/file.CHANGELOG.html
         | 
| 205 | 
            +
              source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/sdk
         | 
| 206 206 | 
             
              bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
         | 
| 207 | 
            -
              documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v0. | 
| 207 | 
            +
              documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v0.13.0
         | 
| 208 208 | 
             
            post_install_message: 
         | 
| 209 209 | 
             
            rdoc_options: []
         | 
| 210 210 | 
             
            require_paths:
         |