[Erp5-report] r34776 luke - /erp5/trunk/utils/erp5.timmy/src/erp5/timmy/timmy.py

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Apr 26 14:25:52 CEST 2010


Author: luke
Date: Mon Apr 26 14:25:51 2010
New Revision: 34776

URL: http://svn.erp5.org?rev=34776&view=rev
Log:
 - do not pollute server side in case of unknown plugin
 - use try..except to catch errors (with re-raising) while running external tools
 - log more information to master server and into logs

Modified:
    erp5/trunk/utils/erp5.timmy/src/erp5/timmy/timmy.py

Modified: erp5/trunk/utils/erp5.timmy/src/erp5/timmy/timmy.py
URL: http://svn.erp5.org/erp5/trunk/utils/erp5.timmy/src/erp5/timmy/timmy.py?rev=34776&r1=34775&r2=34776&view=diff
==============================================================================
--- erp5/trunk/utils/erp5.timmy/src/erp5/timmy/timmy.py [utf8] (original)
+++ erp5/trunk/utils/erp5.timmy/src/erp5/timmy/timmy.py [utf8] Mon Apr 26 14:25:51 2010
@@ -210,8 +210,7 @@
   # generic
   def notImplemented(self):
     """Simple not implemented wrapper"""
-    return 'reportUnknown', 'Report message is not implemented for plugin on'\
-        ' client side.'
+    return None
 
   def __init__(self, partition_dict):
     self.item_id = partition_dict['ID']
@@ -567,23 +566,65 @@
       supervisor_id = supervisor_list[0]['PARTITION_ID']
 
     # prepare - run supervisor
-    logging.info('Supervisord started with: stdout = %r stderr = %r' %
-        (subprocess.Popen([SUPERVISORD], stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE).communicate()))
+    try:
+      supervisord_popen = subprocess.Popen([SUPERVISORD], stdout=subprocess.PIPE,
+          stderr=subprocess.PIPE)
+      (result_std, result_err) = supervisord_popen.communicate()
+    except:
+      server.call('updatePartitionState', supervisor_id, 'reportError', 'Unsupported issue while trying to start supervisord: %s:%s' % (str(sys.exc_info()[0]), str(sys.exc_info()[1])))
+      raise
+
+    if supervisord_popen.returncode == 0:
+      log_message = 'Supervisord started with: stdout = %r stderr = %r' % (
+          result_std, result_err)
+      server.call('updatePartitionState', supervisor_id, 'reportStarted', log_message)
+      logging.info(log_message)
+    else:
+      if "Another program is already listening" in result_err:
+        # XXX-Luke: It might be better to try to connect
+        log_message = 'Supervisord already running: stdout = %r stderr = %r' % (
+            result_std, result_err)
+        server.call('updatePartitionState', supervisor_id, 'reportStarted', log_message)
+        logging.info(log_message)
+      else:
+        log_message = 'Supervisord unknown problem: stdout = %r stderr = %r' % (
+            result_std, result_err)
+        server.call('updatePartitionState', supervisor_id, 'reportError', log_message)
+        logging.info(log_message)
+
     # 1a pass - instance profiles
-    updateInstanceProfiles(options.template_directory,
+    try:
+      updateInstanceProfiles(options.template_directory,
         options.instances_directory, partition_dict_list)
+    except:
+      server.call('updatePartitionState', computer_id, 'reportError', 'Unexpected issue while updating instance profiles: %s:%s' % (str(sys.exc_info()[0]), str(sys.exc_info()[1])))
+      raise
     # 1b pass - main profile
-    updateBaseProfile(options.template_directory, options.main_output,
+    try:
+      updateBaseProfile(options.template_directory, options.main_output,
         options.base_profile, options.instances_directory, partition_dict_list)
+    except:
+      server.call('updatePartitionState', computer_id, 'reportError', 'Unexpected issue while updating base profile: %s:%s' % (str(sys.exc_info()[0]), str(sys.exc_info()[1])))
+      raise
     # 2 pass - run buildout
-    runBuildout(options.buildout_binary, options.main_output,
+    try:
+      runBuildout(options.buildout_binary, options.main_output,
         options.buildout_offline)
+    except:
+      server.call('updatePartitionState', computer_id, 'reportError', 'Unexpected issue while running buildout: %s:%s' % (str(sys.exc_info()[0]), str(sys.exc_info()[1])))
+      raise
 
     # force supervisor to reload its configuration
-    logging.info('Supervisorctl updated with: stdout = %r stderr = %r' %
-        (subprocess.Popen([SUPERVISORCTL, 'update'], stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE).communicate()))
+    supervisorctl_popen = subprocess.Popen([SUPERVISORCTL, 'update'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    (result_std, result_err) = supervisorctl_popen.communicate()
+    if supervisorctl_popen.returncode == 0:
+      log_message = 'Supervisorctl updated with: stdout = %r stderr = %r' % (result_std, result_err)
+      server.call('updatePartitionState', supervisor_id, 'reportStarted', log_message)
+      logging.info(log_message)
+    else:
+      log_message = 'Supervisorctl issue during update: stdout = %r stderr = %r' % (result_std, result_err)
+      server.call('updatePartitionState', supervisor_id, 'reportError', log_message)
+      logging.error(log_message)
 
     # 3 pass - manage instances
     # XXX-Luke: To be moved to proper recipe




More information about the Erp5-report mailing list