Ticket #569: 0001-renaming-Logging-module-to-Logger-to-avoid-collision.patch
File 0001-renaming-Logging-module-to-Logger-to-avoid-collision.patch, 21.0 KB (added by [email protected]…, 15 years ago) |
---|
-
redhat/bcfg2.spec
From 9704398770b4b84ce27c05d6acf6c740f26c6b21 Mon Sep 17 00:00:00 2001 From: Peter Woodman <[email protected]> Date: Wed, 25 Jun 2008 14:54:48 -0700 Subject: [PATCH] renaming Logging module to Logger to avoid collision with standard library module on case-insensitive filesystems --- redhat/bcfg2.spec | 2 +- src/lib/Logger.py | 155 +++++++++++++++++++++++++++++++++++++++++ src/lib/Logging.py | 155 ----------------------------------------- src/lib/Server/Admin/Query.py | 4 +- src/lib/__init__.py | 2 +- src/sbin/bcfg2 | 4 +- src/sbin/bcfg2-admin | 4 +- src/sbin/bcfg2-info | 4 +- src/sbin/bcfg2-remote | 4 +- src/sbin/bcfg2-server | 6 +- tools/bcfg2-export-config | 4 +- 11 files changed, 172 insertions(+), 172 deletions(-) create mode 100644 src/lib/Logger.py delete mode 100644 src/lib/Logging.py diff --git a/redhat/bcfg2.spec b/redhat/bcfg2.spec index 50b32a8..a4873d5 100644
a b fi 182 182 %{python_sitelib}/Bcfg2/Client 183 183 %{python_sitelib}/Bcfg2/Component.* 184 184 %{python_sitelib}/Bcfg2/Daemon.* 185 %{python_sitelib}/Bcfg2/Logg ing.*185 %{python_sitelib}/Bcfg2/Logger.* 186 186 %{python_sitelib}/Bcfg2/Options.* 187 187 %{python_sitelib}/Bcfg2/Proxy.* 188 188 %{python_sitelib}/Bcfg2/tlslite -
new file src/lib/Logger.py
diff --git a/src/lib/Logger.py b/src/lib/Logger.py new file mode 100644 index 0000000..4295380
- + 1 '''Bcfg2 logging support''' 2 __revision__ = '$Revision$' 3 4 import copy, fcntl, logging, logging.handlers, math, socket, struct, sys, termios, types 5 6 logging.raiseExceptions=0 7 8 def print_attributes(attrib): 9 ''' Add the attributes for an element''' 10 return ' '.join(['%s="%s"' % data for data in attrib.iteritems()]) 11 12 def print_text(text): 13 ''' Add text to the output (which will need normalising ''' 14 charmap = {'<':'<', '>':'>', '&':'&'} 15 return ''.join([charmap.get(char, char) for char in text]) + '\n' 16 17 def xml_print(element, running_indent=0, indent=4): 18 ''' Add an element and its children to the return string ''' 19 if (len(element.getchildren()) == 0) and (not element.text): 20 ret = (' ' * running_indent) 21 ret += '<%s %s/>\n' % (element.tag, print_attributes(element.attrib)) 22 else: 23 child_indent = running_indent + indent 24 ret = (' ' * running_indent) 25 ret += '<%s%s>\n' % (element.tag, print_attributes(element)) 26 if element.text: 27 ret += (' '* child_indent) + print_text(element.text) 28 for child in element.getchildren(): 29 ret += xml_print(child, child_indent, indent) 30 ret += (' ' * running_indent) + '</%s>\n' % (element.tag) 31 if element.tail: 32 ret += (' ' * child_indent) + print_text(element.tail) 33 return ret 34 35 class TermiosFormatter(logging.Formatter): 36 '''The termios formatter displays output in a terminal-sensitive fashion''' 37 38 def __init__(self, fmt=None, datefmt=None): 39 logging.Formatter.__init__(self, fmt, datefmt) 40 if sys.stdout.isatty(): 41 # now get termios info 42 try: 43 self.width = struct.unpack('hhhh', fcntl.ioctl(0, termios.TIOCGWINSZ, 44 "\000"*8))[1] 45 if self.width == 0: 46 self.width = 80 47 except: 48 self.width = 80 49 else: 50 # output to a pipe 51 self.width = 32768 52 53 def format(self, record): 54 '''format a record for display''' 55 returns = [] 56 line_len = self.width 57 if type(record.msg) in types.StringTypes: 58 for line in record.msg.split('\n'): 59 if len(line) <= line_len: 60 returns.append(line) 61 else: 62 inner_lines = int(math.floor(float(len(line)) / line_len))+1 63 for i in xrange(inner_lines): 64 returns.append("%s" % (line[i*line_len:(i+1)*line_len])) 65 elif type(record.msg) == types.ListType: 66 if not record.msg: 67 return '' 68 record.msg.sort() 69 msgwidth = self.width 70 columnWidth = max([len(item) for item in record.msg]) 71 columns = int(math.floor(float(msgwidth) / (columnWidth+2))) 72 lines = int(math.ceil(float(len(record.msg)) / columns)) 73 for lineNumber in xrange(lines): 74 indices = [idx for idx in [(colNum * lines) + lineNumber 75 for colNum in range(columns)] if idx < len(record.msg)] 76 format = (len(indices) * (" %%-%ds " % columnWidth)) 77 returns.append(format % tuple([record.msg[idx] for idx in indices])) 78 #elif type(record.msg) == lxml.etree._Element: 79 # returns.append(str(xml_print(record.msg))) 80 else: 81 returns.append(str(record.msg)) 82 if record.exc_info: 83 returns.append(self.formatException(record.exc_info)) 84 return '\n'.join(returns) 85 86 class FragmentingSysLogHandler(logging.handlers.SysLogHandler): 87 '''This handler fragments messages into chunks smaller than 250 characters''' 88 89 def __init__(self, procname, path, facility): 90 self.procname = procname 91 self.unixsocket = False 92 logging.handlers.SysLogHandler.__init__(self, path, facility) 93 94 def emit(self, record): 95 '''chunk and deliver records''' 96 record.name = self.procname 97 if str(record.msg) > 250: 98 msgs = [] 99 error = record.exc_info 100 record.exc_info = None 101 msgdata = record.msg 102 while msgdata: 103 newrec = copy.deepcopy(record) 104 newrec.msg = msgdata[:250] 105 msgs.append(newrec) 106 msgdata = msgdata[250:] 107 msgs[0].exc_info = error 108 else: 109 msgs = [record] 110 while msgs: 111 newrec = msgs.pop() 112 msg = self.log_format_string % (self.encodePriority(self.facility, 113 newrec.levelname.lower()), self.format(newrec)) 114 try: 115 self.socket.send(msg) 116 except socket.error: 117 while True: 118 try: 119 if isinstance(self.address, types.TupleType): 120 self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 121 else: 122 self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) 123 self.socket.connect(self.address) 124 break 125 except socket.error: 126 continue 127 self.socket.send("Reconnected to syslog") 128 self.socket.send(msg) 129 130 def setup_logging(procname, to_console=True, to_syslog=True, syslog_facility='daemon', level=0): 131 '''setup logging for bcfg2 software''' 132 if hasattr(logging, 'already_setup'): 133 return 134 # add the handler to the root logger 135 if to_console: 136 console = logging.StreamHandler(sys.stdout) 137 console.setLevel(logging.DEBUG) 138 # tell the handler to use this format 139 console.setFormatter(TermiosFormatter()) 140 logging.root.addHandler(console) 141 if to_syslog: 142 try: 143 try: 144 syslog = FragmentingSysLogHandler(procname, '/dev/log', syslog_facility) 145 except socket.error: 146 syslog = FragmentingSysLogHandler(procname, ('localhost', 514), syslog_facility) 147 syslog.setLevel(logging.DEBUG) 148 syslog.setFormatter(logging.Formatter('%(name)s[%(process)d]: %(message)s')) 149 logging.root.addHandler(syslog) 150 except socket.error: 151 logging.root.error("failed to activate syslogging") 152 except: 153 print "Failed to activate syslogging" 154 logging.root.setLevel(level) 155 logging.already_setup = True -
deleted file src/lib/Logging.py
diff --git a/src/lib/Logging.py b/src/lib/Logging.py deleted file mode 100644 index 4295380..0000000
+ - 1 '''Bcfg2 logging support'''2 __revision__ = '$Revision$'3 4 import copy, fcntl, logging, logging.handlers, math, socket, struct, sys, termios, types5 6 logging.raiseExceptions=07 8 def print_attributes(attrib):9 ''' Add the attributes for an element'''10 return ' '.join(['%s="%s"' % data for data in attrib.iteritems()])11 12 def print_text(text):13 ''' Add text to the output (which will need normalising '''14 charmap = {'<':'<', '>':'>', '&':'&'}15 return ''.join([charmap.get(char, char) for char in text]) + '\n'16 17 def xml_print(element, running_indent=0, indent=4):18 ''' Add an element and its children to the return string '''19 if (len(element.getchildren()) == 0) and (not element.text):20 ret = (' ' * running_indent)21 ret += '<%s %s/>\n' % (element.tag, print_attributes(element.attrib))22 else:23 child_indent = running_indent + indent24 ret = (' ' * running_indent)25 ret += '<%s%s>\n' % (element.tag, print_attributes(element))26 if element.text:27 ret += (' '* child_indent) + print_text(element.text)28 for child in element.getchildren():29 ret += xml_print(child, child_indent, indent)30 ret += (' ' * running_indent) + '</%s>\n' % (element.tag)31 if element.tail:32 ret += (' ' * child_indent) + print_text(element.tail)33 return ret34 35 class TermiosFormatter(logging.Formatter):36 '''The termios formatter displays output in a terminal-sensitive fashion'''37 38 def __init__(self, fmt=None, datefmt=None):39 logging.Formatter.__init__(self, fmt, datefmt)40 if sys.stdout.isatty():41 # now get termios info42 try:43 self.width = struct.unpack('hhhh', fcntl.ioctl(0, termios.TIOCGWINSZ,44 "\000"*8))[1]45 if self.width == 0:46 self.width = 8047 except:48 self.width = 8049 else:50 # output to a pipe51 self.width = 3276852 53 def format(self, record):54 '''format a record for display'''55 returns = []56 line_len = self.width57 if type(record.msg) in types.StringTypes:58 for line in record.msg.split('\n'):59 if len(line) <= line_len:60 returns.append(line)61 else:62 inner_lines = int(math.floor(float(len(line)) / line_len))+163 for i in xrange(inner_lines):64 returns.append("%s" % (line[i*line_len:(i+1)*line_len]))65 elif type(record.msg) == types.ListType:66 if not record.msg:67 return ''68 record.msg.sort()69 msgwidth = self.width70 columnWidth = max([len(item) for item in record.msg])71 columns = int(math.floor(float(msgwidth) / (columnWidth+2)))72 lines = int(math.ceil(float(len(record.msg)) / columns))73 for lineNumber in xrange(lines):74 indices = [idx for idx in [(colNum * lines) + lineNumber75 for colNum in range(columns)] if idx < len(record.msg)]76 format = (len(indices) * (" %%-%ds " % columnWidth))77 returns.append(format % tuple([record.msg[idx] for idx in indices]))78 #elif type(record.msg) == lxml.etree._Element:79 # returns.append(str(xml_print(record.msg)))80 else:81 returns.append(str(record.msg))82 if record.exc_info:83 returns.append(self.formatException(record.exc_info))84 return '\n'.join(returns)85 86 class FragmentingSysLogHandler(logging.handlers.SysLogHandler):87 '''This handler fragments messages into chunks smaller than 250 characters'''88 89 def __init__(self, procname, path, facility):90 self.procname = procname91 self.unixsocket = False92 logging.handlers.SysLogHandler.__init__(self, path, facility)93 94 def emit(self, record):95 '''chunk and deliver records'''96 record.name = self.procname97 if str(record.msg) > 250:98 msgs = []99 error = record.exc_info100 record.exc_info = None101 msgdata = record.msg102 while msgdata:103 newrec = copy.deepcopy(record)104 newrec.msg = msgdata[:250]105 msgs.append(newrec)106 msgdata = msgdata[250:]107 msgs[0].exc_info = error108 else:109 msgs = [record]110 while msgs:111 newrec = msgs.pop()112 msg = self.log_format_string % (self.encodePriority(self.facility,113 newrec.levelname.lower()), self.format(newrec))114 try:115 self.socket.send(msg)116 except socket.error:117 while True:118 try:119 if isinstance(self.address, types.TupleType):120 self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)121 else:122 self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)123 self.socket.connect(self.address)124 break125 except socket.error:126 continue127 self.socket.send("Reconnected to syslog")128 self.socket.send(msg)129 130 def setup_logging(procname, to_console=True, to_syslog=True, syslog_facility='daemon', level=0):131 '''setup logging for bcfg2 software'''132 if hasattr(logging, 'already_setup'):133 return134 # add the handler to the root logger135 if to_console:136 console = logging.StreamHandler(sys.stdout)137 console.setLevel(logging.DEBUG)138 # tell the handler to use this format139 console.setFormatter(TermiosFormatter())140 logging.root.addHandler(console)141 if to_syslog:142 try:143 try:144 syslog = FragmentingSysLogHandler(procname, '/dev/log', syslog_facility)145 except socket.error:146 syslog = FragmentingSysLogHandler(procname, ('localhost', 514), syslog_facility)147 syslog.setLevel(logging.DEBUG)148 syslog.setFormatter(logging.Formatter('%(name)s[%(process)d]: %(message)s'))149 logging.root.addHandler(syslog)150 except socket.error:151 logging.root.error("failed to activate syslogging")152 except:153 print "Failed to activate syslogging"154 logging.root.setLevel(level)155 logging.already_setup = True -
src/lib/Server/Admin/Query.py
diff --git a/src/lib/Server/Admin/Query.py b/src/lib/Server/Admin/Query.py index 322329b..a0cfa9f 100644
a b 1 import Bcfg2.Server.Admin, Bcfg2.Logg ing, logging1 import Bcfg2.Server.Admin, Bcfg2.Logger, logging 2 2 3 3 class Query(Bcfg2.Server.Admin.Mode): 4 4 __shorthelp__ = 'bcfg2-admin query [-n] [-c] [-f filename] g=group p=profile' 5 5 __longhelp__ = __shorthelp__ + '\n\tQuery clients' 6 6 def __init__(self, cfile): 7 7 logging.root.setLevel(100) 8 Bcfg2.Logg ing.setup_logging(100, to_console=False, to_syslog=False)8 Bcfg2.Logger.setup_logging(100, to_console=False, to_syslog=False) 9 9 Bcfg2.Server.Admin.Mode.__init__(self, cfile) 10 10 try: 11 11 self.bcore = Bcfg2.Server.Core.Core(self.get_repo_path(), -
src/lib/__init__.py
diff --git a/src/lib/__init__.py b/src/lib/__init__.py index 7f771da..a6300af 100644
a b 1 1 '''base modules definition''' 2 2 __revision__ = '$Revision$' 3 3 4 __all__ = ['Server', 'Client', 'Component', 'Logg ing', 'Options', 'Proxy']4 __all__ = ['Server', 'Client', 'Component', 'Logger', 'Options', 'Proxy'] -
src/sbin/bcfg2
diff --git a/src/sbin/bcfg2 b/src/sbin/bcfg2 index 472eab7..d713819 100755
a b from Bcfg2.Component import SimpleXMLRPCServer, ComponentInitError, ComponentKey 20 20 from Bcfg2.tlslite.errors import TLSNoAuthenticationError, TLSFingerprintError 21 21 22 22 import Bcfg2.Proxy 23 import Bcfg2.Logg ing23 import Bcfg2.Logger 24 24 25 25 logger = logging.getLogger('bcfg2') 26 26 … … class Client: 130 130 level = 20 131 131 if self.setup['debug']: 132 132 level = 0 133 Bcfg2.Logg ing.setup_logging('bcfg2', to_syslog=False, level=level)133 Bcfg2.Logger.setup_logging('bcfg2', to_syslog=False, level=level) 134 134 self.logger = logging.getLogger('bcfg2') 135 135 self.logger.debug(self.setup) 136 136 if 'drivers' in self.setup and self.setup['drivers'] == 'help': -
src/sbin/bcfg2-admin
diff --git a/src/sbin/bcfg2-admin b/src/sbin/bcfg2-admin index bb44bbc..1cc8ca2 100755
a b 2 2 '''bcfg2-admin is a script that helps to administrate a bcfg2 deployment''' 3 3 4 4 import getopt, logging, sys 5 import Bcfg2.Server.Core, Bcfg2.Logg ing, Bcfg2.Options5 import Bcfg2.Server.Core, Bcfg2.Logger, Bcfg2.Options 6 6 7 7 log = logging.getLogger('bcfg-admin') 8 8 … … def mode_import(modename): 16 16 return getattr(mod, modname) 17 17 18 18 if __name__ == '__main__': 19 Bcfg2.Logg ing.setup_logging('bcfg2-admin', to_console=True)19 Bcfg2.Logger.setup_logging('bcfg2-admin', to_console=True) 20 20 # Get config file path 21 21 configfile = Bcfg2.Options.CFILE.default 22 22 try: -
src/sbin/bcfg2-info
diff --git a/src/sbin/bcfg2-info b/src/sbin/bcfg2-info index dac7fa6..0f5ad8f 100755
a b 3 3 __revision__ = '$Revision$' 4 4 5 5 import copy, logging, lxml.etree, sys, time, cmd 6 import Bcfg2.Logg ing, Bcfg2.Server.Core, os6 import Bcfg2.Logger, Bcfg2.Server.Core, os 7 7 import Bcfg2.Server.Plugins.Metadata, Bcfg2.Server.Plugin 8 8 import Bcfg2.Options 9 9 … … Usage: [quit|exit]""" 262 262 self.fam.debug = True 263 263 264 264 if __name__ == '__main__': 265 Bcfg2.Logg ing.setup_logging('bcfg2-info', to_syslog=False)265 Bcfg2.Logger.setup_logging('bcfg2-info', to_syslog=False) 266 266 optinfo = { 267 267 'configfile': Bcfg2.Options.CFILE, 268 268 'help': Bcfg2.Options.HELP, -
src/sbin/bcfg2-remote
diff --git a/src/sbin/bcfg2-remote b/src/sbin/bcfg2-remote index c33fcfb..ee52d62 100755
a b __revision__ = '$Revision$' 4 4 from Bcfg2.tlslite.api import parsePEMKey, X509, X509CertChain 5 5 from xmlrpclib import ServerProxy 6 6 from Bcfg2.tlslite.integration.XMLRPCTransport import XMLRPCTransport 7 import Bcfg2.Options, Bcfg2.Logg ing, logging, socket, sys7 import Bcfg2.Options, Bcfg2.Logger, logging, socket, sys 8 8 9 9 if __name__ == '__main__': 10 10 opts = { … … if __name__ == '__main__': 16 16 } 17 17 setup = Bcfg2.Options.OptionParser(opts) 18 18 setup.parse(sys.argv[1:]) 19 Bcfg2.Logg ing.setup_logging('bcfg2-remote',19 Bcfg2.Logger.setup_logging('bcfg2-remote', 20 20 to_syslog=False, 21 21 level=int(setup['debug'])) 22 22 logger = logging.getLogger('bcfg2-remote') -
src/sbin/bcfg2-server
diff --git a/src/sbin/bcfg2-server b/src/sbin/bcfg2-server index a5c5310..263d52b 100755
a b from xmlrpclib import Fault 10 10 from lxml.etree import XML, Element, tostring 11 11 12 12 import logging, select, signal, socket, sys 13 import Bcfg2.Logg ing, Bcfg2.Options, Bcfg2.Component, Bcfg2.Daemon13 import Bcfg2.Logger, Bcfg2.Options, Bcfg2.Component, Bcfg2.Daemon 14 14 15 15 logger = logging.getLogger('bcfg2-server') 16 16 … … if __name__ == '__main__': 211 211 212 212 level = 0 213 213 if setup['daemon']: 214 Bcfg2.Logg ing.setup_logging('bcfg2-server', to_console=False, level=level)214 Bcfg2.Logger.setup_logging('bcfg2-server', to_console=False, level=level) 215 215 Bcfg2.Daemon.daemonize(setup['daemon']) 216 216 else: 217 Bcfg2.Logg ing.setup_logging('bcfg2-server', level=level)217 Bcfg2.Logger.setup_logging('bcfg2-server', level=level) 218 218 219 219 if not setup['key']: 220 220 print "No key specified in '%s'" % setup['configfile'] -
tools/bcfg2-export-config
diff --git a/tools/bcfg2-export-config b/tools/bcfg2-export-config index 25513cb..569eb01 100755
a b user,group,permission,/path/to/file 18 18 ''' 19 19 __revision__ = '$Revision: 221 $' 20 20 21 import logging, lxml.etree, Bcfg2.Logg ing, Bcfg2.Server.Core21 import logging, lxml.etree, Bcfg2.Logger, Bcfg2.Server.Core 22 22 import Bcfg2.Server.Plugins.Metadata, Bcfg2.Server.Plugin 23 23 import sys,os,time,errno 24 24 from optparse import OptionParser … … def handleConfigFileEntry(indexfile, cfg): 85 85 logger.info("<<<") 86 86 87 87 if __name__ == '__main__': 88 Bcfg2.Logg ing.setup_logging('%s' % TOOLNAME, to_syslog=False)88 Bcfg2.Logger.setup_logging('%s' % TOOLNAME, to_syslog=False) 89 89 logger = logging.getLogger('%s' % TOOLNAME) 90 90 91 91 # parse command line options, arguments