<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=us-ascii" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
<tt>Comments inline</tt><br>
<br>
Hugh O. Brock wrote:
<blockquote cite="mid:20080528194612.GB20260@redhat.com" type="cite">
  <blockquote type="cite">
    <pre wrap="">
   # retrieves data used by history graphs
   def history_graph
-    today = DateTime.now
+    target = params[:target]
+    today = Time.now
+    requestList = [ StatsRequest.new(@pool.id, target, 0, "used", today.to_i - 3600, 3600, 0), 
+                    StatsRequest.new(@pool.id, target, 0, "peak", today.to_i - 3600, 3600, 0) ]
     dates = [ Date::ABBR_MONTHNAMES[today.month] + ' ' + today.day.to_s ]
     1.upto(6){ |x|  # TODO get # of days from wui
        dte = today - x
        dates.push ( Date::ABBR_MONTHNAMES[dte.month] + ' ' + dte.day.to_s )
+       requestList.push ( StatsRequest.new (@pool.id, target, 0, "used", dte.to_i - 3600, 3600, 0), 
+                          StatsRequest.new (@pool.id, target, 0, "peak", dte.to_i - 3600, 3600, 0) )
    </pre>
  </blockquote>
</blockquote>
<tt>Not sure what exactly you are trying to get in the above chunk of
code.  Doesn't look like its something gathered by collectd at this
point in time. If you let me know what data it is, we can see about
adding it to the collectd configuration.<br>
</tt>
<blockquote cite="mid:20080528194612.GB20260@redhat.com" type="cite">
  <blockquote type="cite">
    <pre wrap="">     }
     dates.reverse! # want in ascending order
-
-    target = params[:target]
-    peakvalues = nil
-    avgvalues  = nil
-    if target == 'host_usage'
-       peakvalues = [95.97, 91.80, 88.16, 86.64, 99.14, 75.14, 85.69] # TODO real values!
-       avgvalues  = [3.39, 2.83, 1.61, 0.00, 4.56, 1.23, 5.32] # TODO real values!
-    elsif target == 'storage_usage'
-       peakvalues = [11.12, 22.29, 99.12, 13.23, 54.32, 17.91, 50.1] # TODO real values!
-       avgvalues  = [19.23, 19.23, 19.23, 29.12, 68.96, 43.11, 0.1] # TODO real values!
-    elsif target == 'vm_pool_usage_history'
-       peakvalues = [42, 42, 42, 42, 42, 42, 42] # TODO real values!
-       avgvalues  = [0, 0, 0, 0, 0, 0, 0] # TODO real values!
-    elsif target == 'overall_load'
-       peakvalues = [19.68, 20.08, 19.84, 17.76, 0.0, 14.78, 9.71] # TODO real values!
-       avgvalues  = [0, 1, 2, 4, 8, 16, 32] # TODO real values!
-    end
+    requestList.reverse!
+
+    statsList = getStatsData?( requestList )
+    statsList.each { |stat|
+        devClass = stat.get_devClass?
+        counter  = stat.get_counter?
+        value    = stat.get_value?.to_i + 20
+        if devClass == target
+            if counter == "used"
+                @avg_history[:values].push value
+            else
+            #elsif counter == "peak"
+                @peak_history[:values].push value
+            end
+        end
+    }
 
    </pre>
  </blockquote>
