class GerbilCharts::Models::GraphModelGroup
GraphModelGroup
- a bunch of related models that are targeted at a
single output surface
Attributes
annotations[RW]
emptycaption[RW]
href[RW]
models[RW]
name[RW]
range_bands[RW]
ref_models[RW]
units[RW]
x_markers[RW]
Public Class Methods
new(n="Untitled-Group",opts={})
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 18 def initialize(n="Untitled-Group",opts={}) @models=[] @name=n @units=opts[:units] || "" @ref_models=[] @annotations=[] # array of [{:x, :y, :label}] @range_bands=[] # array of models [{:upper=>nil,:lower=>nil} ] end
Public Instance Methods
<<(m)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 27 def <<(m) @models << m end
add(m)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 31 def add(m) @models << m end
clear_models()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 70 def clear_models @models.clear end
compact_models()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 47 def compact_models @models.compact! end
contentKey(sessid,extension)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 291 def contentKey(sessid,extension) return sessid + @sessionKey + "." + extension end
count()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 51 def count return @models.size end
cumulative_round_range()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 263 def cumulative_round_range return 0,0 if @models.empty? reffx = RawRange.new reffy = RawRange.new @models.each do |m| reffx.update_r(m.xrange) reffy.update(m.yrange.rmax+reffy.rmax) end return models[0].rounderx.round_given(reffx), models[0].roundery.round_given(reffy) end
cumulative_round_range_y()
click to toggle source
sum of model ranges
# File lib/gerbilcharts/models/graph_model_group.rb, line 228 def cumulative_round_range_y reffy = RawRange.new @models.each do |m| reffy.update(m.yrange.rmax+reffy.rmax) end @ref_models.each do |ref_model| reffy.update(ref_model.yrange.rmax) end @range_bands.each do |range_band| reffy.update(range_band[:upper].yrange.rmax) reffy.update(range_band[:lower].yrange.rmax) end return models[0].round_given_y(reffy) end
cumulative_round_range_y0()
click to toggle source
sum of model ranges with min y being 0
# File lib/gerbilcharts/models/graph_model_group.rb, line 204 def cumulative_round_range_y0 return 0,100 if models.empty? reffy = RawRange.new reffy.update(0) @models.each do |m| reffy.update(m.yrange.rmax+reffy.rmax) if m.yrange.rmax end @ref_models.each do |ref_model| reffy.update(ref_model.yrange.rmax) end @range_bands.each do |range_band| reffy.update(range_band[:upper].yrange.rmax) reffy.update(range_band[:lower].yrange.rmax) end return models[0].round_given_y(reffy) end
cumulative_sweep_round_range_y0()
click to toggle source
sweep for an interval with y scale starting 0 this is most appropriate for network traffic charts
# File lib/gerbilcharts/models/graph_model_group.rb, line 250 def cumulative_sweep_round_range_y0 reffy=RawRange.new reffy.zeromin return cumulative_sweep_round_range_y_generic(reffy) end
delete(m)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 35 def delete(m) @models.delete(m) end
delete_by_index(i)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 39 def delete_by_index(i) @models.delete_at(i) end
each_model() { |m| ... }
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 55 def each_model @models.each do |m| yield m end end
each_model_with_index() { |m,i| ... }
click to toggle source
each model, index over code block
# File lib/gerbilcharts/models/graph_model_group.rb, line 89 def each_model_with_index @models.each_with_index do |m,i| yield m,i end end
each_user_data() { |userdata| ... }
click to toggle source
each user data over code block
# File lib/gerbilcharts/models/graph_model_group.rb, line 96 def each_user_data each_model do |mod| yield mod.userdata if mod.hasUserData? end end
effective_range_x(rangeopts=nil)
click to toggle source
rangeoptions
:auto
-
automatic rounded max and min range
:auto_0
-
automatic rounded max and 0 min
- +[min,max+
-
manual scaling
# File lib/gerbilcharts/models/graph_model_group.rb, line 107 def effective_range_x(rangeopts=nil) return effective_round_range_x if rangeopts.nil? if rangeopts.is_a?(Array) and rangeopts.size == 2 reffx = RawRange.new reffx.update(rangeopts[0]) reffx.update(rangeopts[1]) return reffx else case rangeopts.to_sym when :auto ;return effective_round_range_x when :auto_0 ;return effective_round_range_x else ;raise "Unknown range option" end end end
effective_range_y(rangeopts=nil)
click to toggle source
rangeoptions
:auto
-
automatic rounded max and min range
:auto_0
-
automatic rounded max and 0 min
- +[min,max+
-
manual scaling
# File lib/gerbilcharts/models/graph_model_group.rb, line 166 def effective_range_y(rangeopts=nil) if rangeopts.nil? return effective_round_range_y0 end if rangeopts == :auto return effective_round_range_y elsif rangeopts == :auto_0 or rangeopts == :auto_y0 return effective_round_range_y0 elsif rangeopts.respond_to?('size') and rangeopts.size == 2 reffy = RawRange.new reffy.update(rangeopts[0]) reffy.update(rangeopts[1]) return reffy end end
effective_round_range()
click to toggle source
effective round range rounds both x and y scales, returns two ranges
# File lib/gerbilcharts/models/graph_model_group.rb, line 127 def effective_round_range return 0,0 if @models.empty? reffx = RawRange.new reffy = RawRange.new @models.each do |m| reffx.update_r(m.xrange) reffy.update_r(m.yrange) end # todo : need to convert the round_given method to a class method return models[0].rounderx.round_given(reffx), models[0].roundery.round_given(reffy) end
effective_round_range_x()
click to toggle source
round the x ranges of all models
# File lib/gerbilcharts/models/graph_model_group.rb, line 144 def effective_round_range_x return 0,0 if @models.empty? reffx = RawRange.new @models.each do |m| reffx.update_r(m.xrange) end if reffx.invalid? reffx.update 10 end return models[0].round_given_x(reffx) end
effective_round_range_y()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 193 def effective_round_range_y reffy = RawRange.new @models.each { |m| reffy.update_r(m.yrange) } return @models[0].round_given_y(reffy) end
effective_round_range_y0()
click to toggle source
round the y ranges of all models but minimum fixed at 0
# File lib/gerbilcharts/models/graph_model_group.rb, line 184 def effective_round_range_y0 reffy = RawRange.new reffy.zeromin @models.each do |m| reffy.update_r(m.yrange) end return @models[0].round_given_y(reffy) end
empty?()
click to toggle source
empty ?
# File lib/gerbilcharts/models/graph_model_group.rb, line 322 def empty? return @models.empty? end
empty_caption()
click to toggle source
empty string
# File lib/gerbilcharts/models/graph_model_group.rb, line 327 def empty_caption return "No activity" if @emptycaption.nil? return @emptycaption end
find_model(name)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 61 def find_model(name) @models.each do |m| if m.name==name return m end end return nil end
hasHref?()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 300 def hasHref? return @href != nil end
has_x_markers?()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 332 def has_x_markers? not x_markers.nil? end
models_digest()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 278 def models_digest mnames = "" @models.each do |m| mnames << m.name end dig=Digest::MD5.hexdigest(mnames) return dig end
randomizeModels(mode=:latest_value)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 304 def randomizeModels(mode=:latest_value) @models.each do |m| if mode==:latest_value m.randomizeLastValue end end end
recreateModels(new_opts)
click to toggle source
recreate all models with new params
# File lib/gerbilcharts/models/graph_model_group.rb, line 313 def recreateModels(new_opts) @models.each do |m| m.updateOptions(new_opts) m.recreate end end
setHref(h)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 295 def setHref(h) h1=h.gsub("{","%7B") @href=h1.gsub("}","%7D") end
setSessionKey(k)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 287 def setSessionKey(k) @sessionKey=k end
set_null(i)
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 43 def set_null(i) @models[i]=nil end
sort(opts={})
click to toggle source
sort options
:dir => (:ascending or :descending) :mode => (:latest, :total )
# File lib/gerbilcharts/models/graph_model_group.rb, line 77 def sort(opts={}) raise "Missing sort direction" if not defined? opts[:dir] raise "Missing sort mode" if not defined? opts[:mode] @models.sort! { |m1,m2| m1.latest_val <=> m2.latest_val } @models.reverse! if opts[:dir] == :descending end
sweep_interval()
click to toggle source
# File lib/gerbilcharts/models/graph_model_group.rb, line 199 def sweep_interval return @models[0].sweep_interval end