Adding environment setting features for applications under OMF
[nepi.git] / src / nepi / testbeds / omf / omf_client.py
index e244d1b..48568c8 100644 (file)
@@ -2,7 +2,6 @@ import logging
 import sleekxmpp
 from sleekxmpp.exceptions import IqError, IqTimeout
 import traceback
-from xml.etree import cElementTree as ET
 
 class OMFClient(sleekxmpp.ClientXMPP):
     def __init__(self, jid, password):
@@ -18,6 +17,9 @@ class OMFClient(sleekxmpp.ClientXMPP):
 
         self.add_event_handler("session_start", self.start)
         self.add_event_handler("register", self.register)
+        self.add_event_handler("pubsub_publish", self.handle_omf_message)
+        
+        self._logger = logging.getLogger("nepi.testbeds.omf")
     
     @property
     def ready(self):
@@ -30,7 +32,7 @@ class OMFClient(sleekxmpp.ClientXMPP):
 
     def register(self, iq):
         if self._registered:
-            logging.info("%s already registered!" % self.boundjid)
+            self._logger.info("%s already registered!" % self.boundjid)
             return 
 
         resp = self.Iq()
@@ -40,46 +42,45 @@ class OMFClient(sleekxmpp.ClientXMPP):
 
         try:
             resp.send(now=True)
-            logging.info("Account created for %s!" % self.boundjid)
+            self._logger.info("Account created for %s!" % self.boundjid)
             self._registered = True
         except IqError as e:
