Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
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))
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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))
Exemple #7
0
 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))