Class: Datadog::Profiling::Pprof::StackSample
- Inherits:
-
Converter
- Object
- Converter
- Datadog::Profiling::Pprof::StackSample
show all
- Defined in:
- lib/ddtrace/profiling/pprof/stack_sample.rb
Overview
Builds a profile from a StackSample
NOTE: This class may appear stateless but is in fact stateful; a new instance should be created for every encoded profile.
Constant Summary
collapse
- SAMPLE_TYPES =
{
cpu_time_ns: [
Datadog::Ext::Profiling::Pprof::VALUE_TYPE_CPU,
Datadog::Ext::Profiling::Pprof::VALUE_UNIT_NANOSECONDS
],
wall_time_ns: [
Datadog::Ext::Profiling::Pprof::VALUE_TYPE_WALL,
Datadog::Ext::Profiling::Pprof::VALUE_UNIT_NANOSECONDS
]
}.freeze
Instance Attribute Summary
Attributes inherited from Converter
#builder
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Converter
#group_events, #sample_value_index
Constructor Details
Returns a new instance of StackSample.
30
31
32
33
34
35
|
# File 'lib/ddtrace/profiling/pprof/stack_sample.rb', line 30
def initialize(*_)
super
@processed_unique_stacks = 0
@processed_with_trace_ids = 0
end
|
Class Method Details
.sample_value_types ⇒ Object
26
27
28
|
# File 'lib/ddtrace/profiling/pprof/stack_sample.rb', line 26
def self.sample_value_types
SAMPLE_TYPES
end
|
Instance Method Details
#add_events!(stack_samples) ⇒ Object
37
38
39
40
|
# File 'lib/ddtrace/profiling/pprof/stack_sample.rb', line 37
def add_events!(stack_samples)
new_samples = build_samples(stack_samples)
builder.samples.concat(new_samples)
end
|
#build_sample(stack_sample, values) ⇒ Object
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/ddtrace/profiling/pprof/stack_sample.rb', line 54
def build_sample(stack_sample, values)
locations = builder.build_locations(
stack_sample.frames,
stack_sample.total_frame_count
)
Perftools::Profiles::Sample.new(
location_id: locations.collect { |location| location['id'.freeze] },
value: values,
label: build_sample_labels(stack_sample)
)
end
|
#build_sample_labels(stack_sample) ⇒ Object
#build_sample_values(stack_sample) ⇒ Object
67
68
69
70
71
72
73
|
# File 'lib/ddtrace/profiling/pprof/stack_sample.rb', line 67
def build_sample_values(stack_sample)
no_value = Datadog::Ext::Profiling::Pprof::SAMPLE_VALUE_NO_VALUE
values = super(stack_sample)
values[sample_value_index(:cpu_time_ns)] = stack_sample.cpu_time_interval_ns || no_value
values[sample_value_index(:wall_time_ns)] = stack_sample.wall_time_interval_ns || no_value
values
end
|
#build_samples(stack_samples) ⇒ Object
46
47
48
49
50
51
52
|
# File 'lib/ddtrace/profiling/pprof/stack_sample.rb', line 46
def build_samples(stack_samples)
groups = group_events(stack_samples, &method(:stack_sample_group_key))
groups.collect do |_group_key, group|
@processed_unique_stacks += 1
build_sample(group.sample, group.values)
end
end
|
#debug_statistics ⇒ Object
111
112
113
|
# File 'lib/ddtrace/profiling/pprof/stack_sample.rb', line 111
def debug_statistics
"unique stacks: #{@processed_unique_stacks}, of which had active traces: #{@processed_with_trace_ids}"
end
|
#stack_sample_group_key(stack_sample) ⇒ Object
42
43
44
|
# File 'lib/ddtrace/profiling/pprof/stack_sample.rb', line 42
def stack_sample_group_key(stack_sample)
stack_sample.hash
end
|