Module: ScoutApm::Serializers::PayloadSerializerToJson

Defined in:
lib/scout_apm/serializers/payload_serializer_to_json.rb

Constant Summary collapse

ESCAPE_MAPPINGS =
{
  "\b" => '\\b',
  "\t" => '\\t',
  "\n" => '\\n',
  "\f" => '\\f',
  "\r" => '\\r',
  '"'  => '\\"',
  '\\' => '\\\\',
}

Class Method Summary collapse

Class Method Details

.escape(string) ⇒ Object



58
59
60
# File 'lib/scout_apm/serializers/payload_serializer_to_json.rb', line 58

def escape(string)
  ESCAPE_MAPPINGS.inject(string.to_s) {|s, (bad, good)| s.gsub(bad, good) }
end

.format_by_type(formatee) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/scout_apm/serializers/payload_serializer_to_json.rb', line 62

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) ⇒ Object



38
39
40
41
42
43
44
45
46
# File 'lib/scout_apm/serializers/payload_serializer_to_json.rb', line 38

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) ⇒ Object

takes just one slow transaction



34
35
36
# File 'lib/scout_apm/serializers/payload_serializer_to_json.rb', line 34

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) ⇒ Object

For the old style of metric serializing.



22
23
24
25
26
# File 'lib/scout_apm/serializers/payload_serializer_to_json.rb', line 22

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) ⇒ Object

takes an array of slow transactions



29
30
31
# File 'lib/scout_apm/serializers/payload_serializer_to_json.rb', line 29

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, traces) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/scout_apm/serializers/payload_serializer_to_json.rb', line 5

def serialize(, metrics, slow_transactions, jobs, slow_jobs, histograms, db_query_metrics, traces)
  .merge!({:payload_version => 2})

  jsonify_hash({: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,
                },
                :span_traces => traces.map{ |t| t.as_json },
  })
end