def middleware(environ, start_response): try: return app(environ, start_response) except: msg = 'Exception when processing %s' % webob.Request(environ).url tb = traceback.format_exc() get_logger().error('\n'.join((msg, tb))) raise
def middleware(environ, start_response): try: return app(environ, start_response) except: request = webob.Request(environ) msg = ['Exception when processing %s' % request.url] msg.append('Referer: %s' % request.referer) msg.append(traceback.format_exc()) get_logger().error('\n'.join(msg)) raise
def exercise(app): """ Simulate the first request to the application in order to prime the ZODB cache. Performing this operation during start up, it is hoped to delay user requests being handed off to this worker by mod_wsgi until after the cache is already primed. Otherwise the first, slow, cache priming request would fall to an unlucky user. """ # Need to be logged in as somebody. Use the first user we find that is a # member of some group. root, closer = get_root(app) for profile in root['profiles'].values(): user = root.users.get_by_id(profile.__name__) if user['groups']: break request = webob.Request.blank('/') request.environ['repoze.who.identity'] = user user['repoze.who.userid'] = user['id'] home, extra_path = get_user_home(root, request) path = model_path(home, *extra_path) request.path_info = path response = request.get_response(app) if response.status_int != 200: logger = get_logger() logger.warn('Status of %s when priming cache. Response body:\n%s' % (response.status, response.body))
def run_daemon(name, func, interval=300, tries=3, retryable=None): logger = get_logger() if retryable is None: retryable = (ConflictError,) while True: tried = 0 logger.info("Running %s", name) while True: try: func() logger.info("Finished %s", name) break except retryable: tried += 1 if tried == tries: logger.error("Error after %s tries" % tries, exc_info=True) break logger.info("Retrying, count = %s" % tried, exc_info=True) except: logger.error("Error in daemon process", exc_info=True) break if _debug_object_refs: _count_object_refs() sys.stderr.flush() sys.stdout.flush() time.sleep(interval)
def run_daemon(name, func, interval=300, retry_period=30 * 60, retry_interval=60, retryable=None, proceed=None): logger = get_logger() if retryable is None: retryable = (ConflictError,) if proceed == None: # pragma NO COVERAGE def proceed(): return True while proceed(): start_trying = _time_time() tries = 0 logger.info("Running %s", name) while True: try: tries += 1 func() logger.info("Finished %s", name) break except retryable: if _time_time() - start_trying > retry_period: logger.error("Retried for %d seconds, count = %d", retry_period, tries, exc_info=True) break logger.info("Retrying in %d seconds, count = %d", retry_interval, tries, exc_info=True) _time_sleep(retry_interval) except: logger.error("Error in daemon process", exc_info=True) break if _debug_object_refs: # pragma NO COVERAGE _count_object_refs() sys.stderr.flush() sys.stdout.flush() _time_sleep(interval)
def main(argv=sys.argv[1:]): parser = optparse.OptionParser(description=__doc__, usage='%prog [options] message') parser.add_option('-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option('-L', '--level', dest='level', help='Log level: debug, info, warn or error', default='info') options, args = parser.parse_args(argv) if not args: parser.error("No message given.") config = options.config if config is None: config = get_default_config() root, closer = open_root(config) func = getattr(get_logger(), options.level, None) if func is None: parser.error("Bad level: %s" % options.level) func(' '.join(args))
def test_no_setup(self): from karl.log import get_logger from karl.log import NullHandler logger = get_logger() self.assertEqual(len(logger.handlers), 1) self.failUnless(isinstance(logger.handlers[0], NullHandler))