Class: NewRelic::Agent::ThreadProfile::Node

Inherits:
Object
  • Object
show all
Includes:
Coerce
Defined in:
lib/new_relic/agent/thread_profiler.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Coerce

#float, #int, #log_failure, #string

Constructor Details

#initialize(line, parent = nil) ⇒ Node

Returns a new instance of Node.



265
266
267
268
269
270
271
272
273
274
275
276
# File 'lib/new_relic/agent/thread_profiler.rb', line 265

def initialize(line, parent=nil)
  line =~ /(.*)\:(\d+)\:in `(.*)'/
  @file = $1
  @method = $3
  @line_no = $2.to_i
  @children = []
  @runnable_count = 0
  @to_prune = false
  @depth = 0

  parent.add_child(self) if parent
end

Instance Attribute Details

#childrenObject (readonly)

Returns the value of attribute children.



262
263
264
# File 'lib/new_relic/agent/thread_profiler.rb', line 262

def children
  @children
end

#depthObject

Returns the value of attribute depth.



263
264
265
# File 'lib/new_relic/agent/thread_profiler.rb', line 263

def depth
  @depth
end

#fileObject (readonly)

Returns the value of attribute file.



262
263
264
# File 'lib/new_relic/agent/thread_profiler.rb', line 262

def file
  @file
end

#line_noObject (readonly)

Returns the value of attribute line_no.



262
263
264
# File 'lib/new_relic/agent/thread_profiler.rb', line 262

def line_no
  @line_no
end

#methodObject (readonly)

Returns the value of attribute method.



262
263
264
# File 'lib/new_relic/agent/thread_profiler.rb', line 262

def method
  @method
end

#runnable_countObject

Returns the value of attribute runnable_count.



263
264
265
# File 'lib/new_relic/agent/thread_profiler.rb', line 263

def runnable_count
  @runnable_count
end

#to_pruneObject

Returns the value of attribute to_prune.



263
264
265
# File 'lib/new_relic/agent/thread_profiler.rb', line 263

def to_prune
  @to_prune
end

Class Method Details

.prune!(kids) ⇒ Object



315
316
317
318
# File 'lib/new_relic/agent/thread_profiler.rb', line 315

def self.prune!(kids)
  kids.delete_if { |child| child.to_prune }
  kids.each { |child| child.prune! }
end

Instance Method Details

#==(other) ⇒ Object



278
279
280
281
282
# File 'lib/new_relic/agent/thread_profiler.rb', line 278

def ==(other)
  @file == other.file &&
    @method == other.method &&
    @line_no == other.line_no
end

#add_child(child) ⇒ Object



306
307
308
309
# File 'lib/new_relic/agent/thread_profiler.rb', line 306

def add_child(child)
  child.depth = @depth + 1
  @children << child unless @children.include? child
end

#order_for_pruning(y) ⇒ Object

Descending order on count, ascending on depth of nodes



289
290
291
# File 'lib/new_relic/agent/thread_profiler.rb', line 289

def order_for_pruning(y)
  [-runnable_count, depth] <=> [-y.runnable_count, y.depth]
end

#prune!Object



311
312
313
# File 'lib/new_relic/agent/thread_profiler.rb', line 311

def prune!
  Node.prune!(@children)
end

#to_arrayObject



295
296
297
298
299
300
301
302
303
304
# File 'lib/new_relic/agent/thread_profiler.rb', line 295

def to_array
  [[
      string(@file),
      string(@method),
      int(@line_no)
    ],
    int(@runnable_count),
    0,
    @children.map {|c| c.to_array}]
end

#total_countObject



284
285
286
# File 'lib/new_relic/agent/thread_profiler.rb', line 284

def total_count
  @runnable_count
end