Module: Datadog::Profiling::Encoding::Profile::Protobuf

Defined in:
lib/ddtrace/profiling/encoding/profile.rb

Overview

Encodes gathered data into the pprof format

Class Method Summary collapse

Class Method Details

.encode(flush) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ddtrace/profiling/encoding/profile.rb', line 16

def encode(flush)
  return unless flush

  # Create a pprof template from the list of event types
  event_classes = flush.event_groups.collect(&:event_class).uniq
  template = Pprof::Template.for_event_classes(event_classes)

  # Add all events to the pprof
  flush.event_groups.each { |event_group| template.add_events!(event_group.event_class, event_group.events) }

  Datadog.logger.debug do
    max_events = Datadog.configuration.profiling.advanced.max_events
    events_sampled =
      if flush.event_count == max_events
        'max events limit hit, events were sampled [profile will be biased], '
      else
        ''
      end

    "Encoding profile covering #{flush.start.iso8601} to #{flush.finish.iso8601}, " \
    "events: #{flush.event_count} (#{events_sampled}#{template.debug_statistics})"
  end

  # Build the profile and encode it
  template.to_pprof(start: flush.start, finish: flush.finish)
end