[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
> 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
> > receiving side gets upset about non-printable characters ("\b").
> > 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
> 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
> > + 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.
> 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
> that it always is. If it isn't, it's probably better to let
> 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
> newline, which will do. I've chosen below to replace \f as well
> I suspect they may appear at some point.
> diff -r ba69fe2dce91 tools/python/xen/xend/XendAPI.py
> --- a/tools/python/xen/xend/XendAPI.py Tue Nov 13 20:13:50
> +++ b/tools/python/xen/xend/XendAPI.py Thu Nov 15 14:32:33
> @@ -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 mailing list