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