Exemplo n.º 1
0
def test_gunicorn_logger_set_formatters_on_gunicorn_logs():
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    error = logger._get_gunicorn_handler(logger.error_log)
    assert isinstance(error.formatter, logs.StructuredFormatter)
    access = logger._get_gunicorn_handler(logger.access_log)
    assert isinstance(access.formatter, logs.StructuredFormatter)
Exemplo n.º 2
0
def test_gunicorn_logger_get_extra_str_status(environ):
    response, environ, delta, expected = access_extra_args(environ, '/')
    cfg = Config()
    logger = gunicorn.GunicornLogger(cfg)
    response.status = '200 OK'

    msg, extra = logger.get_extra(response, None, environ, delta)
    assert extra['status'] == '200'
Exemplo n.º 3
0
def test_gunicorn_logger_get_extra(environ):
    response, environ, delta, expected = access_extra_args(
        environ, '/foo?bar=baz')
    cfg = Config()
    logger = gunicorn.GunicornLogger(cfg)
    msg, extra = logger.get_extra(response, None, environ, delta, 200)
    assert msg == 'GET /foo?'
    assert extra == expected
Exemplo n.º 4
0
def test_gunicorn_logger_logging(level, statsd_metrics, log):
    cfg = Config()
    logger = gunicorn.GunicornLogger(cfg)
    getattr(logger, level)(level)
    expected = 'ERROR' if level == 'exception' else level.upper()
    assert log[0].levelname == expected
    assert log[0].getMessage() == level
    assert 'gunicorn.log.{}:1|c'.format(level) in statsd_metrics[0]
Exemplo n.º 5
0
def test_gunicorn_logger_access(environ, log):
    response, environ, delta, expected = access_extra_args(environ, '/')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)

    logger.access(response, None, environ, delta)
    log[0]._structured == expected
Exemplo n.º 6
0
def test_gunicorn_logger_access_qs(environ, context):
    response, environ, delta, expected = access_extra_args(
        environ, '/url?foo=bar')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)

    context.logs[:] = []
    logger.access(response, None, environ, delta)
    assert context.logs.exists(msg='GET /url?', extra=expected)
Exemplo n.º 7
0
def test_gunicorn_logger_access_forwarded(environ, context):
    response, environ, delta, expected = access_extra_args(environ, '/')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    context.logs[:] = []
    logger.access(response, None, environ, delta)
    assert context.logs.exists(msg='GET /', extra=expected)
    assert context.statsd[0] == 'gunicorn.count.view.GET.200:1|c'
    assert context.statsd[1].startswith('gunicorn.latency.view.GET.200:')
Exemplo n.º 8
0
def test_gunicorn_logger_access_qs(environ, log):
    response, environ, delta, expected = access_extra_args(
        environ, '/url?foo=bar')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)

    log[:] = []
    logger.access(response, None, environ, delta)
    assert log[0]._structured == expected
    assert log[0].msg == 'GET /url?'
Exemplo n.º 9
0
def test_gunicorn_logger_status_url(environ, log, statsd_metrics):
    response, environ, delta, expected = access_extra_args(
        environ, '/_status/ping')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    statsd.get_client()  # force the statsd creationg log message
    log[:] = []
    logger.access(response, None, environ, delta)
    assert len(log) == 0
    assert len(statsd_metrics) == 0
Exemplo n.º 10
0
def test_gunicorn_logger_status_url_enabled(environ, context, monkeypatch):
    response, environ, delta, expected = access_extra_args(
        environ, '/_status/ping')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    statsd.get_client()  # force the statsd creationg log message
    context.logs[:] = []
    monkeypatch.setitem(os.environ, 'TALISKER_LOGSTATUS', 'true')
    logger.access(response, None, environ, delta)
    assert len(context.logs) == 1
    assert len(context.statsd) == 0
Exemplo n.º 11
0
def test_gunicorn_logger_access_forwarded(environ, log, statsd_metrics):
    response, environ, delta, expected = access_extra_args(environ, '/')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    log[:] = []
    logger.access(response, None, environ, delta)
    assert log[0]._structured == expected
    assert log[0].msg == 'GET /'

    assert statsd_metrics[0] == 'gunicorn.count.view.GET.200:1|c'
    assert statsd_metrics[1].startswith('gunicorn.latency.view.GET.200:')
Exemplo n.º 12
0
def test_gunicorn_logger_access_with_request_id(environ, context):
    rid = 'request-id'
    response, environ, delta, expected = access_extra_args(environ, '/')
    expected['request_id'] = rid
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)

    context.logs[:] = []
    with request_id.context(rid):
        logger.access(response, None, environ, delta)
    assert context.logs.exists(extra=expected)
Exemplo n.º 13
0
def test_gunicorn_logger_access_with_request_id(environ, log):
    rid = 'request-id'
    response, environ, delta, expected = access_extra_args(environ, '/')
    expected['request_id'] = rid
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)

    log[:] = []
    with request_id.context(rid):
        logger.access(response, None, environ, delta)
    assert log[0]._structured == expected
Exemplo n.º 14
0
def test_gunicorn_logger_access_with_request_content(environ, log):
    response, environ, delta, expected = access_extra_args(environ, '/')
    environ['CONTENT_TYPE'] = 'type'
    environ['CONTENT_LENGTH'] = '10'
    expected['request_type'] = 'type'
    expected['request_length'] = 10
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)

    log[:] = []
    logger.access(response, None, environ, delta)
    assert log[0]._structured == expected
