[ovirt-devel][PATCH] Add Status and error handling to Stats stuff

mark wagner mwagner at redhat.com
Fri Jun 6 04:01:52 UTC 2008


Added code to check validity of pathname to rrdfile.
Added new enum for StatsStatus
Added new member to StatsDataList to hold status information
---
  wui/src/app/util/stats/Stats.rb         |   36 ++++++++++++++++++++++--------
  wui/src/app/util/stats/StatsDataList.rb |    7 +++++-
  wui/src/app/util/stats/StatsTypes.rb    |   21 ++++++++++++++++++
  wui/src/app/util/stats/statsTest.rb     |   17 ++++++++++----
  4 files changed, 65 insertions(+), 16 deletions(-)

diff --git a/wui/src/app/util/stats/Stats.rb b/wui/src/app/util/stats/Stats.rb
index 73a6920..e7bd8fd 100644
--- a/wui/src/app/util/stats/Stats.rb
+++ b/wui/src/app/util/stats/Stats.rb
@@ -74,17 +74,33 @@ def fetchData?(node, devClass, instance, counter, startTime, duration, interval)

      rrd = rrdNode + rrdTail + ".rrd"

-   returnList = StatsDataList.new(node,devClass,instance, counter)
-   (fstart, fend, names, data, interval) = RRD.fetch(rrd, "--start", start.to_s, "--end", 
endTime.to_s, "AVERAGE", "-r", interval.to_s)
-   i = 0
-   # For some reason, we get an extra datapoint at the end.  Just chop it off now...
-   data.delete_at(-1)
-
-   # Now, lets walk the returned data and create the ojects, and put them in a list.
-   data.each do |vdata|
-      i += 1
-      returnList.append_data( StatsData.new(fstart + interval * i, vdata[lIndex] ))
+    if ( File.exists?(rrd ) )
+       localStatus = StatsStatus::SUCCESS
+    elsif ( File.exists?(rrdNode ))
+       # Check the Node first
+       localStatus = StatsStatus::E_NOSUCHNODE
+    else
+       # Currently can't distinguish between device and counter, so return generic error
+       localStatus = StatsStatus::E_UNKNOWN
+   end
+
+   returnList = StatsDataList.new(node,devClass,instance, counter, localStatus)
+
+   # So if the path is bad, no need to continue, it will just thrown an error, just return
+
+   if ( localStatus == StatsStatus::SUCCESS )
+      (fstart, fend, names, data, interval) = RRD.fetch(rrd, "--start", start.to_s, "--end", 
endTime.to_s, "AVERAGE", "-r", interval.to_s)
+      i = 0
+      # For some reason, we get an extra datapoint at the end.  Just chop it off now...
+      data.delete_at(-1)
+
+      # Now, lets walk the returned data and create the ojects, and put them in a list.
+      data.each do |vdata|
+         i += 1
+         returnList.append_data( StatsData.new(fstart + interval * i, vdata[lIndex] ))
+      end
     end
+
   return returnList
  end

diff --git a/wui/src/app/util/stats/StatsDataList.rb b/wui/src/app/util/stats/StatsDataList.rb
index 2e223ed..3ca2db2 100644
--- a/wui/src/app/util/stats/StatsDataList.rb
+++ b/wui/src/app/util/stats/StatsDataList.rb
@@ -20,13 +20,14 @@

  #define class StatsData  List
  class StatsDataList
-  def initialize(node,devClass,instance, counter)
+  def initialize(node,devClass,instance, counter, status)
      # Instance variables
      @node = node
      @devClass = devClass
      @instance = instance
      @counter = counter
      @data=[]
+    @status = status
    end

    def get_node?()
@@ -49,6 +50,10 @@ class StatsDataList
      return @data
    end

+  def get_status?()
+    return @status
+  end
+
    def append_data(incoming)
      @data << incoming
    end
