[Kimchi-devel] [PATCH v2] Disabling screen log in production environment

Aline Manera alinefm at linux.vnet.ibm.com
Mon Oct 20 19:00:00 UTC 2014


I tested it on Fedora 20 and with this patch Kimchi does not list the 
VMs anymore:

[alinefm at alinefm kimchi]$ curl -H "Content-Type: application/json" -H 
"Accept: application/json" http://localhost:8010/vms -X GET -d'{}'
[
   {},
   {},
   {},
   {},
   {}
]

On 10/15/2014 04:36 PM, Daniel Henrique Barboza wrote:
> When building kimchi's RPM, some messages are getting
> logged in /var/log/messages because cherrypy is logging
> in the standard output. This happens because a function
> in FeatureTests is enabling log.screen regardless of the
> current environment. This patch makes a verification that
> prevents the screen log to be enabled in the production
> environment.
>
> Signed-off-by: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
> ---
>   src/kimchi/featuretests.py | 31 ++++++++++++++++---------------
>   src/kimchi/server.py       |  6 +++++-
>   2 files changed, 21 insertions(+), 16 deletions(-)
>
> diff --git a/src/kimchi/featuretests.py b/src/kimchi/featuretests.py
> index c6f4687..f1eb8ae 100644
> --- a/src/kimchi/featuretests.py
> +++ b/src/kimchi/featuretests.py
> @@ -80,30 +80,31 @@ SCSI_FC_XML = """
>   class FeatureTests(object):
>
>       @staticmethod
> -    def disable_screen_error_logging():
> +    def disable_libvirt_error_logging():
>           def libvirt_errorhandler(userdata, error):
>               # A libvirt error handler to ignore annoying messages in stderr
>               pass
>
> +        # Filter functions are enable only in production env
> +        if cherrypy.config.get('environment') != 'production':
> +            return
>           # Register the error handler to hide libvirt error in stderr
>           libvirt.registerErrorHandler(f=libvirt_errorhandler, ctx=None)
> -        # Disable cherrypy screen logging, in order to log errors on kimchi
> -        # file without displaying them on screen
> -        cherrypy.log.screen = False
>
>       @staticmethod
> -    def enable_screen_error_logging():
> +    def enable_libvirt_error_logging():
> +        # Filter functions are enable only in production env
> +        if cherrypy.config.get('environment') != 'production':
> +            return
>           # Unregister the error handler
>           libvirt.registerErrorHandler(f=None, ctx=None)
> -        # Enable cherrypy screen logging
> -        cherrypy.log.screen = True
>
>       @staticmethod
>       def libvirt_supports_iso_stream(protocol):
>           xml = ISO_STREAM_XML % {'protocol': protocol}
>           conn = None
>           try:
> -            FeatureTests.disable_screen_error_logging()
> +            FeatureTests.disable_libvirt_error_logging()
>               conn = libvirt.open(None)
>               dom = conn.defineXML(xml)
>               dom.undefine()
> @@ -112,7 +113,7 @@ class FeatureTests(object):
>               kimchi_log.error(e.message)
>               return False
>           finally:
> -            FeatureTests.enable_screen_error_logging()
> +            FeatureTests.enable_libvirt_error_logging()
>               conn is None or conn.close()
>
>       @staticmethod
> @@ -123,7 +124,7 @@ class FeatureTests(object):
>               return xml
>           try:
>               conn = libvirt.open(None)
> -            FeatureTests.disable_screen_error_logging()
> +            FeatureTests.disable_libvirt_error_logging()
>               conn.findStoragePoolSources('netfs', _get_xml(), 0)
>           except libvirt.libvirtError as e:
>               kimchi_log.error(e.message)
> @@ -132,7 +133,7 @@ class FeatureTests(object):
>                   # it returns 38--general system call failure
>                   return False
>           finally:
> -            FeatureTests.enable_screen_error_logging()
> +            FeatureTests.enable_libvirt_error_logging()
>               conn is None or conn.close()
>
>           return True
> @@ -173,7 +174,7 @@ class FeatureTests(object):
>       @staticmethod
>       def libvirt_support_fc_host():
>           try:
> -            FeatureTests.disable_screen_error_logging()
> +            FeatureTests.disable_libvirt_error_logging()
>               conn = libvirt.open(None)
>               pool = None
>               pool = conn.storagePoolDefineXML(SCSI_FC_XML, 0)
> @@ -182,7 +183,7 @@ class FeatureTests(object):
>                   # Libvirt requires adapter name, not needed when supports to FC
>                   return False
>           finally:
> -            FeatureTests.enable_screen_error_logging()
> +            FeatureTests.enable_libvirt_error_logging()
>               pool is None or pool.undefine()
>               conn is None or conn.close()
>           return True
> @@ -192,8 +193,8 @@ class FeatureTests(object):
>           KIMCHI_META_URL = "https://github.com/kimchi-project/kimchi/"
>           KIMCHI_NAMESPACE = "kimchi"
>           with RollbackContext() as rollback:
> -            FeatureTests.disable_screen_error_logging()
> -            rollback.prependDefer(FeatureTests.enable_screen_error_logging)
> +            FeatureTests.disable_libvirt_error_logging()
> +            rollback.prependDefer(FeatureTests.enable_libvirt_error_logging)
>               conn = libvirt.open(None)
>               rollback.prependDefer(conn.close)
>               dom = conn.defineXML(SIMPLE_VM_XML)
> diff --git a/src/kimchi/server.py b/src/kimchi/server.py
> index 8d166e5..6cc7143 100644
> --- a/src/kimchi/server.py
> +++ b/src/kimchi/server.py
> @@ -91,13 +91,17 @@ class Server(object):
>           max_body_size_in_bytes = eval(options.max_body_size) * 1024
>           cherrypy.server.max_request_body_size = max_body_size_in_bytes
>
> -        cherrypy.log.screen = True
>           cherrypy.log.access_file = options.access_log
>           cherrypy.log.error_file = options.error_log
>
>           logLevel = LOGGING_LEVEL.get(options.log_level, logging.DEBUG)
>           dev_env = options.environment != 'production'
>
> +        # Enable cherrypy screen logging if running environment
> +        # is not 'production'
> +        if dev_env:
> +            cherrypy.log.screen = True
> +
>           # Create handler to rotate access log file
>           h = logging.handlers.RotatingFileHandler(options.access_log, 'a',
>                                                    10000000, 1000)




More information about the Kimchi-devel mailing list