Sha256: b059bc7acd875b7801f04b0444b200c9e6039609b4b6b69b3d8a8847b4bd0251

Contents?: true

Size: 808 Bytes

Versions: 78

Compression:

Stored size: 808 Bytes

Contents

module Datadog
  module Pipeline
    # SpanFilter implements a processor that filters entire span subtrees
    class SpanFilter
      def initialize(filter = nil, &block)
        callable = filter || block

        raise(ArgumentError) unless callable.respond_to?(:call)

        @criteria = filter || block
      end

      def call(trace)
        black_list = trace.select(&method(:drop_it?))

        clean_trace(black_list, trace) while black_list.any?

        trace
      end

      private

      def drop_it?(span)
        @criteria.call(span) rescue false
      end

      def clean_trace(black_list, trace)
        current = black_list.shift

        trace.delete(current)

        trace.each do |span|
          black_list << span if span.parent == current
        end
      end
    end
  end
end

Version data entries

78 entries across 78 versions & 2 rubygems

Version Path
ddtrace-0.37.0 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.36.0 lib/ddtrace/pipeline/span_filter.rb
ls-trace-0.1.2 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.35.2 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.35.1 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.35.0 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.34.2 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.34.1 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.34.0 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.33.1 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.33.0 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.32.0 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.31.1 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.31.0 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.30.1 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.30.0 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.29.1 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.26.1 lib/ddtrace/pipeline/span_filter.rb
ls-trace-0.1.1 lib/ddtrace/pipeline/span_filter.rb
ddtrace-0.29.0 lib/ddtrace/pipeline/span_filter.rb