[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] [Xend] host.get_log() : clean log of non-printable characters




xen-devel-bounces@xxxxxxxxxxxxxxxxxxx wrote on 11/15/2007 09:38:37 AM:

> Stefan Berger writes ("[Xen-devel] [PATCH] [Xend] host.get_log() :
> clean log of non-printable characters"):
> > When retrieving the log via host.get_log() the python parser on the
> > receiving side gets upset about non-printable characters ("\b"). Those
> > stem from libxc/xc_domain_restore:xc_domain_restore().
>
> It is a shame that we are forced into writing a lossy log retrieval
> method by braindamage in XMLRPC and XML 1.0.  Perhaps we should in
> future think about a get_log_lossless function which uses a binary
> encoding.  It'd have to be base64 :-/.

>
> > -        return xen_api_success(log_buffer)
> > +        i = 0
> > +        res = ""
> > +        while i < len(log_buffer):
> > +            c = ord(log_buffer[i])
> > +            if (c < 32 or c > 126) and (c < 10 or c > 13):
> > +                res += " "
> > +            else:
> > +                res += log_buffer[i]
> > +            i += 1
> > +        return xen_api_success(res)
>
> This is a strange way of doing things and will be quite slow.


I agree. log_buffer[i] = ' ' unfortunately does not wokr with python. The solution you show below is
probably the right one.

   Stefan

> It's also wrong in that it replaces tabs.
>
> In theory it would be best to try to map away all Unicode characters
> which are not in XML 1.0's Char.  However, this would involve
> explicitly interpreting the logfile as UTF-8 and it's not clear to me
> that it always is.  If it isn't, it's probably better to let the
> caller get whatever the logfile byte string is and hope they don't
> choke - at least until we know under what circumstances this arises.
>
> So it's better just to map away the character we know is causing
> problems.  \r will be OK because it's allowed in XML as an encoding of
> newline, which will do.  I've chosen below to replace \f as well since
> I suspect they may appear at some point.
>
> Ian.
>
> diff -r ba69fe2dce91 tools/python/xen/xend/XendAPI.py
> --- a/tools/python/xen/xend/XendAPI.py   Tue Nov 13 20:13:50 2007 +0000
> +++ b/tools/python/xen/xend/XendAPI.py   Thu Nov 15 14:32:33 2007 +0000
> @@ -994,6 +994,8 @@ class XendAPI(object):
>      def host_get_log(self, session, host_ref):
>          log_file = open(XendLogging.getLogFilename())
>          log_buffer = log_file.read()
> +        log_buffer = log_buffer.replace('\b',' ')
> +        log_buffer = log_buffer.replace('\f','\n')
>          return xen_api_success(log_buffer)
>  
>      def host_send_debug_keys(self, _, host_ref, keys):
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.