Exemplo n.º 15
0
def test_gunicorn_logger_access_with_request_id(environ, log):
    rid = 'request-id'
    response, environ, delta, expected = access_extra_args(
        environ, '/')
    response.headers.append(('X-Request-Id', rid))
    expected['request_id'] = rid
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)

    log[:] = []
    logger.access(response, None, environ, delta)
    assert log[0]._structured == expected
Exemplo n.º 16
0
def test_gunicorn_logger_access_no_forwarded(environ, context):
    response, environ, delta, expected = access_extra_args(environ, '/')
    environ.pop('HTTP_X_FORWARDED_FOR')
    response.headers = [('X-View-Name', 'view')]
    expected.pop('forwarded')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    context.logs[:] = []
    logger.access(response, None, environ, delta)
    assert context.logs.exists(msg='GET /', extra=expected)
    assert context.statsd[0] == 'gunicorn.count.view.GET.200:1|c'
    assert context.statsd[1].startswith('gunicorn.latency.view.GET.200:')
Exemplo n.º 17
0
def test_gunicorn_logger_access_500(environ, context):
    response, environ, delta, expected = access_extra_args(environ, '/')
    response.status_code = 500
    response.status = '500 Server Error'
    expected['status'] = 500
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    context.logs[:] = []
    logger.access(response, None, environ, delta)
    assert context.logs.exists(msg='GET /', extra=expected)
    assert context.statsd[0] == 'gunicorn.count.view.GET.500:1|c'
    assert context.statsd[1] == 'gunicorn.errors.view.GET.500:1|c'
    assert context.statsd[2].startswith('gunicorn.latency.view.GET.500:')
Exemplo n.º 18
0
def test_gunicorn_logger_access_no_forwarded(environ, log, statsd_metrics):
    response, environ, delta, expected = access_extra_args(environ, '/')
    environ.pop('HTTP_X_FORWARDED_FOR')
    response.headers = [('X-View-Name', 'view')]
    expected.pop('forwarded')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    log[:] = []
    logger.access(response, None, environ, delta)
    assert log[0]._structured == expected
    assert log[0].msg == 'GET /'

    assert statsd_metrics[0] == 'gunicorn.count.view.GET.200:1|c'
    assert statsd_metrics[1].startswith('gunicorn.latency.view.GET.200:')
Exemplo n.º 19
0
def test_gunicorn_get_response_status():
    cfg = Config()
    logger = gunicorn.GunicornLogger(cfg)

    class Response1:
        status_code = 200
    assert logger.get_response_status(Response1()) == 200

    class Response2:
        status = '200 OK'
    assert logger.get_response_status(Response2()) == 200

    class Response3:
        status = 200
    assert logger.get_response_status(Response3()) == 200
Exemplo n.º 20
0
def test_gunicorn_logger_access(environ, log, statsd_metrics):
    response, environ, delta, expected = access_extra_args(
        environ, '/')
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)

    log[:] = []
    logger.access(response, None, environ, delta)
    assert log[0]._structured == expected
    assert log[0].msg == 'GET /'

    assert 'gunicorn.request.duration:' in statsd_metrics[0]
    assert 'gunicorn.requests:1|c' in statsd_metrics[1]
    assert 'gunicorn.request.status.200:1|c' in statsd_metrics[2]
Exemplo n.º 21
0
def test_gunicorn_logger_access_500(environ, log, statsd_metrics):
    response, environ, delta, expected = access_extra_args(environ, '/')
    response.status_code = 500
    response.status = '500 Server Error'
    expected['status'] = 500
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    log[:] = []
    logger.access(response, None, environ, delta)
    assert log[0]._structured == expected
    assert log[0].msg == 'GET /'

    assert statsd_metrics[0] == 'gunicorn.count.view.GET.500:1|c'
    assert statsd_metrics[1] == 'gunicorn.errors.view.GET.500:1|c'
    assert statsd_metrics[2].startswith('gunicorn.latency.view.GET.500:')
Exemplo n.º 22
0
def test_gunicorn_logger_get_extra(environ):
    track_request_metric('sql', 1.0)
    track_request_metric('http', 2.0)
    track_request_metric('log', 3.0)
    response, environ, delta, expected = access_extra_args(
        environ, '/foo?bar=baz')
    expected['sql_count'] = 1
    expected['sql_time_ms'] = 1.0
    expected['http_count'] = 1
    expected['http_time_ms'] = 2.0
    expected['log_count'] = 1
    expected['log_time_ms'] = 3.0
    cfg = Config()
    logger = gunicorn.GunicornLogger(cfg)
    msg, extra = logger.get_extra(response, None, environ, delta, 200)
    assert msg == 'GET /foo?'
    assert extra == expected
Exemplo n.º 23
0
def test_gunicorn_logger_propagate_error_log():
    cfg = Config()
    logger = gunicorn.GunicornLogger(cfg)
    assert logger.error_log.propagate is True
    assert len(logger.error_log.handlers) == 0
Exemplo n.º 24
0
def test_gunicorn_logger_no_handler_for_stderr_access_log():
    cfg = Config()
    cfg.set('accesslog', '-')
    logger = gunicorn.GunicornLogger(cfg)
    assert logger.access_log.propagate is True
    assert logger._get_gunicorn_handler(logger.access_log) is None
Exemplo n.º 25
0
def test_gunicorn_logger_now():
    logger = gunicorn.GunicornLogger(Config())
    ts = logger.now()
    assert ts == '[02/Jan/2016:03:04:05.678 +0000]'