From: Julien Tribino Date: Tue, 28 May 2013 13:22:04 +0000 (+0200) Subject: change bug of dict X-Git-Tag: nepi-3.0.0~118 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=dc8f5de864464f4a2ccbaa73ac881f50d2c64899;p=nepi.git change bug of dict --- diff --git a/examples/omf/automated_vlc_experiment_plexus.py b/examples/omf/automated_vlc_experiment_plexus.py index 06a3f39a..1b65e37e 100644 --- a/examples/omf/automated_vlc_experiment_plexus.py +++ b/examples/omf/automated_vlc_experiment_plexus.py @@ -47,6 +47,10 @@ ec.set(node1, 'xmppSlice', "nepi") ec.set(node1, 'xmppHost', "xmpp-plexus.onelab.eu") ec.set(node1, 'xmppPort', "5222") ec.set(node1, 'xmppPassword', "1234") +ec.set(node1, 'xmppSlice', "nepi") +ec.set(node1, 'xmppHost', "xmpp-plexus.onelab.eu") +ec.set(node1, 'xmppPort', "5222") +ec.set(node1, 'xmppPassword', "1234") node2 = ec.register_resource("OMFNode") ec.set(node2, 'hostname', "omf.plexus.wlab37") @@ -54,6 +58,10 @@ ec.set(node2, 'xmppSlice', "nepi") ec.set(node2, 'xmppHost', "xmpp-plexus.onelab.eu") ec.set(node2, 'xmppPort', "5222") ec.set(node2, 'xmppPassword', "1234") +ec.set(node2, 'xmppSlice', "nepi") +ec.set(node2, 'xmppHost', "xmpp-plexus.onelab.eu") +ec.set(node2, 'xmppPort', "5222") +ec.set(node2, 'xmppPassword', "1234") # Create and Configure the Interfaces iface1 = ec.register_resource("OMFWifiInterface") diff --git a/src/nepi/execution/resource.py b/src/nepi/execution/resource.py index 9637feaa..a76bbc66 100644 --- a/src/nepi/execution/resource.py +++ b/src/nepi/execution/resource.py @@ -18,12 +18,12 @@ """ from nepi.util.timefuncs import strfnow, strfdiff, strfvalid +from nepi.util.logger import Logger from nepi.execution.trace import TraceAttr import copy import functools import inspect -import logging import os import pkgutil import weakref @@ -47,15 +47,15 @@ class ResourceState: RELEASED = 8 ResourceState2str = dict({ - NEW = "NEW", - DISCOVERED = "DISCOVERED", - PROVISIONED = "PROVISIONED", - READY = "READY", - STARTED = "STARTED", - STOPPED = "STOPPED", - FINISHED = "FINISHED", - FAILED = "FAILED", - RELEASED = "RELEASED", + ResourceState.NEW : "NEW", + ResourceState.DISCOVERED : "DISCOVERED", + ResourceState.PROVISIONED : "PROVISIONED", + ResourceState.READY : "READY", + ResourceState.STARTED : "STARTED", + ResourceState.STOPPED : "STOPPED", + ResourceState.FINISHED : "FINISHED", + ResourceState.FAILED : "FAILED", + ResourceState.RELEASED : "RELEASED", }) def clsinit(cls): @@ -75,7 +75,7 @@ def clsinit_copy(cls): # Decorator to invoke class initialization method @clsinit -class ResourceManager(object): +class ResourceManager(Logger): _rtype = "Resource" _attributes = None _traces = None @@ -178,6 +178,8 @@ class ResourceManager(object): return copy.deepcopy(cls._traces.values()) def __init__(self, ec, guid): + super(ResourceManager, self).__init__(self.rtype()) + self._guid = guid self._ec = weakref.ref(ec) self._connections = set() @@ -198,39 +200,6 @@ class ResourceManager(object): self._ready_time = None self._release_time = None - # Logging - self._logger = logging.getLogger("Resource") - - def debug(self, msg, out = None, err = None): - self.log(msg, logging.DEBUG, out, err) - - def error(self, msg, out = None, err = None): - self.log(msg, logging.ERROR, out, err) - - def warn(self, msg, out = None, err = None): - self.log(msg, logging.WARNING, out, err) - - def info(self, msg, out = None, err = None): - self.log(msg, logging.INFO, out, err) - - def log(self, msg, level, out = None, err = None): - if out: - msg += " - OUT: %s " % out - - if err: - msg += " - ERROR: %s " % err - - msg = self.log_message(msg) - - self.logger.log(level, msg) - - def log_message(self, msg): - return " %s guid: %d - %s " % (self._rtype, self.guid, msg) - - @property - def logger(self): - return self._logger - @property def guid(self): return self._guid @@ -281,6 +250,9 @@ class ResourceManager(object): def state(self): return self._state + def log_message(self, msg): + return " %s guid: %d - %s " % (self._rtype, self.guid, msg) + def connect(self, guid): if self.valid_connection(guid): self._connections.add(guid) diff --git a/src/nepi/resources/linux/application.py b/src/nepi/resources/linux/application.py index f9edfc29..b269e80e 100644 --- a/src/nepi/resources/linux/application.py +++ b/src/nepi/resources/linux/application.py @@ -24,7 +24,6 @@ from nepi.resources.linux.node import LinuxNode from nepi.util import sshfuncs from nepi.util.timefuncs import strfnow, strfdiff -import logging import os reschedule_delay = "0.5s" @@ -119,8 +118,6 @@ class LinuxApplication(ResourceManager): # timestamp of last state check of the application self._last_state_check = strfnow() - - self._logger = logging.getLogger("LinuxApplication") def log_message(self, msg): return " guid %d - host %s - %s " % (self.guid, diff --git a/src/nepi/resources/linux/channel.py b/src/nepi/resources/linux/channel.py index a7a43652..e4207cea 100644 --- a/src/nepi/resources/linux/channel.py +++ b/src/nepi/resources/linux/channel.py @@ -19,16 +19,6 @@ from nepi.execution.attribute import Attribute, Flags from nepi.execution.resource import ResourceManager, clsinit, ResourceState -from nepi.resources.linux.node import LinuxNode - -import collections -import logging -import os -import random -import re -import tempfile -import time -import threading @clsinit class LinuxChannel(ResourceManager): @@ -36,7 +26,6 @@ class LinuxChannel(ResourceManager): def __init__(self, ec, guid): super(LinuxChannel, self).__init__(ec, guid) - self._logger = logging.getLogger("LinuxChannel") def log_message(self, msg): return " guid %d - %s " % (self.guid, msg) diff --git a/src/nepi/resources/linux/interface.py b/src/nepi/resources/linux/interface.py index 14628991..85a031aa 100644 --- a/src/nepi/resources/linux/interface.py +++ b/src/nepi/resources/linux/interface.py @@ -23,7 +23,6 @@ from nepi.resources.linux.node import LinuxNode from nepi.resources.linux.channel import LinuxChannel import collections -import logging import os import random import re @@ -82,8 +81,6 @@ class LinuxInterface(ResourceManager): def __init__(self, ec, guid): super(LinuxInterface, self).__init__(ec, guid) self._configured = False - - self._logger = logging.getLogger("LinuxInterface") self.add_set_hooks() diff --git a/src/nepi/resources/linux/node.py b/src/nepi/resources/linux/node.py index 78de7fd5..27f5fc4b 100644 --- a/src/nepi/resources/linux/node.py +++ b/src/nepi/resources/linux/node.py @@ -23,7 +23,6 @@ from nepi.resources.linux import rpmfuncs, debfuncs from nepi.util import sshfuncs, execfuncs import collections -import logging import os import random import re @@ -91,8 +90,6 @@ class LinuxNode(ResourceManager): # lock to avoid concurrency issues on methods used by applications self._lock = threading.Lock() - - self._logger = logging.getLogger("LinuxNode") def log_message(self, msg): return " guid %d - host %s - %s " % (self.guid, diff --git a/src/nepi/resources/omf/application.py b/src/nepi/resources/omf/application.py index ad52c89c..f65b3547 100644 --- a/src/nepi/resources/omf/application.py +++ b/src/nepi/resources/omf/application.py @@ -21,9 +21,6 @@ from nepi.execution.resource import ResourceManager, clsinit from nepi.execution.attribute import Attribute, Flags from nepi.resources.omf.omf_api import OMFAPIFactory -import nepi -import logging - @clsinit class OMFApplication(ResourceManager): """ @@ -90,10 +87,6 @@ class OMFApplication(ResourceManager): self._omf_api = None - self._logger = logging.getLogger("nepi.omf.omfApp ") - self._logger.setLevel(nepi.LOGLEVEL) - - def _validate_connection(self, guid): """Check if the connection is available. @@ -104,13 +97,16 @@ class OMFApplication(ResourceManager): """ rm = self.ec.get_resource(guid) if rm.rtype() not in self._authorized_connections: - self._logger.debug("Connection between %s %s and %s %s refused : An Application can be connected only to a Node" % (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s refused : An Application can be connected only to a Node" % (self.rtype(), self._guid, rm.rtype(), guid) + self._logger.debug(msg) return False elif len(self.connections) != 0 : - self._logger.debug("Connection between %s %s and %s %s refused : Already Connected" % (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s refused : Already Connected" % (self.rtype(), self._guid, rm.rtype(), guid) + self._logger.debug(msg) return False else : - self._logger.debug("Connection between %s %s and %s %s accepted" % (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s accepted" % (self.rtype(), self._guid, rm.rtype(), guid) + self._logger.debug(msg) return True def _get_nodes(self, conn_set): @@ -127,20 +123,21 @@ class OMFApplication(ResourceManager): return rm return None - def deploy_action(self): + def deploy(self): """Deploy the RM """ self._omf_api = OMFAPIFactory.get_api(self.get('xmppSlice'), self.get('xmppHost'), self.get('xmppPort'), self.get('xmppPassword')) - super(OMFApplication, self).deploy_action() + super(OMFApplication, self).deploy() def start(self): """Send Xmpp Message Using OMF protocol to execute the application """ super(OMFApplication, self).start() - self._logger.debug(" " + self.rtype() + " ( Guid : " + str(self._guid) +") : " + self.get('appid') + " : " + self.get('path') + " : " + self.get('args') + " : " + self.get('env')) + msg = " " + self.rtype() + " ( Guid : " + str(self._guid) +") : " + self.get('appid') + " : " + self.get('path') + " : " + self.get('args') + " : " + self.get('env') + self.debug(msg) if self.get('appid') and self.get('path') and self.get('args') and self.get('env'): rm_node = self._get_nodes(self._connections) diff --git a/src/nepi/resources/omf/channel.py b/src/nepi/resources/omf/channel.py index 3d19ed14..d81cf6c7 100644 --- a/src/nepi/resources/omf/channel.py +++ b/src/nepi/resources/omf/channel.py @@ -91,10 +91,11 @@ class OMFChannel(ResourceManager): """ rm = self.ec.get_resource(guid) if rm.rtype() in self._authorized_connections: - self._logger.debug("Connection between %s %s and %s %s accepted" % - (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s accepted" % (self.rtype(), self._guid, rm.rtype(), guid) + self.debug(msg) return True - self._logger.debug("Connection between %s %s and %s %s refused" % (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s refused" % (self.rtype(), self._guid, rm.rtype(), guid) + self.debug(msg) return False def _get_target(self, conn_set): @@ -117,7 +118,7 @@ class OMFChannel(ResourceManager): self._nodes_guid.append(couple) return self._nodes_guid - def deploy_action(self): + def deploy(self): """Deploy the RM """ @@ -134,7 +135,7 @@ class OMFChannel(ResourceManager): #print "Send the configure message" self._omf_api.configure(couple[0], attrname, attrval) - super(OMFChannel, self).deploy_action() + super(OMFChannel, self).deploy() def discover(self): """ Discover the availables channels diff --git a/src/nepi/resources/omf/interface.py b/src/nepi/resources/omf/interface.py index 5e6fb6de..1bb539c2 100644 --- a/src/nepi/resources/omf/interface.py +++ b/src/nepi/resources/omf/interface.py @@ -22,8 +22,6 @@ from nepi.execution.attribute import Attribute, Flags from nepi.resources.omf.omf_api import OMFAPIFactory -import nepi -import logging @clsinit class OMFWifiInterface(ResourceManager): @@ -87,9 +85,6 @@ class OMFWifiInterface(ResourceManager): self._omf_api = None self._alias = self.get('alias') - self._logger = logging.getLogger("nepi.omf.omfIface ") - self._logger.setLevel(nepi.LOGLEVEL) - def _validate_connection(self, guid): """ Check if the connection is available. @@ -100,11 +95,11 @@ class OMFWifiInterface(ResourceManager): """ rm = self.ec.get_resource(guid) if rm.rtype() in self._authorized_connections: - self._logger.debug("Connection between %s %s and %s %s accepted" % - (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s accepted" % (self.rtype(), self._guid, rm.rtype(), guid) + self.debug(msg) return True - self._logger.debug("Connection between %s %s and %s %s refused" % - (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s refused" % (self.rtype(), self._guid, rm.rtype(), guid) + self.debug(msg) return False def _get_nodes(self, conn_set): @@ -121,7 +116,7 @@ class OMFWifiInterface(ResourceManager): return rm return None - def deploy_action(self): + def deploy(self): """Deploy the RM """ @@ -140,7 +135,7 @@ class OMFWifiInterface(ResourceManager): #print "Send the configure message" self._omf_api.configure(rm_node.get('hostname'), attrname, attrval) - super(OMFWifiInterface, self).deploy_action() + super(OMFWifiInterface, self).deploy() def start(self): diff --git a/src/nepi/resources/omf/node.py b/src/nepi/resources/omf/node.py index 986c7ee2..d4da2c1e 100644 --- a/src/nepi/resources/omf/node.py +++ b/src/nepi/resources/omf/node.py @@ -22,8 +22,6 @@ from nepi.execution.attribute import Attribute, Flags from nepi.resources.omf.omf_api import OMFAPIFactory -import nepi -import logging import time @clsinit @@ -102,10 +100,7 @@ class OMFNode(ResourceManager): self._omf_api = None - self._logger = logging.getLogger("nepi.omf.omfNode ") - # XXX: TO DISCUSS - self._logger.setLevel(nepi.LOGLEVEL) def _validate_connection(self, guid): """Check if the connection is available. @@ -117,14 +112,14 @@ class OMFNode(ResourceManager): """ rm = self.ec.get_resource(guid) if rm.rtype() in self._authorized_connections: - self._logger.debug("Connection between %s %s and %s %s accepted" % - (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s accepted" % (self.rtype(), self._guid, rm.rtype(), guid) + self.debug(msg) return True - self._logger.debug("Connection between %s %s and %s %s refused" % - (self.rtype(), self._guid, rm.rtype(), guid)) + msg = "Connection between %s %s and %s %s refused" % (self.rtype(), self._guid, rm.rtype(), guid) + self.debug(msg) return False - def deploy_action(self): + def deploy(self): """Deploy the RM """ @@ -132,7 +127,7 @@ class OMFNode(ResourceManager): self.get('xmppHost'), self.get('xmppPort'), self.get('xmppPassword')) self._omf_api.enroll_host(self.get('hostname')) - super(OMFNode, self).deploy_action() + super(OMFNode, self).deploy() def discover(self): """ Discover the availables nodes diff --git a/src/nepi/resources/omf/omf_api.py b/src/nepi/resources/omf/omf_api.py index 1223ed49..df4fe034 100644 --- a/src/nepi/resources/omf/omf_api.py +++ b/src/nepi/resources/omf/omf_api.py @@ -18,18 +18,18 @@ """ import datetime -import logging import ssl import sys import time import hashlib -import nepi import threading +from nepi.util.logger import Logger + from nepi.resources.omf.omf_client import OMFClient from nepi.resources.omf.messages_5_4 import MessageHandler -class OMFAPI(object): +class OMFAPI(Logger): """ .. class:: Class Args : @@ -64,6 +64,8 @@ class OMFAPI(object): :type xmpp_root: Str """ + super(OMFAPI, self).__init__("OMFAPI") + date = datetime.datetime.now().strftime("%Y-%m-%dt%H.%M.%S") tz = -time.altzone if time.daylight != 0 else -time.timezone date += "%+06.2f" % (tz / 3600) # timezone difference is in seconds @@ -75,9 +77,6 @@ class OMFAPI(object): self._hostnames = [] self._xmpp_root = xmpp_root or "OMF_5.4" - self._logger = logging.getLogger("nepi.omf.omfApi ") - self._logger.setLevel(nepi.LOGLEVEL) - # OMF xmpp client self._client = None # message handler @@ -114,7 +113,7 @@ class OMFAPI(object): self._message = MessageHandler(self._slice, self._user) else: msg = "Unable to connect to the XMPP server." - self._logger.error(msg) + self.error(msg) raise RuntimeError(msg) def _enroll_experiment(self): @@ -286,7 +285,8 @@ class OMFAPI(object): # Wait the send queue to be empty before disconnect self._client.disconnect(wait=True) - self._logger.debug(" Disconnected from XMPP Server") + msg = " Disconnected from XMPP Server" + self.debug(msg) class OMFAPIFactory(object): diff --git a/src/nepi/resources/omf/omf_client.py b/src/nepi/resources/omf/omf_client.py index 1427ff3c..f20132d0 100644 --- a/src/nepi/resources/omf/omf_client.py +++ b/src/nepi/resources/omf/omf_client.py @@ -17,16 +17,15 @@ """ -import logging +from nepi.util.logger import Logger + import sleekxmpp from sleekxmpp.exceptions import IqError, IqTimeout import traceback import xml.etree.ElementTree as ET -import nepi - # inherit from BaseXmpp and XMLStream classes -class OMFClient(sleekxmpp.ClientXMPP): +class OMFClient(sleekxmpp.ClientXMPP, Logger): """ .. class:: Class Args : @@ -51,6 +50,8 @@ class OMFClient(sleekxmpp.ClientXMPP): """ + Logger.__init__(self, "OMFClient") + sleekxmpp.ClientXMPP.__init__(self, jid, password) self._ready = False self._registered = False @@ -65,9 +66,6 @@ class OMFClient(sleekxmpp.ClientXMPP): self.add_event_handler("register", self.register) self.add_event_handler("pubsub_publish", self.handle_omf_message) - self._logger = logging.getLogger("nepi.omf.xmppClient") - self._logger.setLevel(nepi.LOGLEVEL) - @property def ready(self): """ Check if the client is ready @@ -88,7 +86,8 @@ class OMFClient(sleekxmpp.ClientXMPP): """ if self._registered: - self._logger.info(" %s already registered!" % self.boundjid) + msg = " %s already registered!" % self.boundjid + self.info(msg) return resp = self.Iq() @@ -98,13 +97,15 @@ class OMFClient(sleekxmpp.ClientXMPP): try: resp.send(now=True) - self._logger.info(" Account created for %s!" % self.boundjid) + msg = " Account created for %s!" % self.boundjid + self.info(msg) self._registered = True except IqError as e: - self._logger.error(" Could not register account: %s" % - e.iq['error']['text']) + msg = " Could not register account: %s" % e.iq['error']['text'] + selferror(msg) except IqTimeout: - self._logger.error(" No response from server.") + msg = " No response from server." + self.error(msg) def unregister(self): """ Unregister from the Xmppp Server. @@ -113,12 +114,14 @@ class OMFClient(sleekxmpp.ClientXMPP): try: self.plugin['xep_0077'].cancel_registration( ifrom=self.boundjid.full) - self._logger.info(" Account unregistered for %s!" % self.boundjid) + msg = " Account unregistered for %s!" % self.boundjid + self.info(msg) except IqError as e: - self._logger.error(" Could not unregister account: %s" % - e.iq['error']['text']) + msg = " Could not unregister account: %s" % e.iq['error']['text'] + self.error(msg) except IqTimeout: - self._logger.error(" No response from server.") + msg = " No response from server." + self.error(msg) def nodes(self): """ Get all the nodes of the Xmppp Server. @@ -127,11 +130,13 @@ class OMFClient(sleekxmpp.ClientXMPP): try: result = self['xep_0060'].get_nodes(self._server) for item in result['disco_items']['items']: - self._logger.info(' - %s' % str(item)) + msg = ' - %s' % str(item) + self.info(msg) return result except: error = traceback.format_exc() - self._logger.error(' Could not retrieve node list.\ntraceback:\n%s', error) + msg = 'Could not retrieve node list.\ntraceback:\n%s' % error + self.error(msg) def subscriptions(self): """ Get all the subscriptions of the Xmppp Server. @@ -141,11 +146,13 @@ class OMFClient(sleekxmpp.ClientXMPP): result = self['xep_0060'].get_subscriptions(self._server) #self.boundjid.full) for node in result['node']: - self._logger.info(' - %s' % str(node)) + msg = ' - %s' % str(node) + self.info(msg) return result except: error = traceback.format_exc() - self._logger.error(' Could not retrieve subscriptions.\ntraceback:\n%s', error) + msg = ' Could not retrieve subscriptions.\ntraceback:\n%s' % error + self.error(msg) def create(self, node): """ Create the topic corresponding to the node @@ -154,7 +161,7 @@ class OMFClient(sleekxmpp.ClientXMPP): :type node: str """ - self._logger.debug(" Create Topic : " + node) + self.debug(" Create Topic : " + node) config = self['xep_0004'].makeForm('submit') config.add_field(var='pubsub#node_type', value='leaf') @@ -168,7 +175,8 @@ class OMFClient(sleekxmpp.ClientXMPP): self['xep_0060'].create_node(self._server, node, config = config) except: error = traceback.format_exc() - self._logger.error(' Could not create topic: %s\ntraceback:\n%s' % (node, error)) + msg = ' Could not create topic: %s\ntraceback:\n%s' % (node, error) + self.error(msg) def delete(self, node): """ Delete the topic corresponding to the node @@ -182,10 +190,12 @@ class OMFClient(sleekxmpp.ClientXMPP): #print " length of the queue : " + str(self.event_queue.qsize()) try: self['xep_0060'].delete_node(self._server, node) - self._logger.info(' Deleted node: %s' % node) + msg = ' Deleted node: %s' % node + self.info(msg) except: error = traceback.format_exc() - self._logger.error(' Could not delete topic: %s\ntraceback:\n%s' % (node, error)) + msg = ' Could not delete topic: %s\ntraceback:\n%s' % (node, error) + self.error(msg) def publish(self, data, node): """ Publish the data to the corresponding topic @@ -197,15 +207,16 @@ class OMFClient(sleekxmpp.ClientXMPP): """ - self._logger.debug(" Publish to Topic : " + node) + msg = " Publish to Topic : " + node + self.debug(msg) try: result = self['xep_0060'].publish(self._server,node,payload=data) # id = result['pubsub']['publish']['item']['id'] # print('Published at item id: %s' % id) except: error = traceback.format_exc() - self._logger.error(' Could not publish to: %s\ntraceback:\n%s' \ - % (node, error)) + msg = ' Could not publish to: %s\ntraceback:\n%s' % (node, error) + self.error(msg) def get(self, data): """ Get the item @@ -219,12 +230,13 @@ class OMFClient(sleekxmpp.ClientXMPP): result = self['xep_0060'].get_item(self._server, self.boundjid, data) for item in result['pubsub']['items']['substanzas']: - self._logger.info('Retrieved item %s: %s' % (item['id'], - tostring(item['payload']))) + msg = 'Retrieved item %s: %s' % (item['id'], tostring(item['payload'])) + self.info(msg) except: error = traceback.format_exc() - self._logger.error(' Could not retrieve item %s from topic %s\ntraceback:\n%s' \ - % (data, self.boundjid, error)) + msg = ' Could not retrieve item %s from topic %s\ntraceback:\n%s' \ + % (data, self.boundjid, error) + self.error(msg) def retract(self, data): """ Retract the item @@ -235,11 +247,13 @@ class OMFClient(sleekxmpp.ClientXMPP): """ try: result = self['xep_0060'].retract(self._server, self.boundjid, data) - self._logger.info(' Retracted item %s from topic %s' % (data, self.boundjid)) + msg = ' Retracted item %s from topic %s' % (data, self.boundjid) + self.info(msg) except: error = traceback.format_exc() - self._logger.error(' Could not retract item %s from topic %s\ntraceback:\n%s' \ - % (data, self.boundjid, error)) + msg = 'Could not retract item %s from topic %s\ntraceback:\n%s' \ + % (data, self.boundjid, error) + self.error(msg) def purge(self): """ Purge the information in the server @@ -247,11 +261,13 @@ class OMFClient(sleekxmpp.ClientXMPP): """ try: result = self['xep_0060'].purge(self._server, self.boundjid) - self._logger.info(' Purged all items from topic %s' % self.boundjid) + msg = ' Purged all items from topic %s' % self.boundjid + self.info(msg) except: error = traceback.format_exc() - self._logger.error(' Could not purge items from topic %s\ntraceback:\n%s' \ - % (self.boundjid, error)) + msg = ' Could not purge items from topic %s\ntraceback:\n%s' \ + % (self.boundjid, error) + self.error(msg) def subscribe(self, node): """ Subscribe to a topic @@ -262,14 +278,15 @@ class OMFClient(sleekxmpp.ClientXMPP): """ try: result = self['xep_0060'].subscribe(self._server, node) - #self._logger.debug('Subscribed %s to node %s' \ - #% (self.boundjid.bare, node)) - self._logger.info(' Subscribed %s to topic %s' \ - % (self.boundjid.user, node)) + msg = ' Subscribed %s to topic %s' \ + % (self.boundjid.user, node) + self.info(msg) + #self.debug(msg) except: error = traceback.format_exc() - self._logger.error(' Could not subscribe %s to topic %s\ntraceback:\n%s' \ - % (self.boundjid.bare, node, error)) + msg = ' Could not subscribe %s to topic %s\ntraceback:\n%s' \ + % (self.boundjid.bare, node, error) + self.error(msg) def unsubscribe(self, node): """ Unsubscribe to a topic @@ -280,11 +297,13 @@ class OMFClient(sleekxmpp.ClientXMPP): """ try: result = self['xep_0060'].unsubscribe(self._server, node) - self._logger.info(' Unsubscribed %s from topic %s' % (self.boundjid.bare, node)) + msg = ' Unsubscribed %s from topic %s' % (self.boundjid.bare, node) + self.info(msg) except: error = traceback.format_exc() - self._logger.error(' Could not unsubscribe %s from topic %s\ntraceback:\n%s' \ - % (self.boundjid.bare, node, error)) + msg = ' Could not unsubscribe %s from topic %s\ntraceback:\n%s' \ + % (self.boundjid.bare, node, error) + self.error(msg) def _check_for_tag(self, root, namespaces, tag): """ Check if an element markup is in the ElementTree @@ -320,9 +339,10 @@ class OMFClient(sleekxmpp.ClientXMPP): response = response + " " + msg.text + " :" deb = self._check_for_tag(root, namespaces, "MESSAGE") if deb is not None: - self._logger.debug(response + " " + deb.text) + msg = response + " " + deb.text + self.debug(msg) else : - self._logger.info(response) + self.info(response) def handle_omf_message(self, iq): """ Handle published/received message diff --git a/src/nepi/resources/planetlab/node.py b/src/nepi/resources/planetlab/node.py index c733e26d..066584e0 100644 --- a/src/nepi/resources/planetlab/node.py +++ b/src/nepi/resources/planetlab/node.py @@ -23,8 +23,6 @@ from nepi.resources.linux.node import LinuxNode from nepi.resources.planetlab.plcapi import PLCAPIFactory -import logging - reschedule_delay = "0.5s" @clsinit_copy @@ -167,8 +165,6 @@ class PlanetlabNode(LinuxNode): super(PLanetLabNode, self).__init__(ec, guid) self._plapi = None - - self._logger = logging.getLogger("PlanetLabNode") @property def plapi(self): diff --git a/src/nepi/util/logger.py b/src/nepi/util/logger.py new file mode 100644 index 00000000..20a41254 --- /dev/null +++ b/src/nepi/util/logger.py @@ -0,0 +1,55 @@ +""" + NEPI, a framework to manage network experiments + Copyright (C) 2013 INRIA + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +""" + +import logging + + +class Logger(object): + def __init__(self, logger_component): + self._logger = logging.getLogger(logger_component) + + def debug(self, msg, out = None, err = None): + self.log(msg, logging.DEBUG, out, err) + + def error(self, msg, out = None, err = None): + self.log(msg, logging.ERROR, out, err) + + def warn(self, msg, out = None, err = None): + self.log(msg, logging.WARNING, out, err) + + def info(self, msg, out = None, err = None): + self.log(msg, logging.INFO, out, err) + + def log(self, msg, level, out = None, err = None): + if out: + msg += " - OUT: %s " % out + + if err: + msg += " - ERROR: %s " % err + + msg = self.log_message(msg) + + self.logger.log(level, msg) + + def log_message(self, msg): + return msg + + @property + def logger(self): + return self._logger