[Cluster-devel] conga/luci site/luci/Extensions/HelperFunction ...

kupcevic at sourceware.org kupcevic at sourceware.org
Thu Oct 5 23:21:40 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	kupcevic at sourceware.org	2006-10-05 23:21:40

Modified files:
	luci/site/luci/Extensions: HelperFunctions.py StorageReport.py 
	luci/storage   : cache_report form-macros 

Log message:
	luci storage: error reporting during probes

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/HelperFunctions.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/StorageReport.py.diff?cvsroot=cluster&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cache_report.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-macros.diff?cvsroot=cluster&r1=1.4&r2=1.5

--- conga/luci/site/luci/Extensions/HelperFunctions.py	2006/08/03 18:56:10	1.2
+++ conga/luci/site/luci/Extensions/HelperFunctions.py	2006/10/05 23:21:39	1.3
@@ -87,6 +87,6 @@
                 value)
     response.setCookie(cookie_prefix + var_name,
                        value, 
-                       expires='Tue, 30 Jun 2020 12:00:00 GMT')
+                       expires='Tue, 30 Jun 2060 12:00:00 GMT')
     
     return value
--- conga/luci/site/luci/Extensions/StorageReport.py	2006/10/05 16:11:37	1.8
+++ conga/luci/site/luci/Extensions/StorageReport.py	2006/10/05 23:21:39	1.9
@@ -218,8 +218,6 @@
                 return True
     return False
 
-
-
 def invalidate_storage_report(session, storagename):
     reports_dir = {}
     if session.has_key(SESSION_STORAGE_XML_REPORT):
@@ -229,6 +227,19 @@
     return
 
 
+def cache_storage_report(ricci_comm,
+                         session):
+    try:
+        rep = get_storage_report(ricci_comm, session)
+        if rep == None:
+            raise Exception, 'Unable to communicate to host'
+        else:
+            return True
+    except Exception, e:
+        return str(e)
+    except:
+        return 'Luci internal error. Please file bug report.'
+    return 'should never come here'
 
 def get_storage_report(ricci_comm,
                        session):
@@ -275,30 +286,57 @@
     # get report
     batch_r = ricci_comm.process_batch(batch)
     if batch_r.getAttribute('status') != '0':
-        raise 'error retrieving storage report'
+        #raise Exception, 'error retrieving storage report'
+        # dig deeper to find causing error
+        pass
     module_r = None
     for node in batch_r.childNodes:
         if node.nodeType == xml.dom.Node.ELEMENT_NODE:
             if node.nodeName == 'module':
                 module_r = node
     if module_r == None:
-        raise 'missing <module/> in <batch/>'
-    if module_r.getAttribute('status') != '0':
-        raise 'error retrieving storage report'
+        raise Exception, 'malformed response: missing <module/> in <batch/>'
+    module_r_status = module_r.getAttribute('status')
+    if module_r_status != '0':
+        #raise Exception, 'error retrieving storage report'
+        if module_r_status == '3':
+            raise Exception, 'Unable to find storage module: reinstall it'
     resp_r = None
     for node in module_r.childNodes:
         if node.nodeType == xml.dom.Node.ELEMENT_NODE:
             if node.nodeName == 'response':
                 resp_r = node
     if resp_r == None:
-        raise 'missing <response/> in <module/>'
+        raise Exception, 'malformed response: missing <response/> in <module/>'
     fr_r = None
     for node in resp_r.childNodes:
         if node.nodeType == xml.dom.Node.ELEMENT_NODE:
             if node.nodeName == 'function_response':
                 fr_r = node
     if fr_r == None:
-        raise 'missing <function_response/> in <response/>'
+        raise Exception, 'malformed response: missing <function_response/> in <response/>'
+    succ_v     = None
+    err_code_v = None
+    err_desc_v = None
+    for node in fr_r.childNodes:
+        try:
+            var = parse_variable(node)
+            if var.get_name() == 'success':
+                succ_v = var
+            elif var.get_name() == 'error_code':
+                err_code_v = var
+            elif var.get_name() == 'error_description':
+                err_desc_v = var
+        except:
+            pass
+    if succ_v == None:
+        raise Exception, 'malformed response: missing "success" variable in <function_response/>'
+    if succ_v.get_value() != True:
+        # error
+        if err_code_v.get_value() == -1:
+            raise Exception, 'Generic error:\n\n' + err_desc_v.get_value()
+        else:
+            raise Exception, err_desc_v.get_value()
     
     #xml_report = fr_r.toxml()
     xml_report = fr_r
@@ -307,7 +345,7 @@
     reports_dir = session[SESSION_STORAGE_XML_REPORT]
     reports_dir[storagename] = xml_report
     session.set(SESSION_STORAGE_XML_REPORT, reports_dir)
-        
+    
     return StorageReport(xml_report)
 
 
--- conga/luci/storage/cache_report	2006/06/30 17:00:02	1.1
+++ conga/luci/storage/cache_report	2006/10/05 23:21:40	1.2
@@ -1,17 +1,15 @@
-<span tal:omit-tag="" 
-      tal:define="global storagename request/storagename|nothing"/>
-<span tal:omit-tag="" 
-      tal:define="stosystemss context/systems/storage/objectItems;
+<span tal:define="global storagename request/storagename|nothing"
+      tal:replace="string:"/>
+<span tal:define="stosystemss context/systems/storage/objectItems;
                   global allowed_systems python:here.allowed_systems(user, stosystemss);
-                  global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"/>
-<span tal:omit-tag="" 
-      tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
-                  global storage_report python:here.get_storage_report(ricci, request.SESSION)"/>
-<span tal:omit-tag=""
-      tal:condition="storage_report">
-OK
-</span>
-<span tal:omit-tag=""
-      tal:condition="not: storage_report">
-error
-</span>
+                  global access_to_host_allowed python:here.access_to_host_allowed(storagename, allowed_systems)"
+      tal:replace="string:"/>
+<span tal:define="global ricci python:here.get_ricci_communicator(storagename, allowed_systems);
+                  global cache_result python:here.cache_storage_report(ricci, request.SESSION)"
+      tal:replace="string:"/>
+<span tal:condition="python: cache_result == True" 
+      tal:replace="string:OK"/>
+<span tal:condition="python: cache_result != True and access_to_host_allowed"
+      tal:replace="structure cache_result"/>
+<span tal:condition="python: not access_to_host_allowed"
+      tal:replace="string: Insufficient Rights"/>
--- conga/luci/storage/form-macros	2006/08/03 18:56:09	1.4
+++ conga/luci/storage/form-macros	2006/10/05 23:21:40	1.5
@@ -141,11 +141,11 @@
         if (res.substr(0, 2) == "OK") {
            window.location.reload();
         } else {
-           alert('An error has occured while probing storage');
+           alert('An error has occured while probing storage:\n\n' + res);
            window.location = list_URL;
         }
     } else {
-        alert("Error retrieving data from server");
+        alert("Error retrieving data from Luci server");
         window.location = list_URL;
     }
   }




More information about the Cluster-devel mailing list