module ScoutApm::Serializers::PayloadSerializerToJson

Constants

ESCAPE_MAPPINGS

Public Class Methods

escape(string) click to toggle source
# File lib/scout_apm/serializers/payload_serializer_to_json.rb, line 63
def escape(string)
  ESCAPE_MAPPINGS.inject(string.to_s) {|s, (bad, good)| 
    s.gsub(bad, good)
  }
end
format_by_type(formatee) click to toggle source
# File lib/scout_apm/serializers/payload_serializer_to_json.rb, line 69
def format_by_type(formatee)
  case formatee
  when Hash
    jsonify_hash(formatee)
  when Array
    all_the_elements = formatee.map {|value_guy| format_by_type(value_guy)}
    "[#{all_the_elements.join(",")}]"
  when Numeric
    formatee
  when Time
    %Q["#{formatee.iso8601}"]
  when nil
    "null"
  else # strings and everything
    %Q["#{escape(formatee)}"]
  end
end
jsonify_hash(hash) click to toggle source
# File lib/scout_apm/serializers/payload_serializer_to_json.rb, line 41
def jsonify_hash(hash)
  str_parts = []
  hash.each do |key, value|
    formatted_key = format_by_type(key)
    formatted_value = format_by_type(value)
    str_parts << "#{formatted_key}:#{formatted_value}"
  end
  "{#{str_parts.join(",")}}"
end
rearrange_slow_transaction(slow_t) click to toggle source

takes just one slow transaction

# File lib/scout_apm/serializers/payload_serializer_to_json.rb, line 37
def rearrange_slow_transaction(slow_t)
  slow_t.as_json.merge(:metrics => rearrange_the_metrics(slow_t.metrics), :allocation_metrics => rearrange_the_metrics(slow_t.allocation_metrics))
end
rearrange_the_metrics(metrics) click to toggle source

For the old style of metric serializing.

# File lib/scout_apm/serializers/payload_serializer_to_json.rb, line 25
def rearrange_the_metrics(metrics)
  metrics.to_a.map do |meta, stats|
    stats.as_json.merge(:key => meta.as_json)
  end
end
rearrange_the_slow_transactions(slow_transactions) click to toggle source

takes an array of slow transactions

# File lib/scout_apm/serializers/payload_serializer_to_json.rb, line 32
def rearrange_the_slow_transactions(slow_transactions)
  slow_transactions.to_a.map { |t| rearrange_slow_transaction(t) }
end
serialize(metadata, metrics, slow_transactions, jobs, slow_jobs, histograms, db_query_metrics, external_service_metrics, traces) click to toggle source
# File lib/scout_apm/serializers/payload_serializer_to_json.rb, line 5
def serialize(metadata, metrics, slow_transactions, jobs, slow_jobs, histograms, db_query_metrics, external_service_metrics, traces)
  metadata.merge!({:payload_version => 2})

  jsonify_hash({:metadata => metadata,
                :metrics => rearrange_the_metrics(metrics),
                :slow_transactions => rearrange_the_slow_transactions(slow_transactions),
                :jobs => JobsSerializerToJson.new(jobs).as_json,
                :slow_jobs => SlowJobsSerializerToJson.new(slow_jobs).as_json,
                :histograms => HistogramsSerializerToJson.new(histograms).as_json,
                :db_metrics => {
                  :query => DbQuerySerializerToJson.new(db_query_metrics).as_json,
                },
                :es_metrics => {
                  :http => ExternalServiceSerializerToJson.new(external_service_metrics).as_json,
                },
                :span_traces => traces.map{ |t| t.as_json },
  })
end