Mercurial > libervia-backend
diff src/plugins/plugin_misc_xmllog.py @ 277:05caa87196e6
new xml log plugin
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 01 Feb 2011 23:07:08 +0100 |
parents | |
children | 345844caf048 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plugins/plugin_misc_xmllog.py Tue Feb 01 23:07:08 2011 +0100 @@ -0,0 +1,88 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +SàT plugin for managing raw XML log +Copyright (C) 2011 Jérôme Poisson (goffi@goffi.org) + +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 <http://www.gnu.org/licenses/>. +""" + +from logging import debug, info, error +from twisted.words.protocols.jabber.xmlstream import XmlStream +from twisted.words.xish import domish + +PLUGIN_INFO = { +"name": "Raw XML log Plugin", +"import_name": "XmlLog", +"type": "Misc", +"protocols": [], +"dependencies": [], +"main": "XmlLog", +"handler": "no", +"description": _("""Send raw XML logs to bridge""") +} + +class LoggingXmlStream(XmlStream): + """This class send the raw XML to the Bridge, for logging purpose""" + + def send(self, obj): + if isinstance(obj,basestring): + log=unicode(obj) + elif isinstance(obj, domish.Element): + log=obj.toXml() + else: + error(_('INTERNAL ERROR: Unmanaged XML type')) + info('OUT data for %s: %s' % (self._profile, log)) + self._host.bridge.XmlLog("OUT", log, self._profile) + return XmlStream.send(self, obj) + + def dataReceived(self, data): + info('IN data for %s: %s' % (self._profile, data.decode('utf-8'))) + self._host.bridge.XmlLog("IN", data.decode('utf-8'), self._profile) + return XmlStream.dataReceived(self, data) + + +class XmlLog(): + + params = """ + <params> + <general> + <category name="Debug"> + <param name="Xml log" label="%(label_xmllog)s" value="false" type="bool" /> + </category> + </general> + </params> + """ % {"label_xmllog": _("Activate XML log")} + + def __init__(self, host): + info(_("Plugin XML Log initialization")) + self.host = host + + #parameters + host.memory.importParams(self.params) + + #bridge + host.bridge.addSignal("XmlLog", ".communication", signature='sss') #args: direction("IN" or "OUT"), xml_data, profile + + do_log = bool(self.host.memory.getParamA("Xml log", "Debug")) + if do_log: + info(_("XML log activated")) + host.trigger.add("XML Initialized", self.logXml) + + def logXml(self, xmlstream, profile): + xmlstream.__class__ = LoggingXmlStream + xmlstream._profile = profile + xmlstream._host = self.host + return True