Sha256: e234b29558b56e192f4a0fa4800f5d48e58b4865e8af3310a4977f84b069323a

Contents?: true

Size: 1.58 KB

Versions: 25

Compression:

Stored size: 1.58 KB

Contents

# Take a TrackedRequest and turn it into a hash of:
#   MetricMeta => MetricStats
module ScoutApm
  module LayerConverters
    class MetricConverter < ConverterBase
      def call
        scope = scope_layer

        # TODO: Track requests that never reach a Controller (for example, when
        # Middleware decides to return rather than passing onward)
        return {} unless scope

        create_metrics
      end

      # Full metrics from this request. These get aggregated in Store for the
      # overview metrics, or stored permanently in a SlowTransaction
      # Some merging of metrics will happen here, so if a request calls the same
      # ActiveRecord or View repeatedly, it'll get merged.
      def create_metrics
        metric_hash = Hash.new

        walker.walk do |layer|
          next if skip_layer?(layer)

          meta_options = if layer == scope_layer # We don't scope the controller under itself
                          {}
                        else
                          {:scope => scope_layer.legacy_metric_name}
                        end

          # we don't need to use the full metric name for scoped metrics as we only display metrics aggregrated
          # by type.
          metric_name = meta_options.has_key?(:scope) ? layer.type : layer.legacy_metric_name

          meta = MetricMeta.new(metric_name, meta_options)
          metric_hash[meta] ||= MetricStats.new( meta_options.has_key?(:scope) )

          stat = metric_hash[meta]
          stat.update!(layer.total_call_time, layer.total_exclusive_time)
        end
        metric_hash
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
scout_apm-3.0.0.pre11 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.32 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.31 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.30 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.29 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.28 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.27 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.26 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-3.0.0.pre10 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.24 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.23 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-3.0.0.pre9 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.22 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.21 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.20 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-3.0.0.pre8 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.19 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-3.0.0.pre7 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-2.1.18 lib/scout_apm/layer_converters/metric_converter.rb
scout_apm-3.0.0.pre6 lib/scout_apm/layer_converters/metric_converter.rb