|------+----+--+----+----| | 0.02
Usage examples::
Benelux.timeline['9dbd521de4dfd6257135649d78a9c0aa2dd58cfe'].each do |mark| p [mark.track, mark.name, mark.tags[:usecase], mark.tags[:call_id]] end Benelux.timeline.ranges(:do_request).each do |range| puts "Client%s: %s: %s: %f" % [range.track, range.thread_id, range.name, range.duration] end regions = Benelux.timeline(track_id).regions(:execute)
Methods
public class
public instance
Included modules
Attributes
caller | [R] | |
default_tags | [RW] | |
messages | [RW] | |
ranges | [RW] | |
stats | [RW] |
Public class methods
new
(*args)
[show source]
# File lib/benelux/timeline.rb, line 27 27: def initialize(*args) 28: @caller = Kernel.caller 29: @ranges = SelectableArray.new 30: @default_tags = Selectable::Tags.new 31: @stats = Benelux::Stats.new 32: @messages = SelectableArray.new 33: add_default_tag :thread_id => Thread.current.object_id.abs 34: super 35: end
Public instance methods
+
(other)
[show source]
# File lib/benelux/timeline.rb, line 192 192: def +(other) 193: self.push *other 194: @ranges.push *other.ranges 195: @messages.push *tl.messages 196: @stats += other.stats 197: self 198: end
[]
(*tags)
[show source]
# File lib/benelux/timeline.rb, line 77 77: def [](*tags) 78: tl = super 79: tl.ranges = @ranges.select do |region| 80: region.tags >= tags 81: end 82: stats = Benelux::Stats.new 83: @stats.each do |stat| 84: next unless stat.tags >= tags 85: stats += stat 86: end 87: tl.messages = messages 88: tl.stats = stats 89: tl 90: end
add_count
(name, count, tags={})
[show source]
# File lib/benelux/timeline.rb, line 157 157: def add_count(name, count, tags={}) 158: tags = tags.merge self.default_tags 159: self.stats.add_group(name) 160: self.stats.sample(name, count, tags) 161: count 162: end
add_default_tags
(tags=Selectable::Tags.new)
[show source]
# File lib/benelux/timeline.rb, line 36 36: def add_default_tags(tags=Selectable::Tags.new) 37: @default_tags.merge! tags 38: end
add_mark
(name)
[show source]
# File lib/benelux/timeline.rb, line 164 164: def add_mark(name) 165: mark = Benelux::Mark.now(name) 166: mark.add_tags self.default_tags 167: self << mark 168: mark 169: end
add_message
(msg, tags={})
msg is the message to store. This can be any type of object that includes Selectable::Object (so that tags can be added to the message to retreive it later). If msg does not include Selectable::Object it will be converted to a TaggableString object.
[show source]
# File lib/benelux/timeline.rb, line 147 147: def add_message(msg, tags={}) 148: unless msg.kind_of?(Selectable::Object) 149: msg = TaggableString.new msg.to_s 150: end 151: msg.add_tags self.default_tags 152: msg.add_tags tags 153: @messages << msg 154: msg 155: end
add_range
(name, from, to)
[show source]
# File lib/benelux/timeline.rb, line 171 171: def add_range(name, from, to) 172: range = Benelux::Range.new(name, from, to) 173: range.add_tags self.default_tags 174: range.add_tags from.tags 175: range.add_tags to.tags 176: self.ranges << range 177: self.stats.add_group(name) 178: self.stats.sample(name, range.duration, range.tags) 179: range 180: end
clear
()
[show source]
# File lib/benelux/timeline.rb, line 135 135: def clear 136: @ranges.clear 137: @stats.clear 138: @messages.clear 139: super 140: end
duration
()
[show source]
# File lib/benelux/timeline.rb, line 52 52: def duration 53: return 0 if self.last.nil? 54: self.last - self.first 55: end
each
(*args, &blk)
[show source]
# File lib/benelux/timeline.rb, line 57 57: def each(*args, &blk) 58: if args.empty? 59: super(&blk) 60: else 61: self.marks(*args).each(&blk) 62: end 63: end
marks
(*names)
obj.marks(:execute_a, :execute_z, :do_request_a) =>
[:execute_a, :do_request_a, :do_request_a, :execute_z]
[show source]
# File lib/benelux/timeline.rb, line 69 69: def marks(*names) 70: return self if names.empty? 71: names = names.flatten.collect { |n| n.to_s } 72: self.select do |mark| 73: names.member? mark.name.to_s 74: end 75: end
merge!
(*timelines)
[show source]
# File lib/benelux/timeline.rb, line 182 182: def merge!(*timelines) 183: timelines.each do |tl| 184: self.push *tl 185: @ranges.push *tl.ranges 186: @messages.push *tl.messages 187: @stats += tl.stats 188: end 189: self 190: end
messages
(tags=Selectable::Tags.new)
[show source]
# File lib/benelux/timeline.rb, line 128 128: def messages(tags=Selectable::Tags.new) 129: ret = @messages.select do |msg| 130: (tags.nil? || msg.tags >= tags) 131: end 132: SelectableArray.new ret 133: end
ranges
(name=nil, tags=Selectable::Tags.new)
obj.ranges(:do_request) =>
[[:do_request_a, :do_request_z], [:do_request_a, ...]]
[show source]
# File lib/benelux/timeline.rb, line 96 96: def ranges(name=nil, tags=Selectable::Tags.new) 97: return @ranges if name.nil? 98: @ranges.select do |range| 99: ret = name.to_s == range.name.to_s && 100: (tags.nil? || range.tags >= tags) 101: ret 102: end 103: end
regions
(name=nil, tags=Selectable::Tags.new)
obj.regions(:do_request) =>
[show source]
# File lib/benelux/timeline.rb, line 109 109: def regions(name=nil, tags=Selectable::Tags.new) 110: return self if name.nil? 111: self.ranges(name, tags).collect do |base_range| 112: marks = self.sort.select do |mark| 113: mark >= base_range.from && 114: mark <= base_range.to && 115: mark.tags >= base_range.tags 116: end 117: ranges = self.ranges.select do |range| 118: range.from >= base_range.from && 119: range.to <= base_range.to && 120: range.tags >= base_range.tags 121: end 122: tl = Benelux::Timeline.new(marks) 123: tl.ranges = ranges.sort 124: tl 125: end 126: end
remove_default_tags
(*tags)
[show source]
# File lib/benelux/timeline.rb, line 40 40: def remove_default_tags(*tags) 41: @default_tags.delete_if { |n,v| tags.member?(n) } 42: end
track
()
[show source]
# File lib/benelux/timeline.rb, line 44 44: def track 45: @default_tags[:track] 46: end