Exemplo n.º 1
0
def test_rounding():
    app = create_app()
    Instrumentator(should_round_latency_decimals=True).add(
        metrics.latency(buckets=(
            1,
            2,
            3,
        ))).instrument(app).expose(app)
    client = TestClient(app)

    get_response(client, "/")
    get_response(client, "/")
    get_response(client, "/")

    _ = get_response(client, "/metrics")

    result = REGISTRY.get_sample_value(
        "http_request_duration_seconds_sum",
        {
            "handler": "/",
            "method": "GET",
            "status": "2xx"
        },
    )

    entropy = calc_entropy(str(result).split(".")[1][4:])

    assert entropy < 10
Exemplo n.º 2
0
def test_excluded_handlers_none():
    app = create_app()
    exporter = (Instrumentator(excluded_handlers=None).add(
        metrics.latency()).instrument(app))
    expose_metrics(app)

    assert len(exporter.excluded_handlers) == 0
    assert isinstance(exporter.excluded_handlers, list)
    assert exporter.excluded_handlers is not None
Exemplo n.º 3
0
def test_multiprocess_env_folder(monkeypatch, tmp_path):
    monkeypatch.setenv("prometheus_multiproc_dir", "DOES/NOT/EXIST")

    app = create_app()
    with pytest.raises(Exception):
        Instrumentator(buckets=(
            1,
            2,
            3,
        )).add(metrics.latency()).instrument(app).expose(app)
Exemplo n.º 4
0
def test_should_respect_env_var_existence_exists():
    app = create_app()
    Instrumentator(should_respect_env_var=True,
                   env_var_name="eoioerwjioGFIUONEIO").add(
                       metrics.latency()).instrument(app).expose(app)
    client = TestClient(app)

    get_response(client, "/")

    response = get_response(client, "/metrics")
    assert response.status_code == 404
Exemplo n.º 5
0
def test_default_without_add():
    app = create_app()
    Instrumentator(excluded_handlers=["/metrics"]).add(
        metrics.latency()).instrument(app)
    expose_metrics(app)
    client = TestClient(app)

    get_response(client, "/")

    response = get_response(client, "/metrics")
    assert_is_not_multiprocess(response)
    assert_request_count(1)
    assert b"http_request_duration_seconds" in response.content
Exemplo n.º 6
0
def test_metrics_endpoint_availability():
    app = create_app()
    Instrumentator(excluded_handlers=["/metrics"]).add(
        metrics.latency()).instrument(app)
    expose_metrics(app)
    client = TestClient(app)

    get_response(client, "/")
    get_response(client, "/")

    response = get_response(client, "/metrics")
    assert_is_not_multiprocess(response)
    assert_request_count(2)
Exemplo n.º 7
0
def test_multiprocess_reg_is_not(monkeypatch, tmp_path):
    monkeypatch.setenv("prometheus_multiproc_dir", str(tmp_path))

    app = create_app()
    Instrumentator(excluded_handlers=["/metrics"]).add(
        metrics.latency()).instrument(app).expose(app)

    client = TestClient(app)

    get_response(client, "/")

    response = get_response(client, "/metrics")
    assert response.status_code == 200
    assert b"" == response.content
Exemplo n.º 8
0
def test_ungrouped_status_codes():
    app = create_app()
    Instrumentator(should_group_status_codes=False).add(
        metrics.latency()).instrument(app)
    expose_metrics(app)
    client = TestClient(app)

    get_response(client, "/")

    response = get_response(client, "/metrics")
    assert_is_not_multiprocess(response)
    assert_request_count(1, status="200")
    assert b'status="2xx"' not in response.content
    assert b'status="200"' in response.content
Exemplo n.º 9
0
def test_custom_metric_name():
    app = create_app()
    Instrumentator(excluded_handlers=["/metrics"]).add(
        metrics.latency(metric_name="fastapi_latency")).instrument(app)
    expose_metrics(app)
    client = TestClient(app)

    get_response(client, "/")

    response = get_response(client, "/metrics")
    assert_is_not_multiprocess(response)
    assert_request_count(1, name="fastapi_latency_count")
    assert b"fastapi_latency" in response.content
    assert b"http_request_duration_seconds" not in response.content
Exemplo n.º 10
0
def test_bucket_without_inf():
    app = create_app()
    Instrumentator(excluded_handlers=["/metrics"]).add(
        metrics.latency(buckets=(
            1,
            2,
            3,
        ))).instrument(app).expose(app)
    client = TestClient(app)

    get_response(client, "/")

    response = get_response(client, "/metrics")
    assert_is_not_multiprocess(response)
    assert b"http_request_duration_seconds" in response.content
