Class Benelux::Timeline

  1. lib/benelux/timeline.rb
Parent: Array
|------+----+--+----+----|
       |
      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)

Included modules

  1. Selectable

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_tag (tags=Selectable::Tags.new)

Alias for add_default_tags

add_default_tag (tags=Selectable::Tags.new)

Alias for add_default_tags

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
dump ()
[show source]
    # File lib/benelux/timeline.rb, line 48
48:     def dump
49:        
50:     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