diff --git a/wui/src/app/util/stats/StatsTypes.rb b/wui/src/app/util/stats/StatsTypes.rb
index 6049a2e..7a1717c 100644
--- a/wui/src/app/util/stats/StatsTypes.rb
+++ b/wui/src/app/util/stats/StatsTypes.rb
@@ -330,4 +330,25 @@ class RRDResolution
  end


+class StatsStatus
+   def StatsStatus.add_item(key,value)
+      @hash ||= {}
+      @hash[key]=value
+   end
+
+   def StatsStatus.const_missing(key)
+      @hash[key]
+   end

+   def StatsStatus.each
+      @hash.each {|key,value| yield(key,value)}
+   end
+
+   # Set up the resolutions for our rrd
+   StatsStatus.add_item :SUCCESS, 0
+   StatsStatus.add_item :E_NOSUCHNODE, 1
+   StatsStatus.add_item :E_NOSUCHDEVICE, 2
+   StatsStatus.add_item :E_NOSUCHCOUNTER, 3
+   StatsStatus.add_item :E_UNKNOWN, 99
+
+end
diff --git a/wui/src/app/util/stats/statsTest.rb b/wui/src/app/util/stats/statsTest.rb
index f7ce612..4978b43 100644
--- a/wui/src/app/util/stats/statsTest.rb
+++ b/wui/src/app/util/stats/statsTest.rb
@@ -31,10 +31,11 @@ require 'util/stats/Stats'
  #   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::Load, 0, 
LoadCounter::Load_1min, 0, 3600, 10 )
  #   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::Load, 0, 
LoadCounter::Load_1min, 0, 0, RRDResolution::Long )
  #   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::Load, 0, 
LoadCounter::Load_15min, 0, 0, RRDResolution::Long )
-#   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::NIC, 0, 
NicCounter::Octets_rx, 0, 0, RRDResolution::Long )
-#   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::NIC, 0, 
NicCounter::Octets_tx, 0, 0, RRDResolution::Long )
-   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::Disk, 0, 
DiskCounter::Octets_read, 0, 0, RRDResolution::Long )
-   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::Disk, 0, 
DiskCounter::Octets_write, 0, 0, RRDResolution::Long )
+   requestList << StatsRequest.new("node7.priv.ovirt.org", DevClass::NIC, 0, NicCounter::Octets_rx, 
0, 0, RRDResolution::Long )
+   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::NIC, 1, NicCounter::Octets_rx, 
0, 0, RRDResolution::Long )
+   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::NIC, 0, NicCounter::Octets_tx, 
0, 0, RRDResolution::Long )
+#   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::Disk, 0, 
DiskCounter::Octets_read, 0, 0, RRDResolution::Long )
+#   requestList << StatsRequest.new("node3.priv.ovirt.org", DevClass::Disk, 0, 
DiskCounter::Octets_write, 0, 0, RRDResolution::Long )
  #   requestList << StatsRequest.new("node3.priv.ovirt.org", "cpu", 0, "idle", 1211688000, 3600, 10 )
  #   requestList << StatsRequest.new("node4.priv.ovirt.org", DevClass::CPU, 0, CpuCounter::Idle, 0, 
3600, RRDResolution::Short )
  #   requestList << StatsRequest.new("node5.priv.ovirt.org", "cpu", 0, "idle", 1211688000, 3600, 500 )
@@ -55,8 +56,14 @@ require 'util/stats/Stats'
     myDevClass = statsList.get_devClass?()
     myInstance = statsList.get_instance?()
     myCounter = statsList.get_counter?()
+   myStatus = statsList.get_status?()

-
+   case myStatus
+      when StatsStatus::E_NOSUCHNODE
+          puts "Can't find data for node " + myNodeName
+      when StatsStatus::E_UNKNOWN
+          puts "Can't find data for requested file path"
+   end
        if tmp != myNodeName then
           puts
        end
-- 
1.5.4.5




More information about the ovirt-devel mailing list