-            logging.error("Could not register account: %s" %
+            self._logger.error("Could not register account: %s" %
                     e.iq['error']['text'])
         except IqTimeout:
-            logging.error("No response from server.")
+            self._logger.error("No response from server.")
 
     def unregister(self):
         try:
             self.plugin['xep_0077'].cancel_registration(
                 ifrom=self.boundjid.full)
-            logging.info("Account unregistered for %s!" % self.boundjid)
+            self._logger.info("Account unregistered for %s!" % self.boundjid)
         except IqError as e:
-            logging.error("Could not unregister account: %s" %
+            self._logger.error("Could not unregister account: %s" %
                     e.iq['error']['text'])
         except IqTimeout:
-            logging.error("No response from server.")
+            self._logger.error("No response from server.")
 
     def nodes(self):
         try:
             result = self['xep_0060'].get_nodes(self._server)
             for item in result['disco_items']['items']:
-                print(' - %s' % str(item))
+                self._logger.info(' - %s' % str(item))
             return result
         except:
-            print traceback.format_exc()
-            logging.error('Could not retrieve node list.')
+            error = traceback.format_exc()
+            self._logger.error('Could not retrieve node list.\ntraceback:\n%s', error)
 
-    def suscriptions(self):
+    def subscriptions(self):
         try:
             result = self['xep_0060'].get_subscriptions(self._server)
                 #self.boundjid.full)
             for node in result['node']:
-                print(' - %s' % str(node))
+                self._logger.info(' - %s' % str(node))
             return result
         except:
-            print traceback.format_exc()
-            logging.error('Could not retrieve suscriptions.')
-
+            error = traceback.format_exc()
+            self._logger.error('Could not retrieve subscriptions.\ntraceback:\n%s', error)
 
     def create(self, node):
         config = self['xep_0004'].makeForm('submit')
@@ -93,67 +94,81 @@ class OMFClient(sleekxmpp.ClientXMPP):
         try:
             self['xep_0060'].create_node(self._server, node, config = config)
         except:
-            print traceback.format_exc()
-            logging.error('Could not create node: %s' % node)
+            error = traceback.format_exc()
+            self._logger.error('Could not create node: %s\ntraceback:\n%s' % (node, error))
 
     def delete(self, node):
         try:
             self['xep_0060'].delete_node(self._server, node)
-            print('Deleted node: %s' % node)
+            self._logger.info('Deleted node: %s' % node)
         except:
-            print traceback.format_exc()
-            logging.error('Could not delete node: %s' % node)
-
+            error = traceback.format_exc()
+            self._logger.error('Could not delete node: %s\ntraceback:\n%s' % (node, error))
     
     def publish(self, data, node):
         try:
             result = self['xep_0060'].publish(self._server,node,payload=data)
-            id = result['pubsub']['publish']['item']['id']
-            #print('Published at item id: %s' % id)
+            id = result['pubsub']['publish']['item']['id']
+            # print('Published at item id: %s' % id)
         except:
-            print traceback.format_exc()
-            logging.error('Could not publish to: %s' % self.boundjid)
+            error = traceback.format_exc()
+            self._logger.error('Could not publish to: %s\ntraceback:\n%s' \
+                    % (self.boundjid, error))
 
     def get(self, data):
         try:
             result = self['xep_0060'].get_item(self._server, self.boundjid,
                 data)
             for item in result['pubsub']['items']['substanzas']:
-                print('Retrieved item %s: %s' % (item['id'], tostring(item['payload'])))
+                self._logger.info('Retrieved item %s: %s' % (item['id'], 
+                    tostring(item['payload'])))
         except:
-            print traceback.format_exc()
-            logging.error('Could not retrieve item %s from node %s' % (data, self.boundjid))
+            error = traceback.format_exc()
+            self._logger.error('Could not retrieve item %s from node %s\ntraceback:\n%s' \
+                    % (data, self.boundjid, error))
 
     def retract(self, data):
         try:
             result = self['xep_0060'].retract(self._server, self.boundjid, data)
-            print('Retracted item %s from node %s' % (data, self.boundjid))
+            self._logger.info('Retracted item %s from node %s' % (data, self.boundjid))
         except:
-            print traceback.format_exc()
-            logging.error('Could not retract item %s from node %s' % (data, self.boundjid))
+            error = traceback.format_exc()
+            self._logger.error('Could not retract item %s from node %s\ntraceback:\n%s' \
+                    % (data, self.boundjid, error))
 
     def purge(self):
         try:
             result = self['xep_0060'].purge(self._server, self.boundjid)
-            print('Purged all items from node %s' % self.boundjid)
+            self._logger.info('Purged all items from node %s' % self.boundjid)
         except:
-            print traceback.format_exc()
-            logging.error('Could not purge items from node %s' % self.boundjid)
+            error = traceback.format_exc()
+            self._logger.error('Could not purge items from node %s\ntraceback:\n%s' \
+                    % (self.boundjid, error))
 
     def subscribe(self, node):
         try:
             result = self['xep_0060'].subscribe(self._server, node)
-            print('Subscribed %s to node %s' % (self.boundjid.bare, self.boundjid))
+            self._logger.info('Subscribed %s to node %s' \
+                    % (self.boundjid.bare, self.boundjid))
         except:
-            print traceback.format_exc()
-            logging.error('Could not subscribe %s to node %s' % (self.boundjid.bare, node))
+            error = traceback.format_exc()
+            self._logger.error('Could not subscribe %s to node %s\ntraceback:\n%s' \
+                    % (self.boundjid.bare, node, error))
 
     def unsubscribe(self, node):
         try:
             result = self['xep_0060'].unsubscribe(self._server, node)
-            print('Unsubscribed %s from node %s' % (self.boundjid.bare, node))
+            self._logger.info('Unsubscribed %s from node %s' % (self.boundjid.bare, node))
         except:
-            print traceback.format_exc()
-            logging.error('Could not unsubscribe %s from node %s' % (self.boundjid.bare, node))
+            error = traceback.format_exc()
+            self._logger.error('Could not unsubscribe %s from node %s\ntraceback:\n%s' \
+                    % (self.boundjid.bare, node, error))
+
+    def handle_omf_message(self, iq):
+        for i in iq['pubsub_event']['items']:
+            self._logger.debug(i)
+
+            #<item xmlns="http://jabber.org/protocol/pubsub#event" id="dFbv6WRlMuKghJ0"><omf-message xmlns="http://jabber.org/protocol/pubsub"><LOGGING id="&apos;omf-payload&apos;"><LEVEL>2</LEVEL><SLICEID>default_slice</SLICEID><LOGGER>nodeHandler::NodeHandler</LOGGER><EXPID>default_slice-2012-09-28t16.22.17+02.00</EXPID><LEVEL_NAME>INFO</LEVEL_NAME><DATA>OMF Experiment Controller 5.4 (git 529a626)</DATA></LOGGING></omf-message></item>
+