</blockquote>
<tt>The interface is changing for retrieving data.  I've created a
StatsDataList object that will contain a lot of the "duplicate" info
thats in the StatsData objects.  This will allow the StatsData objects
to be smaller.   In addition, I will be passing back a list of lists. 
The API you currently have basically just passes back a big array of
data objects that need to get parsed.  With the list of StatsDataLists,
you are guaranteed that each StatsDataList only contains the data for a
unique counter (so this list only contains data for
node3/cpu-0/cpu-idle).<br>
</tt><br>
<br>
<blockquote cite="mid:20080528194612.GB20260@redhat.com" type="cite">
  <blockquote type="cite">
    <pre wrap="">     graph_object = {
        :timepoints => dates,
@@ -171,14 +186,14 @@ class HardwareController < ApplicationController
         [
             {
                 :name => target + "peak",
-                :values =>  peakvalues,
-                :stroke => @peak_color,
+                :values => @peak_history[:values],
+                :stroke => @peak_history[:color],
                 :strokeWidth => 1
             },
             {
                 :name => target + "average",
-                :values => avgvalues, 
-                :stroke => @average_color,
+                :values => @avg_history[:values], 
+                :stroke => @avg_history[:color],
                 :strokeWidth => 1
             }
        ]
    </pre>
  </blockquote>
</blockquote>
<br>
<tt>We typically use rrd to provide the "average" values, we can also
get min and max values.  I'll look into adding calls for those <br>
</tt>
<blockquote cite="mid:20080528194612.GB20260@redhat.com" type="cite">
  <blockquote type="cite">
    <pre wrap="">@@ -186,21 +201,25 @@ class HardwareController < ApplicationController
     render :json => graph_object
   end
 
-  def network_traffic_graph
+  def snapshot_graph
     target =  params[:target]
-    network_load = nil
-    if target == 'in'
-        network_load      = @network_traffic['in']
+    snapshot = nil
+    if target == 'overall_load'
+        snapshot = @snapshots[:overall_load]
+    elsif target == 'cpu'
+        snapshot = @snapshots[:cpu]
+    elsif target == 'in'
+        snapshot = @snapshots[:in]
     elsif target == 'out'
-        network_load = @network_traffic['out']
+        snapshot = @snapshots[:out]
     elsif target == 'io'
-        network_load = @network_traffic['io']
+        snapshot = @snapshots[:io]
     end
    </pre>
  </blockquote>
</blockquote>
<tt>I need to modify the collectd configs to include network and the
others .<br>
</tt><br>
<blockquote cite="mid:20080528194612.GB20260@redhat.com" type="cite">-<br>
  <pre wrap=""><!---->
This looks exactly like what we talked about -- understand you still
need feedback from Mark regarding the right way to pull this info out.


  </pre>
  <blockquote type="cite">
    <pre wrap="">-    network_load_remaining = 1024 - network_load
+    snapshot_remaining = 1024 - snapshot
 
     color = 'blue'
-    color = 'red' if (network_load.to_f / 1024.to_f) > 0.75  # 3/4 is the critical boundry for now
+    color = 'red' if (snapshot.to_f / 1024.to_f) > 0.75  # 3/4 is the critical boundry for now
 
     graph_object = {
        :timepoints => [],
@@ -208,14 +227,14 @@ class HardwareController < ApplicationController
         [
             {
                 :name => target,
-                :values => [network_load],
+                :values => [snapshot],
                 :fill => color,
                 :stroke => 'lightgray',
                 :strokeWidth => 1
             },
             {
                 :name => target + "remaining",
-                :values => [network_load_remaining],
+                :values => [snapshot_remaining],
                 :fill => 'white',
                 :stroke => 'lightgray',
                 :strokeWidth => 1
@@ -395,23 +414,56 @@ class HardwareController < ApplicationController
     @perm_obj = @pool
     @current_pool_id=@pool.id
 
-    # TODO pull real values in
-    @available_memory = 18
-    @used_memory = 62
-    
-    @available_storage = 183
-    @used_storage = 61
-
-    @available_vms = 1
-    @used_vms = 26
-
-    @peak_color = 'red'
-    @average_color = 'blue'
+    # availability graphs - used
+    @used = {:cpu => 0, :memory => 0, :vms => 0}
+    @pool.sub_vm_resource_pools.each { |svrp| @used[:cpu]    += svrp.allocated_resources[:current][:cpus] }
+    @pool.sub_vm_resource_pools.each { |svrp| @used[:memory] += svrp.allocated_resources[:current][:memory] }
+    @pool.sub_vm_resource_pools.each { |svrp| @used[:vms]    += svrp.allocated_resources[:current][:vms]  }
+
+    # availability graphs - total
+    @total          = {:cpu => 0, :memory => 0, :vms => 0}
+    @total[:cpu]    = @pool.total_resources[:cpus]
+    @total[:memory] = @pool.total_resources[:memory]
+    @total[:vms]    = @pool.total_resources[:vms]
+    @total.each_key { |k| @total[k] = 0 if @total[k] == nil }
+
+    # availability graphs - available
+    @available          = {}
+    @available[:cpu]    = (@total[:cpu] - @used[:cpu]).abs
+    @available[:memory] = (@total[:memory] - @used[:memory]).abs
+    @available[:vms]    = 5 # TODO ?
+
+    # history graphs
+    @peak_history = { :color => 'red',  :values => [] }
+    @avg_history  = { :color => 'blue', :values => [] }
+
+    # snapshot graphs
+    ret_time = Time.now.to_i - 3600
+    @snapshots = { :overall_load => 0, :cpu => 0, :in => 0, :out => 0, :io => 0 }
+    requestList = []
+    requestList << StatsRequest.new(@pool.id, "system", 0, "used", ret_time, 3600, 0)
+    requestList << StatsRequest.new(@pool.id, "cpu",    0, "used", ret_time, 3600, 0)
+    requestList << StatsRequest.new(@pool.id, "in",     0, "used", ret_time, 3600, 0)
+    requestList << StatsRequest.new(@pool.id, "out",    0, "used", ret_time, 3600, 0)
+    requestList << StatsRequest.new(@pool.id, "io",     0, "used", ret_time, 3600, 0)
    </pre>
  </blockquote>
</blockquote>
<tt>these calls don't look right I am assuming that @pool.id returns
the machine name. however "io", "in", "out" do not appear to be
devClasses. <br>
</tt><br>
-mark<br>
</body>
</html>