[Ovirt-devel] [PATCH] create error Status for Stats

root root at perf11.lab.bos.redhat.com
Fri Jun 6 16:53:58 UTC 2008


>From bbf64264f9b5b7af2a42199caf82fa5bd627ed77 Mon Sep 17 00:00:00 2001
From: root <root at perf11.lab.bos.redhat.com>
Date: Thu, 5 Jun 2008 23:37:34 -0400
Subject: [PATCH] Signed-off-by: root <root at perf11.lab.bos.redhat.com>

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