# HG changeset patch # User Atul Varma # Date 1241224724 25200 # Node ID 0b8c3a21335cbc5c159fdbe59232b2f2110fea87 # Parent 8105e7a95e8a5d24e63e2a01255efab3c1f083d1 Added support for logging. diff -r 8105e7a95e8a -r 0b8c3a21335c cosocket.py --- a/cosocket.py Fri May 01 17:13:56 2009 -0700 +++ b/cosocket.py Fri May 01 17:38:44 2009 -0700 @@ -6,6 +6,7 @@ import traceback import time import weakref +import logging DEFAULT_TIMEOUT = 90.0 DEFAULT_MAX_DATA = 65536 @@ -106,8 +107,11 @@ self.close() def log_info(self, message, type='info'): - # TODO: Use the logging module here. - print '%s: %s' % (type, message) + try: + level = getattr(logging, type.upper()) + except AttributeError: + level = logging.INFO + logging.log(level, message) def handle_error(self): self.log_info(traceback.format_exc() + @@ -127,6 +131,8 @@ def __on_tick(self, time_elapsed): self.__time_passed += time_elapsed if self.__time_passed > self.__timeout: + self.log_info("Timeout expired (%ss)." % self.__timeout, + 'error') self.handle_close() def clear_timeout(self): @@ -144,6 +150,8 @@ self.__data.append(data) self.__data_len += len(data) if self.__max_data and self.__data_len > self.__max_data: + self.log_info("Max data reached (%s bytes)." % self.__max_data, + 'error') self.handle_close() def set_max_data(self, amount): diff -r 8105e7a95e8a -r 0b8c3a21335c openwebchat.py --- a/openwebchat.py Fri May 01 17:13:56 2009 -0700 +++ b/openwebchat.py Fri May 01 17:38:44 2009 -0700 @@ -7,6 +7,7 @@ import mimetools import weakref import cgi +import logging from cosocket import * import channels @@ -81,7 +82,7 @@ self._server_coroutine) def run(self): - self._server.run(timeout = 5.0) + self._server.run() def _until_http_response_sent(self, msg = '', mimetype = 'text/plain', length = None, code = 200, @@ -134,6 +135,7 @@ else: yield self._until_one_request_processed(addr) finally: + logging.info('Closing connection to %s' % repr(addr)) self._num_connections -= 1 def __multipart_boundary(self, boundary, mimetype = 'application/json'): @@ -182,6 +184,8 @@ i = self._parse_id(querydict.get('start')) conv = self._convs.get(conv_name) while i >= len(conv): + logging.info("Waiting for message on channel '%s' for %s" % + (conv_name, addr)) yield channels.until_message_received(conv_name) yield self._until_http_response_sent( json.dumps({'messages': conv[i:]}), @@ -218,6 +222,7 @@ request = yield until_received(terminator = '\r\n\r\n') request = request.splitlines() request_line = request[0] + logging.info("Request from %s: %s" % (addr, request_line)) stringfile = cStringIO.StringIO('\n'.join(request[1:])) headers = mimetools.Message(stringfile) req_parts = request_line.split() @@ -299,10 +304,20 @@ if __name__ == '__main__': args = get_args(ip = '127.0.0.1', port = 8071, - is_keep_alive = True) + is_keep_alive = True, + logfile = '', + loglevel = 'info') + + args.loglevel = getattr(logging, args.loglevel.upper()) + if args.logfile: + logging.basicConfig(filename = args.logfile, + level = args.loglevel) + else: + logging.basicConfig(stream = sys.stdout, + level = args.loglevel) server = OpenWebChatServer(addr = (args.ip, args.port), conversations = Conversations(), is_keep_alive = args.is_keep_alive) - print "Starting server with configuration: %s" % args + logging.info("Starting server with configuration: %s" % args) server.run()