Exemplo n.º 11
0
def test_grouping_untemplated():
    app = create_app()
    Instrumentator(excluded_handlers=["/metrics"]).add(
        metrics.latency()).instrument(app)
    expose_metrics(app)
    client = TestClient(app)

    get_response(client, "/")
    get_response(client, "/items/678?q=43243")
    get_response(client, "/does_not_exist")

    response = get_response(client, "/metrics")
    assert_is_not_multiprocess(response)
    assert_request_count(1)
    assert b'handler="/does_not_exist"' not in response.content
    assert b'handler="none"' in response.content
Exemplo n.º 12
0
def test_excluding_handlers_regex():
    app = create_app()
    Instrumentator(excluded_handlers=["^/$"]).add(
        metrics.latency()).instrument(app)
    expose_metrics(app)
    client = TestClient(app)

    get_response(client, "/ignore")
    get_response(client, "/ignore")
    get_response(client, "/")

    response = get_response(client, "/metrics")

    assert b'handler="/"' not in response.content
    assert b'handler="none"' not in response.content
    assert b'handler="/ignore"' in response.content
def test_latency_all_labels():
    app = create_app()
    Instrumentator().add(metrics.latency()).instrument(app).expose(app)
    client = TestClient(app)

    client.get("/")

    _ = get_response(client, "/metrics")

    assert (REGISTRY.get_sample_value(
        "http_request_duration_seconds_sum",
        {
            "handler": "/",
            "method": "GET",
            "status": "2xx"
        },
    ) > 0)
Exemplo n.º 14
0
def test_multiprocess_reg():
    app = create_app()
    Instrumentator(excluded_handlers=["/metrics"]).add(
        metrics.latency(buckets=(
            1,
            2,
            3,
        ))).instrument(app).expose(app)
    client = TestClient(app)

    get_response(client, "/")

    response = get_response(client, "/metrics")
    assert response.status_code == 200
    assert b"Multiprocess" in response.content
    assert b"# HELP process_cpu_seconds_total" not in response.content
    assert b"http_request_duration_seconds" in response.content
Exemplo n.º 15
0
def test_excluding_handlers():
    app = create_app()
    Instrumentator(excluded_handlers=["fefefwefwe"]).add(
        metrics.latency()).instrument(app)
    expose_metrics(app)
    client = TestClient(app)

    get_response(client, "/")
    get_response(client, "/metrics")
    get_response(client, "/fefefwefwe")

    response = get_response(client, "/metrics")
    assert_is_not_multiprocess(response)
    assert_request_count(1)
    assert b'handler="/metrics"' in response.content
    assert b'handler="/fefefwefwe"' not in response.content
    assert b'handler="none"' not in response.content
def test_latency_no_labels():
    app = create_app()
    Instrumentator().add(
        metrics.latency(
            should_include_handler=False,
            should_include_method=False,
            should_include_status=False,
        )).instrument(app).expose(app)
    client = TestClient(app)

    client.get("/")

    _ = get_response(client, "/metrics")

    assert (REGISTRY.get_sample_value(
        "http_request_duration_seconds_sum",
        {},
    ) > 0)
Exemplo n.º 17
0
def test_dont_ignore_untemplated_ungrouped():
    app = create_app()
    Instrumentator(should_ignore_untemplated=False,
                   should_group_untemplated=False).add(
                       metrics.latency()).instrument(app)
    expose_metrics(app)
    client = TestClient(app)

    get_response(client, "/")
    get_response(client, "/")
    get_response(client, "/items/678?q=43243")
    get_response(client, "/does_not_exist")

    response = get_response(client, "/metrics")
    assert_is_not_multiprocess(response)
    assert_request_count(2)
    assert b'handler="/does_not_exist"' in response.content
    assert b'handler="none"' not in response.content
Exemplo n.º 18
0
        metric_namespace=NAMESPACE,
        metric_subsystem=SUBSYSTEM,
    ))
instrumentator.add(
    metrics.response_size(
        should_include_handler=True,
        should_include_method=True,
        should_include_status=True,
        metric_namespace=NAMESPACE,
        metric_subsystem=SUBSYSTEM,
    ))
instrumentator.add(
    metrics.latency(
        should_include_handler=True,
        should_include_method=True,
        should_include_status=True,
        metric_namespace=NAMESPACE,
        metric_subsystem=SUBSYSTEM,
    ))
instrumentator.add(
    metrics.requests(
        should_include_handler=True,
        should_include_method=True,
        should_include_status=True,
        metric_namespace=NAMESPACE,
        metric_subsystem=SUBSYSTEM,
    ))

# buckets = (*np.arange(0, 10.5, 0.5).tolist(), float("inf"))
# instrumentator.add(
#     regression_model_output(metric_namespace=NAMESPACE, metric_subsystem=SUBSYSTEM, buckets=buckets)