On Fri, Feb 22, 2013 at 04:39:52PM +0900, YAMAMOTO Takashi wrote:
> Signed-off-by: YAMAMOTO Takashi <[email protected]>
> ---
>  ryu/app/cli.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------
>  1 file changed, 49 insertions(+), 6 deletions(-)
> 
> diff --git a/ryu/app/cli.py b/ryu/app/cli.py
> index 75dbdba..e056093 100644
> --- a/ryu/app/cli.py
> +++ b/ryu/app/cli.py
> @@ -19,6 +19,7 @@
>  
>  import gevent
>  import gevent.server
> +import logging
>  
>  from oslo.config import cfg
>  
> @@ -36,15 +37,58 @@ CONF.register_opts([
>  ])
>  
>  
> +class PrefixedLogger(object):
> +    def __init__(self, logger, prefix):
> +        self.logger = logger
> +        self.prefix = prefix
> +
> +    def __getattr__(self, name):
> +        basemethod = getattr(self.logger, name)
> +        if not name in ['debug', 'info', 'warn', 'error', 'critical']:
> +            raise AttributeError
> +
> +        def method(msg, *args, **kwargs):
> +            return basemethod("%s %s" % (self.prefix, msg), *args, **kwargs)
> +        return method
> +
> +
> +def command_log(*args, **kwargs):
> +    def _log(f):
> +        # XXX see the implementation of @command for command_name and __doc
> +        def wrapper(self, params):
> +            self.logger.info("command %s %s" % (wrapper.command_name, 
> params))
> +            f(self, params)
> +        wrapper.__doc__ = f.__doc__

functools.wraps is better.


> +        return wrapper
> +    return lambda f: command(*args, **kwargs)(_log(f))
> +
> +
>  class CliHandler(TelnetHandler):
>      PROMPT = 'ryu-manager %s> ' % version
>  
> -    @command('set-log-level')
> +    def __init__(self, request, client_address, server):
> +        self.client_address = client_address
> +        logger = logging.getLogger("ryu.app.Cli")
> +        plogger = PrefixedLogger(logger, "CLI %s" % (client_address,))
> +        self.logger = plogger  # for us
> +        self.logging = plogger  # for TelnetHandler
> +        TelnetHandler.__init__(self, request, client_address, server)

super().__init__() doesn't work?


> +
> +    def session_start(self):
> +        self.logger.info("session start")
> +
> +    def session_end(self):
> +        # XXX due to a bug in telnetsrv 0.4, this isn't called on
> +        # a forcible disconnect.
> +        # see https://github.com/yamt/telnetsrvlib/tree/fix-disconnect
> +        # for a fix.
> +        self.logger.info("session end")
> +
> +    @command_log('set-log-level')
>      def command_set_log_level(self, params):
>          '''<logger> <level>
>          set log level of the specified logger
>          '''
> -        import logging
>          import ryu.logger
>          try:
>              name = params[0]
> @@ -61,7 +105,7 @@ class CliHandler(TelnetHandler):
>          self.writeresponse('logger %s level %s -> %s' %
>                             (name, oldlvl, newlvl))
>  
> -    @command('show-bricks')
> +    @command_log('show-bricks')
>      def command_show_bricks(self, params):
>          '''
>          show a list of configured bricks
> @@ -70,12 +114,11 @@ class CliHandler(TelnetHandler):
>          for b, x in SERVICE_BRICKS.iteritems():
>              self.writeresponse('%s' % (b,))
>  
> -    @command('show-loggers')
> +    @command_log('show-loggers')
>      def command_show_loggers(self, params):
>          '''
>          show loggers
>          '''
> -        import logging
>          import ryu.logger
>  
>          def show_logger(name):
> @@ -84,7 +127,7 @@ class CliHandler(TelnetHandler):
>                                 (name, logger.getEffectiveLevel()))
>          map(show_logger, ryu.logger.RyuLogger.loggers)
>  
> -    @command('show-options')
> +    @command_log('show-options')
>      def command_show_options(self, params):
>          '''
>          show options
> -- 
> 1.7.12
> 
> 
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_d2d_feb
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 

-- 
yamahata

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to